From 9336c8922267c6d16ae619edb956f224652b5fa5 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Wed, 26 Dec 2018 14:26:49 +0100 Subject: [PATCH] Import cantor_18.12.0.orig.tar.xz [dgit import orig cantor_18.12.0.orig.tar.xz] --- .arcconfig | 4 + .gitignore | 21 + .kateconfig | 4 + CMakeLists.txt | 99 + COPYING | 339 ++ COPYING.DOC | 397 ++ ChangeLog | 25 + DESIGN | 143 + FindCantor.cmake | 24 + README.md | 40 + cmake/COPYING-CMAKE-SCRIPTS | 22 + cmake/FindDiscount.cmake | 41 + cmake/FindJulia.cmake | 95 + cmake/FindLibSpectre.cmake | 59 + cmake/FindLuaJIT.cmake | 13 + cmake/FindPythonLibs3.cmake | 18 + cmake/FindQalculate.cmake | 80 + cmake/FindR.cmake | 125 + doc/CMakeLists.txt | 4 + doc/create-dlg.png | Bin 0 -> 3053 bytes doc/differentiate-dlg.png | Bin 0 -> 3019 bytes doc/import-dlg.png | Bin 0 -> 2088 bytes doc/index.docbook | 939 +++++ doc/integrate-dlg.png | Bin 0 -> 4674 bytes doc/latex_formula.png | Bin 0 -> 597 bytes doc/matrix-dlg.png | Bin 0 -> 2042 bytes doc/plot-dlg1.png | Bin 0 -> 8505 bytes doc/plot-dlg2.png | Bin 0 -> 9465 bytes doc/plot2d-dlg.png | Bin 0 -> 3645 bytes doc/plot3d-dlg.png | Bin 0 -> 4511 bytes doc/screenshot.png | Bin 0 -> 31151 bytes doc/solve-equations-dlg.png | Bin 0 -> 3394 bytes examples/maxima/maxima_examples_plots.cws | Bin 0 -> 258708 bytes examples/maxima/tutorial_for_beginners.cws | Bin 0 -> 51605 bytes examples/octave/lorenzSystem.cws | Bin 0 -> 53459 bytes examples/octave/octave_examples_2d_plots.cws | Bin 0 -> 77766 bytes examples/octave/octave_examples_3d_plots.cws | Bin 0 -> 753930 bytes icons/128-apps-cantor.png | Bin 0 -> 4264 bytes icons/16-apps-cantor.png | Bin 0 -> 446 bytes icons/22-apps-cantor.png | Bin 0 -> 469 bytes icons/32-apps-cantor.png | Bin 0 -> 977 bytes icons/48-apps-cantor.png | Bin 0 -> 1356 bytes icons/48-apps-juliabackend.png | Bin 0 -> 3014 bytes icons/48-apps-kalgebrabackend.png | Bin 0 -> 2645 bytes icons/48-apps-luabackend.png | Bin 0 -> 1546 bytes icons/48-apps-maximabackend.png | Bin 0 -> 3516 bytes icons/48-apps-octavebackend.png | Bin 0 -> 1882 bytes icons/48-apps-pythonbackend.png | Bin 0 -> 33166 bytes icons/48-apps-qalculatebackend.png | Bin 0 -> 3793 bytes icons/48-apps-rbackend.png | Bin 0 -> 4716 bytes icons/48-apps-sagebackend.png | Bin 0 -> 1558 bytes icons/48-apps-scilabbackend.png | Bin 0 -> 2620 bytes icons/64-apps-cantor.png | Bin 0 -> 1869 bytes icons/CMakeLists.txt | 19 + icons/hisc-apps-cantor.svgz | Bin 0 -> 2130 bytes org.kde.cantor.appdata.xml | 115 + po/bs/cantor.po | 3326 ++++++++++++++++ po/ca/cantor.po | 3342 ++++++++++++++++ po/ca/docs/cantor/index.docbook | 1396 +++++++ po/ca@valencia/cantor.po | 3199 ++++++++++++++++ po/cs/cantor.po | 3120 +++++++++++++++ po/da/cantor.po | 3344 ++++++++++++++++ po/de/cantor.po | 3360 ++++++++++++++++ po/de/docs/cantor/index.docbook | 1412 +++++++ po/el/cantor.po | 3357 ++++++++++++++++ po/en_GB/cantor.po | 3337 ++++++++++++++++ po/eo/cantor.po | 3085 +++++++++++++++ po/es/cantor.po | 3266 ++++++++++++++++ po/es/docs/cantor/index.docbook | 1406 +++++++ po/es/docs/cantor/screenshot.png | Bin 0 -> 64562 bytes po/et/cantor.po | 3346 ++++++++++++++++ po/et/docs/cantor/index.docbook | 1044 +++++ po/eu/cantor.po | 3268 ++++++++++++++++ po/fi/cantor.po | 3240 ++++++++++++++++ po/fr/cantor.po | 3334 ++++++++++++++++ po/fr/docs/cantor/index.docbook | 1013 +++++ po/fr/docs/cantor/screenshot.png | Bin 0 -> 101130 bytes po/ga/cantor.po | 3139 +++++++++++++++ po/gl/cantor.po | 3314 ++++++++++++++++ po/gl/docs/cantor/index.docbook | 573 +++ po/hr/cantor.po | 3332 ++++++++++++++++ po/hu/cantor.po | 3371 ++++++++++++++++ po/it/cantor.po | 3316 ++++++++++++++++ po/it/docs/cantor/index.docbook | 1044 +++++ po/ja/cantor.po | 3064 +++++++++++++++ po/kk/cantor.po | 3332 ++++++++++++++++ po/ko/cantor.po | 3240 ++++++++++++++++ po/lt/cantor.po | 3112 +++++++++++++++ po/lv/cantor.po | 3366 ++++++++++++++++ po/mr/cantor.po | 3090 +++++++++++++++ po/nb/cantor.po | 3148 +++++++++++++++ po/nds/cantor.po | 3385 +++++++++++++++++ po/nl/cantor.po | 3339 ++++++++++++++++ po/nl/docs/cantor/index.docbook | 1392 +++++++ po/nn/cantor.po | 3128 +++++++++++++++ po/pa/cantor.po | 3210 ++++++++++++++++ po/pl/cantor.po | 3323 ++++++++++++++++ po/pt/cantor.po | 3211 ++++++++++++++++ po/pt/docs/cantor/index.docbook | 1410 +++++++ po/pt_BR/cantor.po | 3207 ++++++++++++++++ po/pt_BR/docs/cantor/index.docbook | 1044 +++++ po/pt_BR/docs/cantor/screenshot.png | Bin 0 -> 67652 bytes po/ro/cantor.po | 3337 ++++++++++++++++ po/ru/cantor.po | 3365 ++++++++++++++++ po/ru/docs/cantor/index.docbook | 571 +++ po/sk/cantor.po | 3246 ++++++++++++++++ po/sl/cantor.po | 3264 ++++++++++++++++ po/sv/cantor.po | 3334 ++++++++++++++++ po/sv/docs/cantor/index.docbook | 1410 +++++++ po/tr/cantor.po | 3248 ++++++++++++++++ po/ug/cantor.po | 3111 +++++++++++++++ po/uk/cantor.po | 3369 ++++++++++++++++ po/uk/docs/cantor/create-dlg.png | Bin 0 -> 8312 bytes po/uk/docs/cantor/differentiate-dlg.png | Bin 0 -> 7488 bytes po/uk/docs/cantor/import-dlg.png | Bin 0 -> 7155 bytes po/uk/docs/cantor/index.docbook | 1402 +++++++ po/uk/docs/cantor/integrate-dlg.png | Bin 0 -> 8957 bytes po/uk/docs/cantor/matrix-dlg.png | Bin 0 -> 6900 bytes po/uk/docs/cantor/plot-dlg1.png | Bin 0 -> 14549 bytes po/uk/docs/cantor/plot-dlg2.png | Bin 0 -> 16581 bytes po/uk/docs/cantor/plot2d-dlg.png | Bin 0 -> 8236 bytes po/uk/docs/cantor/plot3d-dlg.png | Bin 0 -> 9322 bytes po/uk/docs/cantor/screenshot.png | Bin 0 -> 65514 bytes po/uk/docs/cantor/solve-equations-dlg.png | Bin 0 -> 7976 bytes po/zh_CN/cantor.po | 3162 +++++++++++++++ po/zh_TW/cantor.po | 3139 +++++++++++++++ src/.emacs-dirvars | 74 + src/CMakeLists.txt | 112 + src/Messages.sh | 6 + src/actionbar.cpp | 93 + src/actionbar.h | 62 + src/animation.cpp | 109 + src/animation.h | 75 + src/animationresultitem.cpp | 152 + src/animationresultitem.h | 70 + src/assistants/CMakeLists.txt | 23 + src/assistants/advancedplot/CMakeLists.txt | 9 + .../advancedplot/advancedplotassistant.cpp | 115 + .../advancedplot/advancedplotassistant.h | 43 + .../advancedplot/advancedplotassistant.json | 38 + .../advancedplot/advancedplotdialog.ui | 63 + .../cantor_advancedplot_assistant.rc | 8 + .../advancedplot/directivecontainer.ui | 22 + src/assistants/differentiate/CMakeLists.txt | 9 + .../cantor_differentiate_assistant.rc | 8 + .../differentiate/differentiateassistant.cpp | 83 + .../differentiate/differentiateassistant.h | 38 + .../differentiate/differentiateassistant.json | 67 + .../differentiate/differentiatedlg.ui | 78 + src/assistants/importpackage/CMakeLists.txt | 9 + .../cantor_import_package_assistant.rc | 8 + .../importpackage/importpackageassistant.cpp | 82 + .../importpackage/importpackageassistant.h | 38 + .../importpackage/importpackageassistant.json | 64 + .../importpackage/importpackagedlg.ui | 42 + src/assistants/integrate/CMakeLists.txt | 9 + .../integrate/cantor_integrate_assistant.rc | 8 + .../integrate/integrateassistant.cpp | 90 + src/assistants/integrate/integrateassistant.h | 38 + .../integrate/integrateassistant.json | 67 + src/assistants/integrate/integratedlg.ui | 136 + src/assistants/linearalgebra/CMakeLists.txt | 4 + .../linearalgebra/creatematrix/CMakeLists.txt | 10 + .../cantor_create_matrix_assistant.rc | 8 + .../creatematrix/creatematrixassistant.cpp | 73 + .../creatematrix/creatematrixassistant.h | 38 + .../creatematrix/creatematrixassistant.json | 65 + .../creatematrix/creatematrixdlg.cpp | 77 + .../creatematrix/creatematrixdlg.h | 47 + .../creatematrix/creatematrixdlg.ui | 77 + .../linearalgebra/eigenvalues/CMakeLists.txt | 9 + .../cantor_eigenvalues_assistant.rc | 8 + .../eigenvalues/eigenvaluesassistant.cpp | 81 + .../eigenvalues/eigenvaluesassistant.h | 38 + .../eigenvalues/eigenvaluesassistant.json | 65 + .../eigenvalues/eigenvaluesdlg.ui | 42 + .../linearalgebra/eigenvectors/CMakeLists.txt | 9 + .../cantor_eigenvectors_assistant.rc | 8 + .../eigenvectors/eigenvectorsassistant.cpp | 81 + .../eigenvectors/eigenvectorsassistant.h | 38 + .../eigenvectors/eigenvectorsassistant.json | 65 + .../eigenvectors/eigenvectorsdlg.ui | 42 + .../linearalgebra/invertmatrix/CMakeLists.txt | 9 + .../cantor_invert_matrix_assistant.rc | 8 + .../invertmatrix/invertmatrixassistant.cpp | 81 + .../invertmatrix/invertmatrixassistant.h | 38 + .../invertmatrix/invertmatrixassistant.json | 65 + .../invertmatrix/invertmatrixdlg.ui | 42 + src/assistants/plot2d/CMakeLists.txt | 9 + .../plot2d/cantor_plot2d_assistant.rc | 8 + src/assistants/plot2d/plot2dassistant.cpp | 82 + src/assistants/plot2d/plot2dassistant.h | 37 + src/assistants/plot2d/plot2dassistant.json | 66 + src/assistants/plot2d/plot2ddlg.ui | 97 + src/assistants/plot3d/CMakeLists.txt | 9 + .../plot3d/cantor_plot3d_assistant.rc | 8 + src/assistants/plot3d/plot3dassistant.cpp | 92 + src/assistants/plot3d/plot3dassistant.h | 37 + src/assistants/plot3d/plot3dassistant.json | 66 + src/assistants/plot3d/plot3ddlg.ui | 142 + src/assistants/runscript/CMakeLists.txt | 9 + .../runscript/cantor_runscript_assistant.rc | 8 + .../runscript/runscriptassistant.cpp | 66 + src/assistants/runscript/runscriptassistant.h | 38 + .../runscript/runscriptassistant.json | 66 + src/assistants/solve/CMakeLists.txt | 9 + .../solve/cantor_solve_assistant.rc | 8 + src/assistants/solve/solveassistant.cpp | 82 + src/assistants/solve/solveassistant.h | 38 + src/assistants/solve/solveassistant.json | 67 + src/assistants/solve/solvedlg.ui | 60 + src/backendchoosedialog.cpp | 100 + src/backendchoosedialog.h | 46 + src/backendchooser.ui | 74 + src/backends/CMakeLists.txt | 103 + src/backends/R/CMakeLists.txt | 29 + src/backends/R/DESIGN | 24 + src/backends/R/cantor_r.knsrc | 7 + src/backends/R/rbackend.cpp | 107 + src/backends/R/rbackend.h | 47 + src/backends/R/rbackend.json | 67 + src/backends/R/rcompletionobject.cpp | 73 + src/backends/R/rcompletionobject.h | 43 + src/backends/R/rexpression.cpp | 150 + src/backends/R/rexpression.h | 47 + src/backends/R/rextensions.cpp | 99 + src/backends/R/rextensions.h | 67 + src/backends/R/rhighlighter.cpp | 92 + src/backends/R/rhighlighter.h | 56 + src/backends/R/rkeywords.cpp | 50 + src/backends/R/rkeywords.h | 38 + src/backends/R/rserver/CMakeLists.txt | 24 + src/backends/R/rserver/main.cpp | 55 + src/backends/R/rserver/org.kde.Cantor.R.xml | 42 + src/backends/R/rserver/rcallbacks.cpp | 119 + src/backends/R/rserver/rcallbacks.h | 47 + src/backends/R/rserver/rserver.cpp | 510 +++ src/backends/R/rserver/rserver.h | 83 + src/backends/R/rserver/rserver.kcfg | 16 + src/backends/R/rserver/settings.kcfgc | 3 + src/backends/R/rserver/tools/autoloads.r | 29 + src/backends/R/rserver/tools/envvars.r | 16 + src/backends/R/rsession.cpp | 217 ++ src/backends/R/rsession.h | 75 + src/backends/R/rsettingswidget.cpp | 56 + src/backends/R/rsettingswidget.h | 38 + src/backends/R/settings.ui | 37 + src/backends/julia/CMakeLists.txt | 41 + src/backends/julia/juliabackend.cpp | 109 + src/backends/julia/juliabackend.h | 91 + src/backends/julia/juliabackend.json | 65 + src/backends/julia/juliabackend.kcfg | 28 + src/backends/julia/juliacompletionobject.cpp | 97 + src/backends/julia/juliacompletionobject.h | 62 + src/backends/julia/juliaexpression.cpp | 106 + src/backends/julia/juliaexpression.h | 69 + src/backends/julia/juliaextensions.cpp | 263 ++ src/backends/julia/juliaextensions.h | 204 + src/backends/julia/juliahighlighter.cpp | 185 + src/backends/julia/juliahighlighter.h | 60 + src/backends/julia/juliakeywords.cpp | 95 + src/backends/julia/juliakeywords.h | 105 + src/backends/julia/juliascriptloading.h | 37 + src/backends/julia/juliaserver/CMakeLists.txt | 15 + .../julia/juliaserver/juliaserver.cpp | 234 ++ src/backends/julia/juliaserver/juliaserver.h | 109 + src/backends/julia/juliaserver/main.cpp | 57 + src/backends/julia/juliasession.cpp | 286 ++ src/backends/julia/juliasession.h | 175 + .../julia/scripts/variables_cleaner.jl | 11 + .../julia/scripts/variables_loader.jl | 8 + src/backends/julia/scripts/variables_saver.jl | 16 + src/backends/julia/settings.kcfgc | 3 + src/backends/julia/settings.ui | 94 + src/backends/julia/testjulia.cpp | 274 ++ src/backends/julia/testjulia.h | 84 + src/backends/kalgebra/CMakeLists.txt | 22 + src/backends/kalgebra/cantor_kalgebra.knsrc | 7 + src/backends/kalgebra/kalgebrabackend.cpp | 76 + src/backends/kalgebra/kalgebrabackend.h | 42 + src/backends/kalgebra/kalgebrabackend.json | 67 + src/backends/kalgebra/kalgebrabackend.kcfg | 12 + .../kalgebra/kalgebracompletionobject.cpp | 48 + .../kalgebra/kalgebracompletionobject.h | 39 + src/backends/kalgebra/kalgebraexpression.cpp | 62 + src/backends/kalgebra/kalgebraexpression.h | 37 + src/backends/kalgebra/kalgebraextensions.cpp | 37 + src/backends/kalgebra/kalgebraextensions.h | 41 + src/backends/kalgebra/kalgebrasession.cpp | 114 + src/backends/kalgebra/kalgebrasession.h | 58 + .../kalgebra/kalgebrasyntaxhelpobject.cpp | 48 + .../kalgebra/kalgebrasyntaxhelpobject.h | 35 + src/backends/kalgebra/settings.kcfgc | 3 + src/backends/kalgebra/settings.ui | 50 + src/backends/lua/CMakeLists.txt | 34 + src/backends/lua/cantor_lua.knsrc | 7 + src/backends/lua/luabackend.cpp | 93 + src/backends/lua/luabackend.h | 48 + src/backends/lua/luabackend.json | 67 + src/backends/lua/luabackend.kcfg | 17 + src/backends/lua/luacompletionobject.cpp | 74 + src/backends/lua/luacompletionobject.h | 47 + src/backends/lua/luaexpression.cpp | 108 + src/backends/lua/luaexpression.h | 43 + src/backends/lua/luaextensions.cpp | 47 + src/backends/lua/luaextensions.h | 39 + src/backends/lua/luahelper.cpp | 132 + src/backends/lua/luahelper.h | 34 + src/backends/lua/luahighlighter.cpp | 36 + src/backends/lua/luahighlighter.h | 33 + src/backends/lua/luakeywords.cpp | 66 + src/backends/lua/luakeywords.h | 42 + src/backends/lua/luasession.cpp | 196 + src/backends/lua/luasession.h | 65 + src/backends/lua/settings.kcfgc | 3 + src/backends/lua/settings.ui | 64 + src/backends/lua/testlua.cpp | 113 + src/backends/lua/testlua.h | 52 + src/backends/maxima/CMakeLists.txt | 33 + src/backends/maxima/DESIGN | 25 + src/backends/maxima/cantor-initmaxima.lisp | 87 + src/backends/maxima/cantor_maxima.knsrc | 7 + src/backends/maxima/maximabackend.cpp | 121 + src/backends/maxima/maximabackend.h | 47 + src/backends/maxima/maximabackend.json | 67 + src/backends/maxima/maximabackend.kcfg | 25 + .../maxima/maximacompletionobject.cpp | 82 + src/backends/maxima/maximacompletionobject.h | 43 + src/backends/maxima/maximaexpression.cpp | 445 +++ src/backends/maxima/maximaexpression.h | 72 + src/backends/maxima/maximaextensions.cpp | 219 ++ src/backends/maxima/maximaextensions.h | 125 + src/backends/maxima/maximahighlighter.cpp | 147 + src/backends/maxima/maximahighlighter.h | 50 + src/backends/maxima/maximakeywords.cpp | 76 + src/backends/maxima/maximakeywords.h | 50 + src/backends/maxima/maximasession.cpp | 350 ++ src/backends/maxima/maximasession.h | 75 + .../maxima/maximasyntaxhelpobject.cpp | 118 + src/backends/maxima/maximasyntaxhelpobject.h | 46 + src/backends/maxima/maximavariablemodel.cpp | 278 ++ src/backends/maxima/maximavariablemodel.h | 71 + src/backends/maxima/settings.kcfgc | 3 + src/backends/maxima/settings.ui | 81 + src/backends/maxima/testmaxima.cpp | 296 ++ src/backends/maxima/testmaxima.h | 68 + src/backends/null/CMakeLists.txt | 8 + src/backends/null/nullbackend.cpp | 61 + src/backends/null/nullbackend.h | 41 + src/backends/null/nullbackend.json | 64 + src/backends/null/nullcompletionobject.cpp | 41 + src/backends/null/nullcompletionobject.h | 39 + src/backends/null/nullexpression.cpp | 62 + src/backends/null/nullexpression.h | 45 + src/backends/null/nullsession.cpp | 88 + src/backends/null/nullsession.h | 51 + src/backends/octave/CMakeLists.txt | 43 + src/backends/octave/cantor_octave.knsrc | 7 + src/backends/octave/cmake.patch | 10 + .../octave/octave-backend-config.h.cmake | 1 + src/backends/octave/octavebackend.cpp | 94 + src/backends/octave/octavebackend.h | 43 + src/backends/octave/octavebackend.json | 67 + src/backends/octave/octavebackend.kcfg | 21 + .../octave/octavecompletionobject.cpp | 164 + src/backends/octave/octavecompletionobject.h | 45 + src/backends/octave/octaveexpression.cpp | 188 + src/backends/octave/octaveexpression.h | 64 + src/backends/octave/octaveextensions.cpp | 214 ++ src/backends/octave/octaveextensions.h | 88 + src/backends/octave/octavehighlighter.cpp | 95 + src/backends/octave/octavehighlighter.h | 48 + src/backends/octave/octavekeywords.cpp | 90 + src/backends/octave/octavekeywords.h | 40 + src/backends/octave/octavesession.cpp | 400 ++ src/backends/octave/octavesession.h | 90 + .../octave/octavesyntaxhelpobject.cpp | 61 + src/backends/octave/octavesyntaxhelpobject.h | 47 + src/backends/octave/scripts/CMakeLists.txt | 11 + .../octave/scripts/cantor_eigenvectors.m | 23 + src/backends/octave/scripts/cantor_plot2d.m | 33 + src/backends/octave/scripts/cantor_plot3d.m | 34 + src/backends/octave/scripts/cantor_print.m.in | 26 + src/backends/octave/settings.kcfgc | 3 + src/backends/octave/settings.ui | 71 + src/backends/octave/testoctave.cpp | 90 + src/backends/octave/testoctave.h | 51 + src/backends/python/CMakeLists.txt | 28 + src/backends/python/import_default_modules.py | 4 + src/backends/python/python.qrc | 8 + src/backends/python/pythonbackend.cpp | 62 + src/backends/python/pythonbackend.h | 41 + .../python/pythoncompletionobject.cpp | 169 + src/backends/python/pythoncompletionobject.h | 49 + src/backends/python/pythonexpression.cpp | 104 + src/backends/python/pythonexpression.h | 45 + src/backends/python/pythonextensions.cpp | 222 ++ src/backends/python/pythonextensions.h | 81 + src/backends/python/pythonhighlighter.cpp | 162 + src/backends/python/pythonhighlighter.h | 49 + src/backends/python/pythonkeywords.cpp | 98 + src/backends/python/pythonkeywords.h | 48 + src/backends/python/pythonserver.cpp | 117 + src/backends/python/pythonserver.h | 47 + src/backends/python/pythonsession.cpp | 430 +++ src/backends/python/pythonsession.h | 106 + src/backends/python/pythonutils.h | 33 + src/backends/python/settings.ui | 57 + src/backends/python/variables_cleaner.py | 6 + src/backends/python/variables_loader.py | 9 + src/backends/python/variables_saver.py | 11 + src/backends/python2/CMakeLists.txt | 32 + src/backends/python2/cantor_python2.knsrc | 7 + src/backends/python2/python2backend.cpp | 74 + src/backends/python2/python2backend.h | 42 + src/backends/python2/python2backend.json | 67 + src/backends/python2/python2backend.kcfg | 16 + .../python2/python2server/CMakeLists.txt | 16 + src/backends/python2/python2server/main.cpp | 54 + src/backends/python2/python2session.cpp | 46 + src/backends/python2/python2session.h | 35 + src/backends/python2/settings.kcfgc | 3 + src/backends/python2/testpython2.cpp | 59 + src/backends/python2/testpython2.h | 38 + src/backends/python3/CMakeLists.txt | 27 + src/backends/python3/cantor_python3.knsrc | 7 + src/backends/python3/python3backend.cpp | 67 + src/backends/python3/python3backend.h | 41 + src/backends/python3/python3backend.json | 67 + src/backends/python3/python3backend.kcfg | 16 + .../python3/python3server/CMakeLists.txt | 16 + src/backends/python3/python3server/main.cpp | 54 + src/backends/python3/python3session.cpp | 37 + src/backends/python3/python3session.h | 35 + src/backends/python3/settings.kcfgc | 3 + src/backends/python3/testpython3.cpp | 118 + src/backends/python3/testpython3.h | 39 + src/backends/qalculate/CMakeLists.txt | 31 + src/backends/qalculate/cantor_qalculate.knsrc | 7 + .../qalculate/plotassistant/CMakeLists.txt | 15 + .../cantor_qalculateplotassistant.rc | 8 + .../plotassistant/qalculateplotassistant.cpp | 305 ++ .../plotassistant/qalculateplotassistant.h | 61 + .../plotassistant/qalculateplotassistant.json | 65 + .../plotassistant/qalculateplotdialog.ui | 779 ++++ src/backends/qalculate/qalculatebackend.cpp | 96 + src/backends/qalculate/qalculatebackend.h | 46 + src/backends/qalculate/qalculatebackend.json | 67 + src/backends/qalculate/qalculatebackend.kcfg | 133 + .../qalculate/qalculatecompletionobject.cpp | 107 + .../qalculate/qalculatecompletionobject.h | 40 + .../qalculate/qalculateexpression.cpp | 884 +++++ src/backends/qalculate/qalculateexpression.h | 64 + .../qalculate/qalculateextensions.cpp | 200 + src/backends/qalculate/qalculateextensions.h | 96 + .../qalculate/qalculatehighlighter.cpp | 131 + src/backends/qalculate/qalculatehighlighter.h | 37 + src/backends/qalculate/qalculatesession.cpp | 430 +++ src/backends/qalculate/qalculatesession.h | 90 + .../qalculate/qalculatesyntaxhelpobject.cpp | 277 ++ .../qalculate/qalculatesyntaxhelpobject.h | 42 + src/backends/qalculate/settings.kcfgc | 3 + src/backends/qalculate/settings.ui | 652 ++++ src/backends/sage/CMakeLists.txt | 37 + src/backends/sage/DESIGN | 22 + src/backends/sage/cantor-execsage | 13 + src/backends/sage/cantor_sage.knsrc | 7 + src/backends/sage/sagebackend.cpp | 110 + src/backends/sage/sagebackend.h | 47 + src/backends/sage/sagebackend.json | 67 + src/backends/sage/sagebackend.kcfg | 17 + src/backends/sage/sagecompletionobject.cpp | 235 ++ src/backends/sage/sagecompletionobject.h | 55 + src/backends/sage/sageexpression.cpp | 265 ++ src/backends/sage/sageexpression.h | 56 + src/backends/sage/sageextensions.cpp | 201 + src/backends/sage/sageextensions.h | 114 + src/backends/sage/sagehighlighter.cpp | 33 + src/backends/sage/sagehighlighter.h | 40 + src/backends/sage/sagekeywords.cpp | 68 + src/backends/sage/sagekeywords.h | 54 + src/backends/sage/sagesession.cpp | 500 +++ src/backends/sage/sagesession.h | 109 + src/backends/sage/settings.kcfgc | 3 + src/backends/sage/settings.ui | 64 + src/backends/sage/testsage.cpp | 124 + src/backends/sage/testsage.h | 63 + src/backends/scilab/CMakeLists.txt | 23 + src/backends/scilab/cantor_scilab.knsrc | 7 + src/backends/scilab/scilabbackend.cpp | 106 + src/backends/scilab/scilabbackend.h | 47 + src/backends/scilab/scilabbackend.json | 66 + src/backends/scilab/scilabbackend.kcfg | 21 + .../scilab/scilabcompletionobject.cpp | 74 + src/backends/scilab/scilabcompletionobject.h | 43 + src/backends/scilab/scilabexpression.cpp | 153 + src/backends/scilab/scilabexpression.h | 51 + src/backends/scilab/scilabextensions.cpp | 81 + src/backends/scilab/scilabextensions.h | 51 + src/backends/scilab/scilabhighlighter.cpp | 84 + src/backends/scilab/scilabhighlighter.h | 45 + src/backends/scilab/scilabkeywords.cpp | 79 + src/backends/scilab/scilabkeywords.h | 42 + src/backends/scilab/scilabsession.cpp | 273 ++ src/backends/scilab/scilabsession.h | 74 + src/backends/scilab/settings.kcfgc | 3 + src/backends/scilab/settings.ui | 71 + src/cantor.cpp | 634 +++ src/cantor.h | 117 + src/cantor.kcfg | 43 + src/cantor.knsrc | 7 + src/cantor_part.cpp | 976 +++++ src/cantor_part.h | 185 + src/cantor_part.json | 37 + src/cantor_part.rc | 91 + src/cantor_scripteditor.rc | 14 + src/cantor_shell.rc | 44 + src/commandentry.cpp | 1136 ++++++ src/commandentry.h | 176 + src/config-cantor.h.cmake | 9 + src/epsrenderer.cpp | 144 + src/epsrenderer.h | 59 + src/extendedsearchbar.ui | 203 + src/imageentry.cpp | 337 ++ src/imageentry.h | 85 + src/imageresultitem.cpp | 98 + src/imageresultitem.h | 54 + src/imagesettings.ui | 163 + src/imagesettingsdialog.cpp | 180 + src/imagesettingsdialog.h | 63 + src/latexentry.cpp | 366 ++ src/latexentry.h | 79 + src/lib/CMakeLists.txt | 89 + src/lib/Mainpage.dox | 28 + src/lib/animationresult.cpp | 105 + src/lib/animationresult.h | 55 + src/lib/assistant.cpp | 75 + src/lib/assistant.h | 115 + src/lib/backend.cpp | 207 + src/lib/backend.h | 218 ++ src/lib/cantor_assistant.desktop | 51 + src/lib/cantor_backend.desktop | 48 + src/lib/cantor_libs.kcfg | 19 + src/lib/cantor_macros.h | 37 + src/lib/cantor_panelplugin.desktop | 50 + src/lib/completionobject.cpp | 292 ++ src/lib/completionobject.h | 225 ++ src/lib/config-cantorlib.h.cmake | 1 + src/lib/defaulthighlighter.cpp | 460 +++ src/lib/defaulthighlighter.h | 184 + src/lib/defaultvariablemodel.cpp | 193 + src/lib/defaultvariablemodel.h | 143 + src/lib/directives/axisrange.ui | 76 + src/lib/directives/plotdirectives.cpp | 110 + src/lib/directives/plotdirectives.h | 75 + src/lib/directives/plottitle.ui | 45 + src/lib/epsresult.cpp | 99 + src/lib/epsresult.h | 58 + src/lib/expression.cpp | 294 ++ src/lib/expression.h | 278 ++ src/lib/extension.cpp | 149 + src/lib/extension.h | 493 +++ src/lib/helpresult.cpp | 80 + src/lib/helpresult.h | 56 + src/lib/imageresult.cpp | 115 + src/lib/imageresult.h | 57 + src/lib/latexrenderer.cpp | 266 ++ src/lib/latexrenderer.h | 78 + src/lib/latexresult.cpp | 149 + src/lib/latexresult.h | 66 + src/lib/panelplugin.cpp | 92 + src/lib/panelplugin.h | 116 + src/lib/panelpluginhandler.cpp | 135 + src/lib/panelpluginhandler.h | 65 + src/lib/result.cpp | 65 + src/lib/result.h | 113 + src/lib/session.cpp | 147 + src/lib/session.h | 221 ++ src/lib/settings.kcfgc | 3 + src/lib/syntaxhelpobject.cpp | 72 + src/lib/syntaxhelpobject.h | 101 + src/lib/test/CMakeLists.txt | 11 + src/lib/test/backendtest.cpp | 112 + src/lib/test/backendtest.h | 63 + src/lib/textresult.cpp | 124 + src/lib/textresult.h | 61 + src/lib/worksheetaccess.cpp | 34 + src/lib/worksheetaccess.h | 59 + src/loadedexpression.cpp | 85 + src/loadedexpression.h | 49 + src/main.cpp | 158 + src/markdownentry.cpp | 245 ++ src/markdownentry.h | 75 + src/org.kde.cantor.desktop | 115 + src/pagebreakentry.cpp | 152 + src/pagebreakentry.h | 67 + src/panelplugins/CMakeLists.txt | 14 + src/panelplugins/helppanel/CMakeLists.txt | 8 + .../helppanel/helppanelplugin.cpp | 74 + src/panelplugins/helppanel/helppanelplugin.h | 47 + .../helppanel/helppanelplugin.json | 67 + src/panelplugins/variablemgr/CMakeLists.txt | 10 + src/panelplugins/variablemgr/newvardlg.ui | 52 + .../variablemgr/variablemanagerplugin.cpp | 59 + .../variablemgr/variablemanagerplugin.h | 48 + .../variablemgr/variablemanagerplugin.json | 66 + .../variablemgr/variablemanagerwidget.cpp | 186 + .../variablemgr/variablemanagerwidget.h | 58 + src/placeholderentry.cpp | 113 + src/placeholderentry.h | 55 + src/resultitem.cpp | 94 + src/resultitem.h | 75 + src/scripteditor/CMakeLists.txt | 10 + src/scripteditor/main.cpp | 44 + src/scripteditor/scripteditorwidget.cpp | 153 + src/scripteditor/scripteditorwidget.h | 62 + src/searchbar.cpp | 502 +++ src/searchbar.h | 113 + src/settings.kcfgc | 5 + src/settings.ui | 121 + src/standardsearchbar.ui | 119 + src/textentry.cpp | 357 ++ src/textentry.h | 90 + src/textresultitem.cpp | 163 + src/textresultitem.h | 57 + src/worksheet.cpp | 1942 ++++++++++ src/worksheet.h | 302 ++ src/worksheetcursor.cpp | 57 + src/worksheetcursor.h | 48 + src/worksheetentry.cpp | 803 ++++ src/worksheetentry.h | 190 + src/worksheetimageitem.cpp | 160 + src/worksheetimageitem.h | 78 + src/worksheettextitem.cpp | 920 +++++ src/worksheettextitem.h | 178 + src/worksheettoolbutton.cpp | 84 + src/worksheettoolbutton.h | 60 + src/worksheetview.cpp | 285 ++ src/worksheetview.h | 70 + src/xslt/CMakeLists.txt | 1 + src/xslt/latex.xsl | 79 + 641 files changed, 208269 insertions(+) create mode 100644 .arcconfig create mode 100644 .gitignore create mode 100644 .kateconfig create mode 100644 CMakeLists.txt create mode 100644 COPYING create mode 100644 COPYING.DOC create mode 100644 ChangeLog create mode 100644 DESIGN create mode 100644 FindCantor.cmake create mode 100644 README.md create mode 100644 cmake/COPYING-CMAKE-SCRIPTS create mode 100644 cmake/FindDiscount.cmake create mode 100644 cmake/FindJulia.cmake create mode 100644 cmake/FindLibSpectre.cmake create mode 100644 cmake/FindLuaJIT.cmake create mode 100644 cmake/FindPythonLibs3.cmake create mode 100644 cmake/FindQalculate.cmake create mode 100644 cmake/FindR.cmake create mode 100644 doc/CMakeLists.txt create mode 100644 doc/create-dlg.png create mode 100644 doc/differentiate-dlg.png create mode 100644 doc/import-dlg.png create mode 100644 doc/index.docbook create mode 100644 doc/integrate-dlg.png create mode 100644 doc/latex_formula.png create mode 100644 doc/matrix-dlg.png create mode 100644 doc/plot-dlg1.png create mode 100644 doc/plot-dlg2.png create mode 100644 doc/plot2d-dlg.png create mode 100644 doc/plot3d-dlg.png create mode 100644 doc/screenshot.png create mode 100644 doc/solve-equations-dlg.png create mode 100644 examples/maxima/maxima_examples_plots.cws create mode 100644 examples/maxima/tutorial_for_beginners.cws create mode 100644 examples/octave/lorenzSystem.cws create mode 100644 examples/octave/octave_examples_2d_plots.cws create mode 100644 examples/octave/octave_examples_3d_plots.cws create mode 100644 icons/128-apps-cantor.png create mode 100644 icons/16-apps-cantor.png create mode 100644 icons/22-apps-cantor.png create mode 100644 icons/32-apps-cantor.png create mode 100644 icons/48-apps-cantor.png create mode 100644 icons/48-apps-juliabackend.png create mode 100644 icons/48-apps-kalgebrabackend.png create mode 100644 icons/48-apps-luabackend.png create mode 100644 icons/48-apps-maximabackend.png create mode 100644 icons/48-apps-octavebackend.png create mode 100644 icons/48-apps-pythonbackend.png create mode 100644 icons/48-apps-qalculatebackend.png create mode 100644 icons/48-apps-rbackend.png create mode 100644 icons/48-apps-sagebackend.png create mode 100644 icons/48-apps-scilabbackend.png create mode 100644 icons/64-apps-cantor.png create mode 100644 icons/CMakeLists.txt create mode 100644 icons/hisc-apps-cantor.svgz create mode 100644 org.kde.cantor.appdata.xml create mode 100644 po/bs/cantor.po create mode 100644 po/ca/cantor.po create mode 100644 po/ca/docs/cantor/index.docbook create mode 100644 po/ca@valencia/cantor.po create mode 100644 po/cs/cantor.po create mode 100644 po/da/cantor.po create mode 100644 po/de/cantor.po create mode 100644 po/de/docs/cantor/index.docbook create mode 100644 po/el/cantor.po create mode 100644 po/en_GB/cantor.po create mode 100644 po/eo/cantor.po create mode 100644 po/es/cantor.po create mode 100644 po/es/docs/cantor/index.docbook create mode 100644 po/es/docs/cantor/screenshot.png create mode 100644 po/et/cantor.po create mode 100644 po/et/docs/cantor/index.docbook create mode 100644 po/eu/cantor.po create mode 100644 po/fi/cantor.po create mode 100644 po/fr/cantor.po create mode 100644 po/fr/docs/cantor/index.docbook create mode 100644 po/fr/docs/cantor/screenshot.png create mode 100644 po/ga/cantor.po create mode 100644 po/gl/cantor.po create mode 100644 po/gl/docs/cantor/index.docbook create mode 100644 po/hr/cantor.po create mode 100644 po/hu/cantor.po create mode 100644 po/it/cantor.po create mode 100644 po/it/docs/cantor/index.docbook create mode 100644 po/ja/cantor.po create mode 100644 po/kk/cantor.po create mode 100644 po/ko/cantor.po create mode 100644 po/lt/cantor.po create mode 100644 po/lv/cantor.po create mode 100644 po/mr/cantor.po create mode 100644 po/nb/cantor.po create mode 100644 po/nds/cantor.po create mode 100644 po/nl/cantor.po create mode 100644 po/nl/docs/cantor/index.docbook create mode 100644 po/nn/cantor.po create mode 100644 po/pa/cantor.po create mode 100644 po/pl/cantor.po create mode 100644 po/pt/cantor.po create mode 100644 po/pt/docs/cantor/index.docbook create mode 100644 po/pt_BR/cantor.po create mode 100644 po/pt_BR/docs/cantor/index.docbook create mode 100644 po/pt_BR/docs/cantor/screenshot.png create mode 100644 po/ro/cantor.po create mode 100644 po/ru/cantor.po create mode 100644 po/ru/docs/cantor/index.docbook create mode 100644 po/sk/cantor.po create mode 100644 po/sl/cantor.po create mode 100644 po/sv/cantor.po create mode 100644 po/sv/docs/cantor/index.docbook create mode 100644 po/tr/cantor.po create mode 100644 po/ug/cantor.po create mode 100644 po/uk/cantor.po create mode 100644 po/uk/docs/cantor/create-dlg.png create mode 100644 po/uk/docs/cantor/differentiate-dlg.png create mode 100644 po/uk/docs/cantor/import-dlg.png create mode 100644 po/uk/docs/cantor/index.docbook create mode 100644 po/uk/docs/cantor/integrate-dlg.png create mode 100644 po/uk/docs/cantor/matrix-dlg.png create mode 100644 po/uk/docs/cantor/plot-dlg1.png create mode 100644 po/uk/docs/cantor/plot-dlg2.png create mode 100644 po/uk/docs/cantor/plot2d-dlg.png create mode 100644 po/uk/docs/cantor/plot3d-dlg.png create mode 100644 po/uk/docs/cantor/screenshot.png create mode 100644 po/uk/docs/cantor/solve-equations-dlg.png create mode 100644 po/zh_CN/cantor.po create mode 100644 po/zh_TW/cantor.po create mode 100644 src/.emacs-dirvars create mode 100644 src/CMakeLists.txt create mode 100644 src/Messages.sh create mode 100644 src/actionbar.cpp create mode 100644 src/actionbar.h create mode 100644 src/animation.cpp create mode 100644 src/animation.h create mode 100644 src/animationresultitem.cpp create mode 100644 src/animationresultitem.h create mode 100644 src/assistants/CMakeLists.txt create mode 100644 src/assistants/advancedplot/CMakeLists.txt create mode 100644 src/assistants/advancedplot/advancedplotassistant.cpp create mode 100644 src/assistants/advancedplot/advancedplotassistant.h create mode 100644 src/assistants/advancedplot/advancedplotassistant.json create mode 100644 src/assistants/advancedplot/advancedplotdialog.ui create mode 100644 src/assistants/advancedplot/cantor_advancedplot_assistant.rc create mode 100644 src/assistants/advancedplot/directivecontainer.ui create mode 100644 src/assistants/differentiate/CMakeLists.txt create mode 100644 src/assistants/differentiate/cantor_differentiate_assistant.rc create mode 100644 src/assistants/differentiate/differentiateassistant.cpp create mode 100644 src/assistants/differentiate/differentiateassistant.h create mode 100644 src/assistants/differentiate/differentiateassistant.json create mode 100644 src/assistants/differentiate/differentiatedlg.ui create mode 100644 src/assistants/importpackage/CMakeLists.txt create mode 100644 src/assistants/importpackage/cantor_import_package_assistant.rc create mode 100644 src/assistants/importpackage/importpackageassistant.cpp create mode 100644 src/assistants/importpackage/importpackageassistant.h create mode 100644 src/assistants/importpackage/importpackageassistant.json create mode 100644 src/assistants/importpackage/importpackagedlg.ui create mode 100644 src/assistants/integrate/CMakeLists.txt create mode 100644 src/assistants/integrate/cantor_integrate_assistant.rc create mode 100644 src/assistants/integrate/integrateassistant.cpp create mode 100644 src/assistants/integrate/integrateassistant.h create mode 100644 src/assistants/integrate/integrateassistant.json create mode 100644 src/assistants/integrate/integratedlg.ui create mode 100644 src/assistants/linearalgebra/CMakeLists.txt create mode 100644 src/assistants/linearalgebra/creatematrix/CMakeLists.txt create mode 100644 src/assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc create mode 100644 src/assistants/linearalgebra/creatematrix/creatematrixassistant.cpp create mode 100644 src/assistants/linearalgebra/creatematrix/creatematrixassistant.h create mode 100644 src/assistants/linearalgebra/creatematrix/creatematrixassistant.json create mode 100644 src/assistants/linearalgebra/creatematrix/creatematrixdlg.cpp create mode 100644 src/assistants/linearalgebra/creatematrix/creatematrixdlg.h create mode 100644 src/assistants/linearalgebra/creatematrix/creatematrixdlg.ui create mode 100644 src/assistants/linearalgebra/eigenvalues/CMakeLists.txt create mode 100644 src/assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc create mode 100644 src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp create mode 100644 src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.h create mode 100644 src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.json create mode 100644 src/assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui create mode 100644 src/assistants/linearalgebra/eigenvectors/CMakeLists.txt create mode 100644 src/assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc create mode 100644 src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp create mode 100644 src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.h create mode 100644 src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.json create mode 100644 src/assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui create mode 100644 src/assistants/linearalgebra/invertmatrix/CMakeLists.txt create mode 100644 src/assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc create mode 100644 src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp create mode 100644 src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.h create mode 100644 src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.json create mode 100644 src/assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui create mode 100644 src/assistants/plot2d/CMakeLists.txt create mode 100644 src/assistants/plot2d/cantor_plot2d_assistant.rc create mode 100644 src/assistants/plot2d/plot2dassistant.cpp create mode 100644 src/assistants/plot2d/plot2dassistant.h create mode 100644 src/assistants/plot2d/plot2dassistant.json create mode 100644 src/assistants/plot2d/plot2ddlg.ui create mode 100644 src/assistants/plot3d/CMakeLists.txt create mode 100644 src/assistants/plot3d/cantor_plot3d_assistant.rc create mode 100644 src/assistants/plot3d/plot3dassistant.cpp create mode 100644 src/assistants/plot3d/plot3dassistant.h create mode 100644 src/assistants/plot3d/plot3dassistant.json create mode 100644 src/assistants/plot3d/plot3ddlg.ui create mode 100644 src/assistants/runscript/CMakeLists.txt create mode 100644 src/assistants/runscript/cantor_runscript_assistant.rc create mode 100644 src/assistants/runscript/runscriptassistant.cpp create mode 100644 src/assistants/runscript/runscriptassistant.h create mode 100644 src/assistants/runscript/runscriptassistant.json create mode 100644 src/assistants/solve/CMakeLists.txt create mode 100644 src/assistants/solve/cantor_solve_assistant.rc create mode 100644 src/assistants/solve/solveassistant.cpp create mode 100644 src/assistants/solve/solveassistant.h create mode 100644 src/assistants/solve/solveassistant.json create mode 100644 src/assistants/solve/solvedlg.ui create mode 100644 src/backendchoosedialog.cpp create mode 100644 src/backendchoosedialog.h create mode 100644 src/backendchooser.ui create mode 100644 src/backends/CMakeLists.txt create mode 100644 src/backends/R/CMakeLists.txt create mode 100644 src/backends/R/DESIGN create mode 100644 src/backends/R/cantor_r.knsrc create mode 100644 src/backends/R/rbackend.cpp create mode 100644 src/backends/R/rbackend.h create mode 100644 src/backends/R/rbackend.json create mode 100644 src/backends/R/rcompletionobject.cpp create mode 100644 src/backends/R/rcompletionobject.h create mode 100644 src/backends/R/rexpression.cpp create mode 100644 src/backends/R/rexpression.h create mode 100644 src/backends/R/rextensions.cpp create mode 100644 src/backends/R/rextensions.h create mode 100644 src/backends/R/rhighlighter.cpp create mode 100644 src/backends/R/rhighlighter.h create mode 100644 src/backends/R/rkeywords.cpp create mode 100644 src/backends/R/rkeywords.h create mode 100644 src/backends/R/rserver/CMakeLists.txt create mode 100644 src/backends/R/rserver/main.cpp create mode 100644 src/backends/R/rserver/org.kde.Cantor.R.xml create mode 100644 src/backends/R/rserver/rcallbacks.cpp create mode 100644 src/backends/R/rserver/rcallbacks.h create mode 100644 src/backends/R/rserver/rserver.cpp create mode 100644 src/backends/R/rserver/rserver.h create mode 100644 src/backends/R/rserver/rserver.kcfg create mode 100644 src/backends/R/rserver/settings.kcfgc create mode 100644 src/backends/R/rserver/tools/autoloads.r create mode 100644 src/backends/R/rserver/tools/envvars.r create mode 100644 src/backends/R/rsession.cpp create mode 100644 src/backends/R/rsession.h create mode 100644 src/backends/R/rsettingswidget.cpp create mode 100644 src/backends/R/rsettingswidget.h create mode 100644 src/backends/R/settings.ui create mode 100644 src/backends/julia/CMakeLists.txt create mode 100644 src/backends/julia/juliabackend.cpp create mode 100644 src/backends/julia/juliabackend.h create mode 100644 src/backends/julia/juliabackend.json create mode 100644 src/backends/julia/juliabackend.kcfg create mode 100644 src/backends/julia/juliacompletionobject.cpp create mode 100644 src/backends/julia/juliacompletionobject.h create mode 100644 src/backends/julia/juliaexpression.cpp create mode 100644 src/backends/julia/juliaexpression.h create mode 100644 src/backends/julia/juliaextensions.cpp create mode 100644 src/backends/julia/juliaextensions.h create mode 100644 src/backends/julia/juliahighlighter.cpp create mode 100644 src/backends/julia/juliahighlighter.h create mode 100644 src/backends/julia/juliakeywords.cpp create mode 100644 src/backends/julia/juliakeywords.h create mode 100644 src/backends/julia/juliascriptloading.h create mode 100644 src/backends/julia/juliaserver/CMakeLists.txt create mode 100644 src/backends/julia/juliaserver/juliaserver.cpp create mode 100644 src/backends/julia/juliaserver/juliaserver.h create mode 100644 src/backends/julia/juliaserver/main.cpp create mode 100644 src/backends/julia/juliasession.cpp create mode 100644 src/backends/julia/juliasession.h create mode 100644 src/backends/julia/scripts/variables_cleaner.jl create mode 100644 src/backends/julia/scripts/variables_loader.jl create mode 100644 src/backends/julia/scripts/variables_saver.jl create mode 100644 src/backends/julia/settings.kcfgc create mode 100644 src/backends/julia/settings.ui create mode 100644 src/backends/julia/testjulia.cpp create mode 100644 src/backends/julia/testjulia.h create mode 100644 src/backends/kalgebra/CMakeLists.txt create mode 100644 src/backends/kalgebra/cantor_kalgebra.knsrc create mode 100644 src/backends/kalgebra/kalgebrabackend.cpp create mode 100644 src/backends/kalgebra/kalgebrabackend.h create mode 100644 src/backends/kalgebra/kalgebrabackend.json create mode 100644 src/backends/kalgebra/kalgebrabackend.kcfg create mode 100644 src/backends/kalgebra/kalgebracompletionobject.cpp create mode 100644 src/backends/kalgebra/kalgebracompletionobject.h create mode 100644 src/backends/kalgebra/kalgebraexpression.cpp create mode 100644 src/backends/kalgebra/kalgebraexpression.h create mode 100644 src/backends/kalgebra/kalgebraextensions.cpp create mode 100644 src/backends/kalgebra/kalgebraextensions.h create mode 100644 src/backends/kalgebra/kalgebrasession.cpp create mode 100644 src/backends/kalgebra/kalgebrasession.h create mode 100644 src/backends/kalgebra/kalgebrasyntaxhelpobject.cpp create mode 100644 src/backends/kalgebra/kalgebrasyntaxhelpobject.h create mode 100644 src/backends/kalgebra/settings.kcfgc create mode 100644 src/backends/kalgebra/settings.ui create mode 100644 src/backends/lua/CMakeLists.txt create mode 100644 src/backends/lua/cantor_lua.knsrc create mode 100644 src/backends/lua/luabackend.cpp create mode 100644 src/backends/lua/luabackend.h create mode 100644 src/backends/lua/luabackend.json create mode 100644 src/backends/lua/luabackend.kcfg create mode 100644 src/backends/lua/luacompletionobject.cpp create mode 100644 src/backends/lua/luacompletionobject.h create mode 100644 src/backends/lua/luaexpression.cpp create mode 100644 src/backends/lua/luaexpression.h create mode 100644 src/backends/lua/luaextensions.cpp create mode 100644 src/backends/lua/luaextensions.h create mode 100644 src/backends/lua/luahelper.cpp create mode 100644 src/backends/lua/luahelper.h create mode 100644 src/backends/lua/luahighlighter.cpp create mode 100644 src/backends/lua/luahighlighter.h create mode 100644 src/backends/lua/luakeywords.cpp create mode 100644 src/backends/lua/luakeywords.h create mode 100644 src/backends/lua/luasession.cpp create mode 100644 src/backends/lua/luasession.h create mode 100644 src/backends/lua/settings.kcfgc create mode 100644 src/backends/lua/settings.ui create mode 100644 src/backends/lua/testlua.cpp create mode 100644 src/backends/lua/testlua.h create mode 100644 src/backends/maxima/CMakeLists.txt create mode 100644 src/backends/maxima/DESIGN create mode 100644 src/backends/maxima/cantor-initmaxima.lisp create mode 100644 src/backends/maxima/cantor_maxima.knsrc create mode 100644 src/backends/maxima/maximabackend.cpp create mode 100644 src/backends/maxima/maximabackend.h create mode 100644 src/backends/maxima/maximabackend.json create mode 100644 src/backends/maxima/maximabackend.kcfg create mode 100644 src/backends/maxima/maximacompletionobject.cpp create mode 100644 src/backends/maxima/maximacompletionobject.h create mode 100644 src/backends/maxima/maximaexpression.cpp create mode 100644 src/backends/maxima/maximaexpression.h create mode 100644 src/backends/maxima/maximaextensions.cpp create mode 100644 src/backends/maxima/maximaextensions.h create mode 100644 src/backends/maxima/maximahighlighter.cpp create mode 100644 src/backends/maxima/maximahighlighter.h create mode 100644 src/backends/maxima/maximakeywords.cpp create mode 100644 src/backends/maxima/maximakeywords.h create mode 100644 src/backends/maxima/maximasession.cpp create mode 100644 src/backends/maxima/maximasession.h create mode 100644 src/backends/maxima/maximasyntaxhelpobject.cpp create mode 100644 src/backends/maxima/maximasyntaxhelpobject.h create mode 100644 src/backends/maxima/maximavariablemodel.cpp create mode 100644 src/backends/maxima/maximavariablemodel.h create mode 100644 src/backends/maxima/settings.kcfgc create mode 100644 src/backends/maxima/settings.ui create mode 100644 src/backends/maxima/testmaxima.cpp create mode 100644 src/backends/maxima/testmaxima.h create mode 100644 src/backends/null/CMakeLists.txt create mode 100644 src/backends/null/nullbackend.cpp create mode 100644 src/backends/null/nullbackend.h create mode 100644 src/backends/null/nullbackend.json create mode 100644 src/backends/null/nullcompletionobject.cpp create mode 100644 src/backends/null/nullcompletionobject.h create mode 100644 src/backends/null/nullexpression.cpp create mode 100644 src/backends/null/nullexpression.h create mode 100644 src/backends/null/nullsession.cpp create mode 100644 src/backends/null/nullsession.h create mode 100644 src/backends/octave/CMakeLists.txt create mode 100644 src/backends/octave/cantor_octave.knsrc create mode 100644 src/backends/octave/cmake.patch create mode 100644 src/backends/octave/octave-backend-config.h.cmake create mode 100644 src/backends/octave/octavebackend.cpp create mode 100644 src/backends/octave/octavebackend.h create mode 100644 src/backends/octave/octavebackend.json create mode 100644 src/backends/octave/octavebackend.kcfg create mode 100644 src/backends/octave/octavecompletionobject.cpp create mode 100644 src/backends/octave/octavecompletionobject.h create mode 100644 src/backends/octave/octaveexpression.cpp create mode 100644 src/backends/octave/octaveexpression.h create mode 100644 src/backends/octave/octaveextensions.cpp create mode 100644 src/backends/octave/octaveextensions.h create mode 100644 src/backends/octave/octavehighlighter.cpp create mode 100644 src/backends/octave/octavehighlighter.h create mode 100644 src/backends/octave/octavekeywords.cpp create mode 100644 src/backends/octave/octavekeywords.h create mode 100644 src/backends/octave/octavesession.cpp create mode 100644 src/backends/octave/octavesession.h create mode 100644 src/backends/octave/octavesyntaxhelpobject.cpp create mode 100644 src/backends/octave/octavesyntaxhelpobject.h create mode 100644 src/backends/octave/scripts/CMakeLists.txt create mode 100644 src/backends/octave/scripts/cantor_eigenvectors.m create mode 100644 src/backends/octave/scripts/cantor_plot2d.m create mode 100644 src/backends/octave/scripts/cantor_plot3d.m create mode 100644 src/backends/octave/scripts/cantor_print.m.in create mode 100644 src/backends/octave/settings.kcfgc create mode 100644 src/backends/octave/settings.ui create mode 100644 src/backends/octave/testoctave.cpp create mode 100644 src/backends/octave/testoctave.h create mode 100644 src/backends/python/CMakeLists.txt create mode 100644 src/backends/python/import_default_modules.py create mode 100644 src/backends/python/python.qrc create mode 100644 src/backends/python/pythonbackend.cpp create mode 100644 src/backends/python/pythonbackend.h create mode 100644 src/backends/python/pythoncompletionobject.cpp create mode 100644 src/backends/python/pythoncompletionobject.h create mode 100644 src/backends/python/pythonexpression.cpp create mode 100644 src/backends/python/pythonexpression.h create mode 100644 src/backends/python/pythonextensions.cpp create mode 100644 src/backends/python/pythonextensions.h create mode 100644 src/backends/python/pythonhighlighter.cpp create mode 100644 src/backends/python/pythonhighlighter.h create mode 100644 src/backends/python/pythonkeywords.cpp create mode 100644 src/backends/python/pythonkeywords.h create mode 100644 src/backends/python/pythonserver.cpp create mode 100644 src/backends/python/pythonserver.h create mode 100644 src/backends/python/pythonsession.cpp create mode 100644 src/backends/python/pythonsession.h create mode 100644 src/backends/python/pythonutils.h create mode 100644 src/backends/python/settings.ui create mode 100644 src/backends/python/variables_cleaner.py create mode 100644 src/backends/python/variables_loader.py create mode 100644 src/backends/python/variables_saver.py create mode 100644 src/backends/python2/CMakeLists.txt create mode 100644 src/backends/python2/cantor_python2.knsrc create mode 100644 src/backends/python2/python2backend.cpp create mode 100644 src/backends/python2/python2backend.h create mode 100644 src/backends/python2/python2backend.json create mode 100644 src/backends/python2/python2backend.kcfg create mode 100644 src/backends/python2/python2server/CMakeLists.txt create mode 100644 src/backends/python2/python2server/main.cpp create mode 100644 src/backends/python2/python2session.cpp create mode 100644 src/backends/python2/python2session.h create mode 100644 src/backends/python2/settings.kcfgc create mode 100644 src/backends/python2/testpython2.cpp create mode 100644 src/backends/python2/testpython2.h create mode 100644 src/backends/python3/CMakeLists.txt create mode 100644 src/backends/python3/cantor_python3.knsrc create mode 100644 src/backends/python3/python3backend.cpp create mode 100644 src/backends/python3/python3backend.h create mode 100644 src/backends/python3/python3backend.json create mode 100644 src/backends/python3/python3backend.kcfg create mode 100644 src/backends/python3/python3server/CMakeLists.txt create mode 100644 src/backends/python3/python3server/main.cpp create mode 100644 src/backends/python3/python3session.cpp create mode 100644 src/backends/python3/python3session.h create mode 100644 src/backends/python3/settings.kcfgc create mode 100644 src/backends/python3/testpython3.cpp create mode 100644 src/backends/python3/testpython3.h create mode 100644 src/backends/qalculate/CMakeLists.txt create mode 100644 src/backends/qalculate/cantor_qalculate.knsrc create mode 100644 src/backends/qalculate/plotassistant/CMakeLists.txt create mode 100644 src/backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc create mode 100644 src/backends/qalculate/plotassistant/qalculateplotassistant.cpp create mode 100644 src/backends/qalculate/plotassistant/qalculateplotassistant.h create mode 100644 src/backends/qalculate/plotassistant/qalculateplotassistant.json create mode 100644 src/backends/qalculate/plotassistant/qalculateplotdialog.ui create mode 100644 src/backends/qalculate/qalculatebackend.cpp create mode 100644 src/backends/qalculate/qalculatebackend.h create mode 100644 src/backends/qalculate/qalculatebackend.json create mode 100644 src/backends/qalculate/qalculatebackend.kcfg create mode 100644 src/backends/qalculate/qalculatecompletionobject.cpp create mode 100644 src/backends/qalculate/qalculatecompletionobject.h create mode 100644 src/backends/qalculate/qalculateexpression.cpp create mode 100644 src/backends/qalculate/qalculateexpression.h create mode 100644 src/backends/qalculate/qalculateextensions.cpp create mode 100644 src/backends/qalculate/qalculateextensions.h create mode 100644 src/backends/qalculate/qalculatehighlighter.cpp create mode 100644 src/backends/qalculate/qalculatehighlighter.h create mode 100644 src/backends/qalculate/qalculatesession.cpp create mode 100644 src/backends/qalculate/qalculatesession.h create mode 100644 src/backends/qalculate/qalculatesyntaxhelpobject.cpp create mode 100644 src/backends/qalculate/qalculatesyntaxhelpobject.h create mode 100644 src/backends/qalculate/settings.kcfgc create mode 100644 src/backends/qalculate/settings.ui create mode 100644 src/backends/sage/CMakeLists.txt create mode 100644 src/backends/sage/DESIGN create mode 100644 src/backends/sage/cantor-execsage create mode 100644 src/backends/sage/cantor_sage.knsrc create mode 100644 src/backends/sage/sagebackend.cpp create mode 100644 src/backends/sage/sagebackend.h create mode 100644 src/backends/sage/sagebackend.json create mode 100644 src/backends/sage/sagebackend.kcfg create mode 100644 src/backends/sage/sagecompletionobject.cpp create mode 100644 src/backends/sage/sagecompletionobject.h create mode 100644 src/backends/sage/sageexpression.cpp create mode 100644 src/backends/sage/sageexpression.h create mode 100644 src/backends/sage/sageextensions.cpp create mode 100644 src/backends/sage/sageextensions.h create mode 100644 src/backends/sage/sagehighlighter.cpp create mode 100644 src/backends/sage/sagehighlighter.h create mode 100644 src/backends/sage/sagekeywords.cpp create mode 100644 src/backends/sage/sagekeywords.h create mode 100644 src/backends/sage/sagesession.cpp create mode 100644 src/backends/sage/sagesession.h create mode 100644 src/backends/sage/settings.kcfgc create mode 100644 src/backends/sage/settings.ui create mode 100644 src/backends/sage/testsage.cpp create mode 100644 src/backends/sage/testsage.h create mode 100644 src/backends/scilab/CMakeLists.txt create mode 100644 src/backends/scilab/cantor_scilab.knsrc create mode 100644 src/backends/scilab/scilabbackend.cpp create mode 100644 src/backends/scilab/scilabbackend.h create mode 100644 src/backends/scilab/scilabbackend.json create mode 100644 src/backends/scilab/scilabbackend.kcfg create mode 100644 src/backends/scilab/scilabcompletionobject.cpp create mode 100644 src/backends/scilab/scilabcompletionobject.h create mode 100644 src/backends/scilab/scilabexpression.cpp create mode 100644 src/backends/scilab/scilabexpression.h create mode 100644 src/backends/scilab/scilabextensions.cpp create mode 100644 src/backends/scilab/scilabextensions.h create mode 100644 src/backends/scilab/scilabhighlighter.cpp create mode 100644 src/backends/scilab/scilabhighlighter.h create mode 100644 src/backends/scilab/scilabkeywords.cpp create mode 100644 src/backends/scilab/scilabkeywords.h create mode 100644 src/backends/scilab/scilabsession.cpp create mode 100644 src/backends/scilab/scilabsession.h create mode 100644 src/backends/scilab/settings.kcfgc create mode 100644 src/backends/scilab/settings.ui create mode 100644 src/cantor.cpp create mode 100644 src/cantor.h create mode 100644 src/cantor.kcfg create mode 100644 src/cantor.knsrc create mode 100644 src/cantor_part.cpp create mode 100644 src/cantor_part.h create mode 100644 src/cantor_part.json create mode 100644 src/cantor_part.rc create mode 100644 src/cantor_scripteditor.rc create mode 100644 src/cantor_shell.rc create mode 100644 src/commandentry.cpp create mode 100644 src/commandentry.h create mode 100644 src/config-cantor.h.cmake create mode 100644 src/epsrenderer.cpp create mode 100644 src/epsrenderer.h create mode 100644 src/extendedsearchbar.ui create mode 100644 src/imageentry.cpp create mode 100644 src/imageentry.h create mode 100644 src/imageresultitem.cpp create mode 100644 src/imageresultitem.h create mode 100644 src/imagesettings.ui create mode 100644 src/imagesettingsdialog.cpp create mode 100644 src/imagesettingsdialog.h create mode 100644 src/latexentry.cpp create mode 100644 src/latexentry.h create mode 100644 src/lib/CMakeLists.txt create mode 100644 src/lib/Mainpage.dox create mode 100644 src/lib/animationresult.cpp create mode 100644 src/lib/animationresult.h create mode 100644 src/lib/assistant.cpp create mode 100644 src/lib/assistant.h create mode 100644 src/lib/backend.cpp create mode 100644 src/lib/backend.h create mode 100644 src/lib/cantor_assistant.desktop create mode 100644 src/lib/cantor_backend.desktop create mode 100644 src/lib/cantor_libs.kcfg create mode 100644 src/lib/cantor_macros.h create mode 100644 src/lib/cantor_panelplugin.desktop create mode 100644 src/lib/completionobject.cpp create mode 100644 src/lib/completionobject.h create mode 100644 src/lib/config-cantorlib.h.cmake create mode 100644 src/lib/defaulthighlighter.cpp create mode 100644 src/lib/defaulthighlighter.h create mode 100644 src/lib/defaultvariablemodel.cpp create mode 100644 src/lib/defaultvariablemodel.h create mode 100644 src/lib/directives/axisrange.ui create mode 100644 src/lib/directives/plotdirectives.cpp create mode 100644 src/lib/directives/plotdirectives.h create mode 100644 src/lib/directives/plottitle.ui create mode 100644 src/lib/epsresult.cpp create mode 100644 src/lib/epsresult.h create mode 100644 src/lib/expression.cpp create mode 100644 src/lib/expression.h create mode 100644 src/lib/extension.cpp create mode 100644 src/lib/extension.h create mode 100644 src/lib/helpresult.cpp create mode 100644 src/lib/helpresult.h create mode 100644 src/lib/imageresult.cpp create mode 100644 src/lib/imageresult.h create mode 100644 src/lib/latexrenderer.cpp create mode 100644 src/lib/latexrenderer.h create mode 100644 src/lib/latexresult.cpp create mode 100644 src/lib/latexresult.h create mode 100644 src/lib/panelplugin.cpp create mode 100644 src/lib/panelplugin.h create mode 100644 src/lib/panelpluginhandler.cpp create mode 100644 src/lib/panelpluginhandler.h create mode 100644 src/lib/result.cpp create mode 100644 src/lib/result.h create mode 100644 src/lib/session.cpp create mode 100644 src/lib/session.h create mode 100644 src/lib/settings.kcfgc create mode 100644 src/lib/syntaxhelpobject.cpp create mode 100644 src/lib/syntaxhelpobject.h create mode 100644 src/lib/test/CMakeLists.txt create mode 100644 src/lib/test/backendtest.cpp create mode 100644 src/lib/test/backendtest.h create mode 100644 src/lib/textresult.cpp create mode 100644 src/lib/textresult.h create mode 100644 src/lib/worksheetaccess.cpp create mode 100644 src/lib/worksheetaccess.h create mode 100644 src/loadedexpression.cpp create mode 100644 src/loadedexpression.h create mode 100644 src/main.cpp create mode 100644 src/markdownentry.cpp create mode 100644 src/markdownentry.h create mode 100644 src/org.kde.cantor.desktop create mode 100644 src/pagebreakentry.cpp create mode 100644 src/pagebreakentry.h create mode 100644 src/panelplugins/CMakeLists.txt create mode 100644 src/panelplugins/helppanel/CMakeLists.txt create mode 100644 src/panelplugins/helppanel/helppanelplugin.cpp create mode 100644 src/panelplugins/helppanel/helppanelplugin.h create mode 100644 src/panelplugins/helppanel/helppanelplugin.json create mode 100644 src/panelplugins/variablemgr/CMakeLists.txt create mode 100644 src/panelplugins/variablemgr/newvardlg.ui create mode 100644 src/panelplugins/variablemgr/variablemanagerplugin.cpp create mode 100644 src/panelplugins/variablemgr/variablemanagerplugin.h create mode 100644 src/panelplugins/variablemgr/variablemanagerplugin.json create mode 100644 src/panelplugins/variablemgr/variablemanagerwidget.cpp create mode 100644 src/panelplugins/variablemgr/variablemanagerwidget.h create mode 100644 src/placeholderentry.cpp create mode 100644 src/placeholderentry.h create mode 100644 src/resultitem.cpp create mode 100644 src/resultitem.h create mode 100644 src/scripteditor/CMakeLists.txt create mode 100644 src/scripteditor/main.cpp create mode 100644 src/scripteditor/scripteditorwidget.cpp create mode 100644 src/scripteditor/scripteditorwidget.h create mode 100644 src/searchbar.cpp create mode 100644 src/searchbar.h create mode 100644 src/settings.kcfgc create mode 100644 src/settings.ui create mode 100644 src/standardsearchbar.ui create mode 100644 src/textentry.cpp create mode 100644 src/textentry.h create mode 100644 src/textresultitem.cpp create mode 100644 src/textresultitem.h create mode 100644 src/worksheet.cpp create mode 100644 src/worksheet.h create mode 100644 src/worksheetcursor.cpp create mode 100644 src/worksheetcursor.h create mode 100644 src/worksheetentry.cpp create mode 100644 src/worksheetentry.h create mode 100644 src/worksheetimageitem.cpp create mode 100644 src/worksheetimageitem.h create mode 100644 src/worksheettextitem.cpp create mode 100644 src/worksheettextitem.h create mode 100644 src/worksheettoolbutton.cpp create mode 100644 src/worksheettoolbutton.h create mode 100644 src/worksheetview.cpp create mode 100644 src/worksheetview.h create mode 100644 src/xslt/CMakeLists.txt create mode 100644 src/xslt/latex.xsl diff --git a/.arcconfig b/.arcconfig new file mode 100644 index 0000000..f2781d6 --- /dev/null +++ b/.arcconfig @@ -0,0 +1,4 @@ +{ + "phabricator.uri" : "https://phabricator.kde.org/", + "project.name" : "Cantor" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d9ef91a --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# Author: Filipe Saraiva (filip.saraiva at gmail.com) +# Date: 2011.27.04 + +# Personal configurarion files +*.user +*.kdev4 +.kdev4/* + +# Temporary files +*~ + +# Folder to compile source code +build* + +# cmake stuff +*.cmake + +# moc files +*.moc +moc_* +*_automoc.cpp* diff --git a/.kateconfig b/.kateconfig new file mode 100644 index 0000000..3d7c91a --- /dev/null +++ b/.kateconfig @@ -0,0 +1,4 @@ +kate: space-indent on; indent-width 4; replace-tabs on; auto-insert-doxygen on; +kate: eol unix; replace-trailing-space-save on; show-tabs on; tab-indents on; +kate: tab-width 4; + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..25de145 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,99 @@ +project(cantor) + +cmake_minimum_required (VERSION 3.1.0 FATAL_ERROR) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# KDE Application Version, managed by release script +set (KDE_APPLICATIONS_VERSION_MAJOR "18") +set (KDE_APPLICATIONS_VERSION_MINOR "12") +set (KDE_APPLICATIONS_VERSION_MICRO "0") +set (KDE_APPLICATIONS_VERSION "${KDE_APPLICATIONS_VERSION_MAJOR}.${KDE_APPLICATIONS_VERSION_MINOR}.${KDE_APPLICATIONS_VERSION_MICRO}") + +set(KF5_MIN_VERSION "5.49.0") + +find_package(ECM 5.15.0 REQUIRED CONFIG) +set(CMAKE_MODULE_PATH ${cantor_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) + +find_package(Qt5 5.6.0 CONFIG REQUIRED + Core + Widgets + PrintSupport + Svg + Xml + XmlPatterns + Test) + +find_package(KF5 ${KF5_MIN_VERSION} REQUIRED + Config + Crash + Completion + DocTools + NewStuff + IconThemes + TextEditor + CoreAddons + Archive + Parts + SyntaxHighlighting + TextWidgets + KIO + XmlGui + I18n) + +if(NOT WIN32) +find_package(KF5 ${KF5_MIN_VERSION} REQUIRED Pty) +endif() + +include(FeatureSummary) +include(ECMInstallIcons) +include(ECMSetupVersion) +include(KDEInstallDirs) +include(KDECompilerSettings NO_POLICY_SCOPE) +include(KDECMakeSettings) +include(KDEFrameworkCompilerSettings) +include(ECMAddAppIcon) +include(GenerateExportHeader) + +if(NOT WIN32) + set_package_properties(LibSpectre PROPERTIES DESCRIPTION "A PostScript rendering library" + URL "http://libspectre.freedesktop.org/wiki/" + TYPE OPTIONAL + PURPOSE "Support for rendering EPS files in Cantor") + + find_package(LibSpectre) + if(LIBSPECTRE_FOUND) + set(WITH_EPS On) + else(LIBSPECTRE_FOUND) + set(WITH_EPS Off) + endif(LIBSPECTRE_FOUND) + +else(NOT WIN32) + set(WITH_EPS Off) +endif(NOT WIN32) + +find_package(Discount 2.2.0) +set_package_properties(Discount PROPERTIES DESCRIPTION "A C implementation of the Markdown markup language" + URL "https://www.pell.portland.or.us/~orc/Code/discount/" + TYPE OPTIONAL + PURPOSE "Used for Markdown entries in Cantor") + +add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) +if (CMAKE_BUILD_TYPE STREQUAL "RELEASE") + add_definitions(-DQT_NO_DEBUG_OUTPUT) +endif (CMAKE_BUILD_TYPE STREQUAL "RELEASE") +kde_enable_exceptions() + +add_subdirectory(doc) +add_subdirectory(src) +add_subdirectory(icons) + +install(FILES org.kde.cantor.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) + + +feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) +ki18n_install(po) +if (KF5DocTools_FOUND) + kdoctools_install(po) +endif() diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + 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 Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/COPYING.DOC b/COPYING.DOC new file mode 100644 index 0000000..a988da5 --- /dev/null +++ b/COPYING.DOC @@ -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/ChangeLog b/ChangeLog new file mode 100644 index 0000000..037ae7b --- /dev/null +++ b/ChangeLog @@ -0,0 +1,25 @@ +-----18.12----- + +New Features: + * Add Markdown entry type + * Animated highlighting of the currently calculated command entry + * Visualization of pending command entries (queued, but not being calculated yet) + * Allow to format command entries (background color, foreground color, font properties) + * Allow to insert new command entries at arbitrary places in the worksheet by placing the cursor at the desired position and starting typing. + * For expressions having multiple commands, show the results as independet result objects in the worksheet + * Add support for opening worksheets by relative paths from console + * Add support for opening multiple files in one Cantor shell + * Change the color and the font for when asking for additional information in order to better discriminate from the usual input in the command entry + * [Maxima] Deal with additional required inputs when fetching help for commands via the '??' operator + * Added shortcuts for the navigation across the worksheets (Ctrl+PageUp, Ctrl+PageDown) + * [Julia] Add support for class member autocompletion + * [Python] Add runtime autocompletion + * Add action in 'View' submenu for zoom reset. + * Enable downloading of Cantor projects from store.kde.org (at the moment upload works only from website) + * Open the worksheet in read-only mode if the backend is not available on the system + +Bug fixes: + * BUG 363606 - [Python] Different python sessions shouldn't share the same variables + * BUG 372075 - [Python] Don't exit Cantor on calling exit() in python sessions + * BUG 395213 - [R] Add rehighlighting for entries after execution in R backend + * BUG 394003 - [Maxima] Loosing LaTeX output after backend restarting diff --git a/DESIGN b/DESIGN new file mode 100644 index 0000000..995de6f --- /dev/null +++ b/DESIGN @@ -0,0 +1,143 @@ + +General: + +Cantor is designed to be very modular. It is split into these important parts: + +- Main application: +The Cantor application itself is stored in the src/ directory. It implements the worksheet and all the +Graphical user interface. It uses the Cantor library to access the different backends. +Cantor consists of two important parts, a KPart that contains one Worksheet, and a shell, +that contains several parts, and sorts them into Tabs. + +- Cantor library: +The library provides all the interfaces for using the different Backends. It should be completely +independent of the final graphical representation of the results. (e.g. always keep the possibility +of a Cantor KRunner or plasmoid in mind). It resides in src/lib/ + +- Backends +The src/backends directory contains all the different Backends. They all reimplement the interfaces found in +the Cantor library, to enable access to a math package. There are lots of different ways to communicate with the +Math app. To check how a backend is designed, look at the DESIGN file in the backends directory. + +For dependencies between these modules, these rules apply: +- everything can depend on lib +- the main app can depend on any other module +- lib doesn't depend on other modules +- each backend, and the assistants only depend on lib + + +Coding style: + +Generally Cantor follows the KDELibs coding style (see http://techbase.kde.org/Policies/Kdelibs_Coding_Style ). +Some notes: +- use 4 spaces for indentation +- use m_ prefix for member variables. no other prefixes +- for the library use d-pointers (see http://techbase.kde.org/Policies/Library_Code_Policy#D-Pointers) to allow binary compatibility later +- if you add things to the library, remember to add apidocs + + +The Worksheet: + +Cantor's worksheet is implemented as a QGraphicsScene (the Worksheet class) with a corresponding QGraphicsView (the WorksheetView class). +Each entry in the worksheet is represented by its own WorksheetEntry, which is a subclass of QGraphicsObject. +The entries can have child items to display text (WorksheetTextItem) or images (WorksheetImageItem). The layout of +these child items is defined in WorksheetEntry::layOutForWidth(double width, bool force). +To display the calculation results the special items TextResultItem, ImageResultItem and AnimationResultItem are available. + +The WorksheetEntry holds an Expression object, and reacts on its status changes, and arriving results. +Also it is in charge of requesting Completions or SyntaxHelp. + +The worksheet also stores one instance of the EpsRenderer, which is used whenever eps images need to be displayed, +e.g. in LaTeX results. + +Note: The HelpResult is not handled by the Entry, but by the Worksheet, and it forwards +it's content outside of the part using a signal. So the CantorShell can show it in the +side-panel. + + +The library: +The library consists of a bunch of interfaces, for the different backends, and some +stuff that is useful for math applications, independent of the Design of the ui(not limited to Worksheet-interfaces). +Things should not be depending on a specific backend, but it's acceptable to have interfaces only implemented by +one backend. (although that might change once a better plugin infrastructure is in place) + +- Basic design of a backend: +This is just a brief introduction of the concepts relevant to the Backends. +For more information please see the apidocs of the relevant classes. +For a simple sample of a backend you can look at the NullBackend. It only echoes +the entered command, or shows an image if you type "img", so it akts as a good +example on how to do things. + +Backends are implemented as plugins that are found on runtime, to allow easy installation of +additional backends. + +A backend consists of the following parts: +- Backend: + This class is used to store some static information of the backend, like its name, some links, or the + features it supports. Each backend can supply a widget, for changing the relevant settings. +- Session: + A session is where a connection to an instance of the math-app is created, e.g. by spawning a maxima process. + It implements methods for evaluating expressions, it delivers a syntax highlighter, or CompletionObjects. + The most important methods are login(), logout() and evaluateExpression(). see the apidocs for more information. +- Expression: + The Expression encapsulates one specific command send to the backend, and its result. It gets created by + the session, and destroyed by the Worksheet when the entry is deleted or replaced by a new Expression. + When the expression is run, it sends the command to the underlying backend to do the computation, and sets + the state to Computing. + Once the task is completed it should sets the state to Done or Error, depending on the result, to notify + the worksheet that it is no longer busy. + Once the result arrives, it emits the resultChanged() signal, so that the Worksheet can display it. + Remember, the state and the result are independent, e.g. if you have typesetting enabled, the state will + be set to done when the computation is finished, and the result will be set to a text-result. Once the + typesetting is done the result changes again. + + To be as flexible as possible regarding different kinds of results (a computation can deliver some text, + a plot, a formula, an animation etc.), Cantor uses the concept of Results. + For each kind of result there is a subclass, that stores the information relevant for the kind of result + (e.g. the text, the image, an url etc.). Your backend is in charge of creating the right Result Type, and + feeding it the information. The ResultProxy is then used to render the result in the Worksheet(@see The Worksheet) + + +- Syntax Highlighting: + Syntax highlighting is a very useful feature for entering commands. In Cantor it's implemented using + Qt's QSyntaxHighlighter functionality. The Session is in charge for creating a SyntaxHighlighter object, + so it can access all the Session relevant information (if you want to). While you can use an ordinary + QSyntaxHighlighter object, you may want to use the DefaultHighlighter class. It delivers highlighting for + parenthesis, and information on the different Blocks inside a Worksheet, e.g. to check if the part + you're highlighting is a command or not. + +- Completion: + To allow Completion of partially entered Commands in a Backend-agnostic way, Cantor uses + so called CompletionObjects. To get a completion, Cantor calls the Sessions completionFor + method which is then in charge of creating a Backend-Specific CompletionObject. + A CompletionObject should fetch the information from the backend, and emit the done() + signal when finished, so the process of fetching should (but doesn't have to) be async + to make sure the gui doesn't get blocked. + +- SyntaxHelp: + Syntax Help is the little tooltip, you get when pressing Tab, on an already complete + command, that shows syntax information (see Maxima or KAlgebra for an implementation). + The concept works similar to Completion. Cantor asks the session for a SyntaxHelpObject + which then fetches the information asynchronously, and emits done(). + +- Extensions: + To allow backend-independend functionalities like Assistant dialogs, Cantor uses so called + Extensions. + These are subclasses of the Cantor::Extension class, that are created by the backend, + and that translate between Cantor and the Backends specific Syntax. For example the + PlotExtension translates PlotExtension::plot2d("sin(x)","x","-3.14","3.14") to maxima + syntax "plot2d(sin(x),[x,-3.14,3.14])" + +- Assistants + Assistants are Dialogs, used for common tasks like entering a matrix, solving equations etc. + Assistants are implemented as plugins, found at runtime. Each assistant has a list + of Extensions it needs to work (located in the .desktop file), so they only will be shown + for backends, capable of all the needed things. The Assistant will be run, and once it + is finished, it returns a list of commands, to achieve the task. They will then be + added to the Worksheet and executed. + The philosophy behind this is not to hide the syntax from the user, so he may + learn how things are done. + NOTE: currently assistants can only work through extensions, but in the future, + also backend-specific assistants will be possible. + + diff --git a/FindCantor.cmake b/FindCantor.cmake new file mode 100644 index 0000000..07f5f72 --- /dev/null +++ b/FindCantor.cmake @@ -0,0 +1,24 @@ + # - Try to find the Cantor Library +# Once done this will define +# +# CANTOR_FOUND - system has Cantor +# CANTOR_INCLUDE_DIR - the Cantor include directory +# CANTOR_LIBRARIES +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if ( CANTOR_INCLUDE_DIR AND CANTOR_LIBRARIES ) + # in cache already + SET( CANTOR_FIND_QUIETLY TRUE ) +endif ( CANTOR_INCLUDE_DIR AND CANTOR_LIBRARIES ) + +FIND_PATH( CANTOR_INCLUDE_DIR NAMES backend.h PATH_SUFFIXES cantor +) + +FIND_LIBRARY( CANTOR_LIBRARIES NAMES cantorlibs ) + + +include( FindPackageHandleStandardArgs ) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( cantor DEFAULT_MSG CANTOR_INCLUDE_DIR CANTOR_LIBRARIES ) diff --git a/README.md b/README.md new file mode 100644 index 0000000..f518b37 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +## Cantor + +Cantor is a KDE Application aimed to provide a nice Interface +for doing Mathematics and Scientific Computing. It doesn't implement +its own Computation Logic, but instead is built around different +Backends. + +## Available Backends + +- Julia Programming Language: http://julialang.org/ +- KAlgebra for Calculation and Plotting: http://edu.kde.org/kalgebra/ +- Lua Programming Language: http://lua.org/ +- Maxima Computer Algebra System: http://maxima.sourceforge.net/ +- Octave for Numerical Computation: https://gnu.org/software/octave/ +- Python 2 Programming Language: http://python.org/ +- Python 3 Programming Language: http://python.org/ +- Qalculate Desktop Calculator: http://qalculate.sourceforge.net/ +- R Project for Statistical Computing: http://r-project.org/ +- Sage Mathematics Software: http://sagemath.org/ +- Scilab for Numerical Computation: http://scilab.org/ + +## How To Build and Install Cantor + +To build and install Cantor, follow the steps below: + +``` +cd cantor +mkdir build +cd build +cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/install -DCMAKE_BUILD_TYPE=RELEASE +make +make install or su -c 'make install' +``` + +If `-DCMAKE_INSTALL_PREFIX` is not used, Cantor will be installed in +default cmake install directory (`/usr/local/` usually). + +To uninstall the project: + +```make uninstall or su -c 'make uninstall'``` diff --git a/cmake/COPYING-CMAKE-SCRIPTS b/cmake/COPYING-CMAKE-SCRIPTS new file mode 100644 index 0000000..4b41776 --- /dev/null +++ b/cmake/COPYING-CMAKE-SCRIPTS @@ -0,0 +1,22 @@ +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 copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +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/cmake/FindDiscount.cmake b/cmake/FindDiscount.cmake new file mode 100644 index 0000000..a74633f --- /dev/null +++ b/cmake/FindDiscount.cmake @@ -0,0 +1,41 @@ +# - Find Discount +# Find the Discount markdown library. +# +# This module defines +# Discount_FOUND - whether the Discount library was found +# Discount_LIBRARIES - the Discount library +# Discount_INCLUDE_DIR - the include path of the Discount library + +# Copyright (c) 2017, Julian Wolff, +# Copyright (c) 2018, Sune Vuorela, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +if (Discount_INCLUDE_DIR AND Discount_LIBRARIES) + + # Already in cache + set (Discount_FOUND TRUE) + +else (Discount_INCLUDE_DIR AND Discount_LIBRARIES) + + find_library (Discount_LIBRARIES + NAMES markdown libmarkdown + ) + + find_path (Discount_INCLUDE_DIR + NAMES mkdio.h + ) + + include (FindPackageHandleStandardArgs) + find_package_handle_standard_args (Discount DEFAULT_MSG Discount_LIBRARIES Discount_INCLUDE_DIR) + +endif (Discount_INCLUDE_DIR AND Discount_LIBRARIES) + +mark_as_advanced(Discount_INCLUDE_DIR Discount_LIBRARIES) + +if (Discount_FOUND) + add_library(Discount::Lib UNKNOWN IMPORTED) + set_target_properties(Discount::Lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${Discount_INCLUDE_DIR} IMPORTED_LOCATION ${Discount_LIBRARIES}) +endif() diff --git a/cmake/FindJulia.cmake b/cmake/FindJulia.cmake new file mode 100644 index 0000000..c7f6474 --- /dev/null +++ b/cmake/FindJulia.cmake @@ -0,0 +1,95 @@ +if(JULIA_FOUND) + return() +endif() + +# Find julia executable +find_program(JULIA_EXECUTABLE julia DOC "Julia executable") + +if(NOT JULIA_EXECUTABLE) + return() +endif() + + + + +# +# Julia version +# +execute_process( + COMMAND ${JULIA_EXECUTABLE} --version + OUTPUT_VARIABLE JULIA_VERSION_STRING + RESULT_VARIABLE RESULT +) +if(RESULT EQUAL 0) + string(REGEX REPLACE ".*([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" + JULIA_VERSION_STRING ${JULIA_VERSION_STRING}) +endif() + + + + +# +# Julia includes +# +if(${JULIA_VERSION_STRING} VERSION_LESS 0.7.0) + set(JULIA_BINDIR "JULIA_HOME") +else() + set(JULIA_BINDIR "Sys.BINDIR") +endif() + +execute_process( + COMMAND ${JULIA_EXECUTABLE} -E "joinpath(match(r\"(.*)(bin)\",${JULIA_BINDIR}).captures[1],\"include\",\"julia\")" + OUTPUT_VARIABLE JULIA_INCLUDE_DIRS + # COMMAND ${JULIA_EXECUTABLE} -E "abspath(joinpath(JULIA_HOME, \"../..\", \"src\"))" + # OUTPUT_VARIABLE JULIA_INCLUDE_DIRS + RESULT_VARIABLE RESULT +) +if(RESULT EQUAL 0) + string(REGEX REPLACE "\"" "" JULIA_INCLUDE_DIRS ${JULIA_INCLUDE_DIRS}) + set(JULIA_INCLUDE_DIRS ${JULIA_INCLUDE_DIRS} + CACHE PATH "Location of Julia include files") +endif() + +string(CONCAT JULIA_INCLUDE_TEST_FILE ${JULIA_INCLUDE_DIRS} "/julia_version.h") +string(REGEX REPLACE "\n" "" JULIA_INCLUDE_TEST_FILE ${JULIA_INCLUDE_TEST_FILE}) +IF (NOT EXISTS ${JULIA_INCLUDE_TEST_FILE}) + message(STATUS "Julia found, but include files are missing") + return() +endif() + + +# +# Julia library location +# +if(${JULIA_VERSION_STRING} VERSION_LESS 0.7.0) + set(JULIA_LIBDL_COMMAND "abspath(dirname(Libdl.dlpath(\"libjulia\")))") +else() + set(JULIA_LIBDL_COMMAND "using Libdl\; abspath(dirname(Libdl.dlpath(\"libjulia\")))") +endif() + +execute_process( + COMMAND ${JULIA_EXECUTABLE} -E ${JULIA_LIBDL_COMMAND} + OUTPUT_VARIABLE JULIA_LIBRARY_DIR + RESULT_VARIABLE RESULT +) + +if(RESULT EQUAL 0) + string(REGEX REPLACE "\"" "" JULIA_LIBRARY_DIR ${JULIA_LIBRARY_DIR}) + string(STRIP ${JULIA_LIBRARY_DIR} JULIA_LIBRARY_DIR) + set(JULIA_LIBRARY_DIR ${JULIA_LIBRARY_DIR} + CACHE PATH "Julia library directory") +endif() + +find_library( JULIA_LIBRARY + NAMES julia + PATHS ${JULIA_LIBRARY_DIR} +) + + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args( + Julia + REQUIRED_VARS JULIA_LIBRARY JULIA_LIBRARY_DIR JULIA_INCLUDE_DIRS + VERSION_VAR JULIA_VERSION_STRING + FAIL_MESSAGE "Julia not found" +) diff --git a/cmake/FindLibSpectre.cmake b/cmake/FindLibSpectre.cmake new file mode 100644 index 0000000..3c8a825 --- /dev/null +++ b/cmake/FindLibSpectre.cmake @@ -0,0 +1,59 @@ +# - Try to find the libspectre PS library +# Once done this will define +# +# LIBSPECTRE_FOUND - system has libspectre +# LIBSPECTRE_INCLUDE_DIR - the libspectre include directory +# LIBSPECTRE_LIBRARY - Link this to use libspectre +# + +# Copyright (c) 2006-2007, Pino Toscano, +# Copyright (c) 2008, Albert Astals Cid, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +if(LIBSPECTRE_INCLUDE_DIR AND LIBSPECTRE_LIBRARY) + + # in cache already + set(LIBSPECTRE_FOUND TRUE) + +else(LIBSPECTRE_INCLUDE_DIR AND LIBSPECTRE_LIBRARY) + +if(NOT WIN32) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + include(FindPkgConfig) + + if(LIBSPECTRE_MINIMUM_VERSION}) + pkg_check_modules(_pc_LIBSPECTRE libspectre>=${LIBSPECTRE_MINIMUM_VERSION}) + else(LIBSPECTRE_MINIMUM_VERSION}) + pkg_check_modules(_pc_LIBSPECTRE libspectre) + endif(LIBSPECTRE_MINIMUM_VERSION}) +else(NOT WIN32) + # do not use pkg-config on windows + set(_pc_LIBSPECTRE_FOUND TRUE) +endif(NOT WIN32) + + +if(_pc_LIBSPECTRE_FOUND) + find_library(LIBSPECTRE_LIBRARY + NAMES libspectre spectre + HINTS ${_pc_LIBSPECTRE_LIBRARY_DIRS} ${CMAKE_LIBRARY_PATH} + ) + + find_path(LIBSPECTRE_INCLUDE_DIR spectre.h + HINTS ${_pc_LIBSPECTRE_INCLUDE_DIRS} + PATH_SUFFIXES libspectre + ) + + set(LIBSPECTRE_FOUND TRUE) +endif(_pc_LIBSPECTRE_FOUND) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibSpectre DEFAULT_MSG LIBSPECTRE_LIBRARY) + +# ensure that they are cached +set(LIBSPECTRE_INCLUDE_DIR ${LIBSPECTRE_INCLUDE_DIR} CACHE INTERNAL "The libspectre include path") +set(LIBSPECTRE_LIBRARY ${LIBSPECTRE_LIBRARY} CACHE INTERNAL "The libspectre library") + +endif(LIBSPECTRE_INCLUDE_DIR AND LIBSPECTRE_LIBRARY) diff --git a/cmake/FindLuaJIT.cmake b/cmake/FindLuaJIT.cmake new file mode 100644 index 0000000..5b4d23d --- /dev/null +++ b/cmake/FindLuaJIT.cmake @@ -0,0 +1,13 @@ +find_package(PkgConfig) + +pkg_check_modules(LUAJIT QUIET luajit) + +find_path(LUAJIT_INCLUDE_DIR lua.hpp HINTS ${LUAJIT_INCLUDEDIR} ${LUAJIT_INCLUDE_DIRS}) +find_library(LUAJIT_LIBRARY NAMES luajit-5.1 luajit HINTS ${LUAJIT_LIBDIR} ${LUAJIT_LIBRARY_DIRS}) + +set(LUAJIT_LIBRARIES ${LUAJIT_LIBRARY}) +set(LUAJIT_INCLUDE_DIRS ${LUAJIT_INCLUDE_DIR}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LuaJIT DEFAULT_MSG LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR) +mark_as_advanced(LUAJIT_INCLUDE_DIR LUAJIT_LIBRARY) diff --git a/cmake/FindPythonLibs3.cmake b/cmake/FindPythonLibs3.cmake new file mode 100644 index 0000000..48e6c8e --- /dev/null +++ b/cmake/FindPythonLibs3.cmake @@ -0,0 +1,18 @@ +find_package(PkgConfig) +pkg_check_modules(PYTHONLIBS3 QUIET python3) +set(PYTHONLIBS3_DEFINITIONS ${PYTHONLIBS3_CFLAGS_OTHER}) + +find_path(PYTHONLIBS3_INCLUDE_DIR Python.h + HINTS ${PYTHONLIBS3_INCLUDEDIR} ${PYTHONLIBS3_INCLUDE_DIRS}) + +find_library(PYTHONLIBS3_LIBRARY NAMES python3.2m python3.3m python3.4m python3.5m python3.6m python3.7m + HINTS ${PYTHONLIBS3_LIBDIR} ${PYTHONLIBS3_LIBRARY_DIRS} ) + +set(PYTHONLIBS3_LIBRARIES ${PYTHONLIBS3_LIBRARY} ) +set(PYTHONLIBS3_INCLUDE_DIRS ${PYTHONLIBS3_INCLUDE_DIR} ) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(PythonLibs3 DEFAULT_MSG + PYTHONLIBS3_LIBRARY PYTHONLIBS3_INCLUDE_DIR) + +mark_as_advanced(PYTHONLIBS3_INCLUDE_DIR PYTHONLIBS3_LIBRARY) diff --git a/cmake/FindQalculate.cmake b/cmake/FindQalculate.cmake new file mode 100644 index 0000000..f4f2633 --- /dev/null +++ b/cmake/FindQalculate.cmake @@ -0,0 +1,80 @@ +# - Try to find libqalculate +# Input variables +# +# QALCULATE_MIN_VERSION - minimal version of libqalculate +# QALCULATE_FIND_REQUIRED - fail if can't find libqalculate +# +# Once done this will define +# +# QALCULATE_FOUND - system has libqalculate +# QALCULATE_CFLAGS - libqalculate cflags +# QALCULATE_LIBRARIES - libqalculate libraries +# +# Copyright (c) 2007, Vladimir Kuznetsov, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +if(QALCULATE_CFLAGS AND QALCULATE_LIBRARIES) + + # in cache already + set(QALCULATE_FOUND TRUE) + +else(QALCULATE_CFLAGS AND QALCULATE_LIBRARIES) + if(NOT WIN32) + include(FindPkgConfig) + + if(QALCULATE_MIN_VERSION) + pkg_check_modules(_pc_QALCULATE libqalculate>=${QALCULATE_MIN_VERSION}) + else(QALCULATE_MIN_VERSION) + pkg_check_modules(_pc_QALCULATE libqalculate) + endif(QALCULATE_MIN_VERSION) + + if(_pc_QALCULATE_FOUND) + if(${_pc_QALCULATE_VERSION} VERSION_LESS 2.0.0) + pkg_check_modules(_pc_CLN cln) + endif() + set(QALCULATE_CFLAGS ${_pc_QALCULATE_CFLAGS}) + endif(_pc_QALCULATE_FOUND) + + find_library(QALCULATE_LIBRARIES + NAMES + qalculate + PATHS + ${_pc_QALCULATE_LIBRARY_DIRS} + ${LIB_INSTALL_DIR} + ) + + find_path(QALCULATE_INCLUDE_DIR + NAMES + libqalculate + PATHS + ${_pc_QALCULATE_INCLUDE_DIRS} + ${INCLUDE_INSTALL_DIR} + ) + + if(_pc_QALCULATE_FOUND) + if(${_pc_QALCULATE_VERSION} VERSION_LESS 2.0.0) + find_library(CLN_LIBRARIES + NAMES + cln + PATHS + ${_pc_CLN_LIBRARY_DIRS} + ${LIB_INSTALL_DIR} + ) + endif() + endif() + + else(NOT WIN32) + # XXX: currently no libqalculate on windows + set(QALCULATE_FOUND FALSE) + + endif(NOT WIN32) + + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qalculate DEFAULT_MSG QALCULATE_LIBRARIES ) + + mark_as_advanced(QALCULATE_CFLAGS QALCULATE_LIBRARIES) + +endif(QALCULATE_CFLAGS AND QALCULATE_LIBRARIES) + diff --git a/cmake/FindR.cmake b/cmake/FindR.cmake new file mode 100644 index 0000000..6494884 --- /dev/null +++ b/cmake/FindR.cmake @@ -0,0 +1,125 @@ +# - Try to find R +# Once done this will define +# +# R_FOUND - system has R +# R_EXECUTABLE - executable of R +# R_HOME - home directory of R +# R_INCLUDE_DIR - the R include directory +# R_LIBRARIES - Link these to use R + +# find the R binary +FIND_PROGRAM(R_EXECUTABLE R) + +SET(ABORT_CONFIG FALSE) +IF(R_EXECUTABLE) + + # find R_HOME + IF(NOT R_HOME) + EXECUTE_PROCESS( + COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home())" + OUTPUT_VARIABLE R_HOME) + ENDIF(NOT R_HOME) + IF(NOT R_HOME) + MESSAGE(STATUS "Could NOT determine R_HOME (probably you misspecified the location of R)") + ENDIF(NOT R_HOME) + + # find R include dir + IF(NOT R_INCLUDE_DIR) + IF(WIN32) # This version of the test will not work with R < 2.9.0, but the other version (in the else part) will not work on windows (and on windows the paths are generally standard, anyway). + EXECUTE_PROCESS( + COMMAND ${R_EXECUTABLE} "--slave" "--no-save" "-e" "cat(R.home('include'))" + OUTPUT_VARIABLE R_INCLUDE_DIR) + ELSE(WIN32) + EXECUTE_PROCESS( + COMMAND ${R_EXECUTABLE} CMD sh -c "printf $R_INCLUDE_DIR" + OUTPUT_VARIABLE R_INCLUDE_DIR) + ENDIF(WIN32) + ENDIF(NOT R_INCLUDE_DIR) + + IF(NOT R_INCLUDE_DIR) + SET(R_INCLUDE_DIR ${R_HOME}/include) + MESSAGE(STATUS "R_Home not findable via R. Guessing") + ENDIF(NOT R_INCLUDE_DIR) + + FIND_PATH(R_INCLUDE_DIR R.h) + + # check for existence of libR.so + + FIND_LIBRARY(R_R_LIBRARY + R + HINTS ${R_HOME}/lib ${R_SHARED_LIB_DIR} ${R_HOME}/bin ) + IF(NOT R_R_LIBRARY) + MESSAGE(STATUS "libR not found. Make sure the location of R was detected correctly, above, and R was compiled with the --enable-shlib option") + ELSE(NOT R_R_LIBRARY) + GET_FILENAME_COMPONENT(R_SHARED_LIB_DIR ${R_R_LIBRARY} + PATH) + SET(R_LIBRARIES ${R_R_LIBRARY}) + ENDIF(NOT R_R_LIBRARY) + + # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some + # R packages will fail due to unresolved symbols, or we can't link against -lR. + # However, we can't do this unconditionally, + # as this is not available in some configurations of R + + FIND_LIBRARY(R_LAPACK_LIBRARY + Rlapack + HINTS ${R_SHARED_LIB_DIR} ) + IF(NOT R_LAPACK_LIBRARY) + #MESSAGE(STATUS "No, it does not exist in ${R_SHARED_LIB_DIR}") + ELSE(NOT R_LAPACK_LIBRARY) + #MESSAGE(STATUS "Yes, ${R_LAPACK_LIBRARY} exists") + SET(R_LIBRARIES ${R_LIBRARIES} ${R_LAPACK_LIBRARY}) + IF(NOT WIN32) + # Query gfortran to get the libgfortran.so path + FIND_PROGRAM(_GFORTRAN_EXECUTABLE NAMES gfortran) + IF(_GFORTRAN_EXECUTABLE) + EXECUTE_PROCESS(COMMAND ${_GFORTRAN_EXECUTABLE} -print-file-name=libgfortran.so + OUTPUT_VARIABLE _libgfortran_path + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + ENDIF() + IF(EXISTS ${_libgfortran_path}) + SET(GFORTRAN_LIBRARY ${_libgfortran_path}) + ELSE() + # if libgfortran wasn't found at this point, the installation is probably broken + # Let's try to find the library nonetheless. + FIND_LIBRARY(GFORTRAN_LIBRARY gfortran) + ENDIF() + IF (GFORTRAN_LIBRARY) + # needed when linking to Rlapack on linux for some unknown reason. + # apparently not needed on windows (let's see, when it comes back to bite us, though) + # and compiling on windows is hard enough even without requiring libgfortran, too. + SET(R_LIBRARIES ${R_LIBRARIES} ${GFORTRAN_LIBRARY}) + ELSE (GFORTRAN_LIBRARY) + MESSAGE(STATUS "gfortran is needed for Rlapack but it could not be found") + SET(ABORT_CONFIG TRUE) + ENDIF (GFORTRAN_LIBRARY) + ENDIF(NOT WIN32) + ENDIF(NOT R_LAPACK_LIBRARY) + + # for at least some versions of R, we seem to have to link against -lRlapack. Else loading some + # R packages will fail due to unresolved symbols, or we can't link against -lR. + # However, we can't do this unconditionally, + # as this is not available in some configurations of R + + FIND_LIBRARY(R_BLAS_LIBRARY + Rblas + HINTS ${R_SHARED_LIB_DIR} ) + IF(NOT R_BLAS_LIBRARY) + #MESSAGE(STATUS "No, it does not exist in ${R_SHARED_LIB_DIR}") + ELSE(NOT R_BLAS_LIBRARY) + #MESSAGE(STATUS "Yes, ${R_BLAS_LIBRARY} exists") + SET(R_LIBRARIES ${R_LIBRARIES} ${R_BLAS_LIBRARY}) + ENDIF(NOT R_BLAS_LIBRARY) + +ENDIF( R_EXECUTABLE ) + +IF(ABORT_CONFIG) + SET(R_FOUND FALSE) +ELSE(ABORT_CONFIG) + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(R DEFAULT_MSG + R_EXECUTABLE R_INCLUDE_DIR R_R_LIBRARY) + + MARK_AS_ADVANCED(R_INCLUDE_DIR R_R_LIBRARY R_LAPACK_LIBRARY R_BLAS_LIBRARY) +ENDIF(ABORT_CONFIG) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 0000000..1e5c727 --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1,4 @@ +########### install files ############### +# + +kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR cantor) diff --git a/doc/create-dlg.png b/doc/create-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..065286750dcbf3dc82b11026a02081a83acb667c GIT binary patch literal 3053 zcmb`}dpK0-9{_OGwzWxCx?=ftZN$e65 z5)#qXfnO66+JXkp7j|v~f5qKngN1~)30*ZX)n5Jo#mdU+^71#9H-}((8MFive6+N@ z^qF933G_7mgFXkq=Wm$j1Hc#az^0f5fUo9&+1amVX6Jab zv)`DRo!yK(Gt1@u8}1C3%lm@E<*~Wke_(Ujn@qFWQ=3h*r$AHxz?zz7O-)ULSW^>| ztnrD-v2iA2bZq23gH9hA9{$$QFr79uJTOS3_7C*-^>3hl)!j?&?xFtG(@W{X;}`Gh8$q>o^|kNn zYu?q>)Yeti)K*s4;wx)#mDMh4pj_A+^~Hr3Vn2??Y~0CnaNkSm%e{4ye;#on-%}^WgdiYc&=4q5jA*+D z{T&*64BH?DUQRzm6x>x`GWWAHod>ej_?Cw>0X7>xgR!*hp6DKOFnS=Z39P~ojbn^c zxT-+5v2qx6;|`AbG?dT+Fn!CNCET~^} zx!A6fu_rdx*PUyl5LfWZT$M5}+7n@O@`Yq+gw6QrK~=@660fq=9YCs)uOGUoFTBfH z>12+Qixfqc^t2Q6f~ws{j5@o+LH*d`hr@;bG%|j4WX>JCDDLIdzE1@eb(hzbSA)pj z)fA(fqp!~7vfe7JyY!zDp07WEIl#dNUCz88sAzZRTGr9;m!)0$);O47NwMq-wLRx} zPXr2-9JwD$g^y3eP35og=lLqV2Y6m_RpkAKeS=tmv*S zZ$6~x9=%o3SGFhgp(rPYK&XVZRC&UW4}4(46Yr9i6DqUY*%!U2zgG&|q#K!XF3>Kz zMIJccNNqnZTZgT+h)>jE-S14!8^1_2OS~9$*de zc21GEOOn~6OA{lzP$zXrzXPt4jy+S|0Uqp0_7S(Fvjjj? z>J2uwhO%g&nSuCE!{r(N37fz+Zb^*^k3Fd_UZ7suNm zqSRF!ExZ9{if-WY#E4o-*{wO}8enXGRbD*|4vbTc-Lv0mN~nGNf95^tMB{! zFa3L1Pt-YXyEY_D&JqQ|ia zsxo%r3WJqq@i5F;a<9forYl<9AR+J=MSB{PZJksn8rbY@ zipak%f(u-4zRtlgiwWGAM3-g#FuI@{nnn+O3{eO zWY@MCX4L=*H~L2#I&{G*tG_=)u)Y9zdOOTi(CA6g`+#Uya(TF~U(!Jd9CX4L) z0rW84((frVYP|sE(sL@bWwrnZq|)LO@1E%}IurH5pILR?KFYV#KigO2Lz=&9im%#~ z#L!R41<}Zod?HYEzr*E+)nNP;V0%hg`l^{|!)k0m(+S@}6`E}iQwm+G?0pbz$dIRq zO9WGD2&k9Hx!<^0$)6wg>&;}!$Mx;4bw4XS-iwX*&{#0kRn@2n7=P`n(@V3hi_maS zPI?_#OIf(Y95n>=y_|35JFS|9m)SpL!zK#={7PWyu8vb~tS5pN1r@r7d}36GwZ`p= zhMcwOQ3vn*0$Nj5Q4=c7L!>t*gixs+o}JA>122G#^12(A!>q--@c@q;_I3=YX)2v~vtVxYOGvvDFvqVuGIUxN%*7J<%9lmGFM(f|o?JV7R%g^&P zIyyP2+^OYJZgWe}vLuH!o~;u3GH|e{!YBwckgm27Jpb~okpBU5N-fv` literal 0 HcmV?d00001 diff --git a/doc/differentiate-dlg.png b/doc/differentiate-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..afae50271f0d28a67e9058487340c72d5dd5e57c GIT binary patch literal 3019 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 literal 0 HcmV?d00001 diff --git a/doc/import-dlg.png b/doc/import-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..9827fe011f40818e168cfef779ffd719d6013f5a GIT binary patch literal 2088 zcmajhc{H0@0|xMP^VQzYj7%FJT4hQj)z!4s*eb;gDV3nHMzuxq*{X`Rw2X>|W9cYk z*Bw(Du|x!keXF9iBnXO@$Rg4Zq3yg~rc<+h&-tBuo_o)I|9bDa=f>G0EfnP-av%^$ z(aO^NBnY%d9_Zd1*8yWsmi9IfXdTGb8iiQ-f00U8{$g1w1$@eqRQj1@Nh*1eiyxPsAWfQ-aEyvM@V`?~ z^vI-W!n3I7-h+btyAOhIQ?hdNGqQ6dG7BAkp{Ay1rlh7P-b{;6Nh74B`^O}OM@ENT zjtC9EeBokPP;iJ}KoHI^&>QD>#vAW>*2fj=g>m&jJ2~5-9Bu4SR@Sx%E2Jsn2cu&a zhQ{WH;bsR8!_BWO*MmUoC#=j(QK4&iEMtFG=oY%rSt`S?$V9d`((5-}NJQzLk5zhl zX^u4&5&eCms>u;FHOV$}V_VvF8G@~B%|k0_Qp!E~lbbDn#>iM_Z`m_AXZTKbZ*nir z{*8-VSnaW#mRnilJ6;A%9qsTg~Y-2^%iW@ z&qffbBwuDCUzWGn|6w!h(IuaJJ72d+x-1Ox_*n-2nkt449*MnHo&4W^ z>UvIOU{Q9^GvQwd; z7c%+e3bKDYbF)KV6w*RXHcLxRHv?2%@oUFepO0w^GXbKr@QqJUdE{}fdfMZ!+s3J2wUGb0Gn`p2b4Sye)86UYoAoim)G9kW{MAz$*ahNuA|ed^|=mg zv!%`^6}dcUT&N5SCfUPg-amC{kF%}1fKjl#tl833x-Gb=uVS#z<_><%-SAuDHqzDN z=7XIiDQSbtd9RS&IM5WM5#=Bjw5o9&=fs5UbYf7dj~tBKOFg5=UW@6B1xwU5FnJp= zWBbkT!<)`^bU@zEKGM5}&~x^{Ah(UF7_X%HY`C@_pKNo~1Eaa~s-xSmM@Fd5dc56A zYGBiW&}{rZzE({z_@oE8H<4^Y9NqHD`RLhUPd(tTMV!m>UlT9Sexck9BQ(H zcs@ESHpsxxvC@dpHu3za*Jf#5PFZR!8E$pHD@kl?S>*55nm;6h5!?kTZOZeF{D&5_ zkozkBK9Ku?)|M8vTObF`Ud($JithTRvvwzY$GcQI5qGNPYNGazB;Rwf#049US34#%NW_4#dU! z44=YreN+m4mS;nRDqzprErKiIzRo%e`?_u>U&_`T!lNiyVTdVsDxy8#NqHGEa>IFTpRTQ? z>Pk3qfS+_82d25B6OJ@APou+1T*EnCiEp%W^N)@$0pH$O8LTOWiIDHQ4@J7pfs^%7 z29pV`36plZIe2SwGQlCy9MbHbJVfo&EHr>CG#~=)I}0f{ZFc3}kv-F8#uqdzOOEZ= z7-@$M)(bq~L1Z!ODzYq^aE`>buN#T_7G17&!vcR; z3g4Yw{*N=w?c6X9I2njnM0EB$MiFUxanTR0x6 +ATEX"> + + +]> + + + +The &cantor; Handbook + + + + +Alexander +Rieder + +alexanderrieder@gmail.com + + + + + +2009 +Alexander Rieder + +&FDLNotice; + +2016-08-25 +Applications 16.12 + + + +&cantor; is an application, aimed at providing a +nice worksheet view to other Free Software Math packages. + + + + +KDE +kdeedu +mathematics +math +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + + + + +Introduction + + +&cantor; is an application to allow you to you use your favorite +mathematical applications from within an elegant &kde;-integrated +Worksheet Interface. It provides dialogs to assist with common tasks +and allows you to share your worksheets with others. + + + + +Using &cantor; + + +Screenshot: + +Here is a screenshot of &cantor; + + + + + + Screenshot + + + + + + + +&cantor; features + + Intuitive worksheet view for evaluating expressions. + Results of graph plotting shown inside the worksheet. + Easy plugin-based structure to allow different backends to be added. + GetHotNewStuff integration to allow example worksheets to be downloaded (or uploaded.) + Mathematical formula typesetting using &latex;. + Backend-aware syntax highlighting. + Plugin-based assistant dialogs to help with common tasks, such as integrating a function, or entering a matrix. + + + + +The &cantor; backends + + &cantor; offers you several choices for the backends you wish to use with it. + The choice to make depends on what you want to achieve. + + + Currently the following backends are available: + + + Sage: + + + Sage is a free open-source mathematics software system licensed under the GPL. + It combines the power of many existing open-source packages, within a common Python-based interface. + See http://sagemath.org for more information. + + + + + Maxima: + + + Maxima is a system for the manipulation of symbolic and numeric expressions, + including differentiation, integration, Taylor series, Laplace transforms, + ordinary differential equations, systems of linear equations, polynomials, sets, + lists, vectors, matrices, and tensors. Maxima yields high-precision numeric results + by using exact fractions, arbitrary precision integers, and variable precision + floating point numbers. Maxima can plot functions and data in two and three dimensions. + See http://maxima.sourceforge.net for more information. + + + + + R: + + + R is a language and environment for statistical computing and graphics, similar to the S language and environment. + It provides a wide variety of statistical (linear and nonlinear modelling, + classical statistical tests, time-series analysis, classification, clustering, ...) + and graphical techniques, and is highly extensible. The S language is often the + vehicle of choice for research in statistical methodology, + and R provides an open-source route to this. + See http://www.r-project.org for more information. + + + + + Julia: + + + Julia is a high-level, high-performance dynamic programming + language for technical computing, with syntax that is familiar to users of + other technical computing environments. It provides a sophisticated + compiler, distributed parallel execution, numerical accuracy, and an + extensive mathematical function library. + See Julia documentation for more information. + + + + + &kalgebra;: + + + &kalgebra; is a MathML-based graph calculator, that ships with &kde; Education project. + See http://edu.kde.org/kalgebra/ for more information. + + + + + Qalculate!: + + + Qalculate! is not your regular software replication of the cheapest + available calculator. Qalculate! aims to make full use of the superior + interface, power and flexibility of modern computers. The center of + attention in Qalculate! is the expression entry. Instead of entering each + number in a mathematical expression separately, you can directly write the + whole expression and later modify it. The interpretation of expressions is + flexible and fault tolerant, and if you nevertheless do something wrong, + Qalculate! will tell you so. Not fully solvable expressions are however not + errors. Qalculate! will simplify as far as it can and answer with an + expression. In addition to numbers and arithmetic operators, an expression + may contain any combination of variables, units, and functions. + See http://qalculate.sourceforge.net/ for more information. + + + + + Python2 and Python3: + + + Python is a remarkably powerful dynamic programming language that is used +in a wide variety of application domains. There are several Python packages +to scientific programming. + + Python is distributed under Python Software Foundation license (GPL compatible). + See the official website for more information. + + + + This backend adds an additional item to the &cantor;'s main menu, Package. The only item of this menu is PackageImport Package. This item can be used to import Python packages to the worksheet. + + + + + + Scilab: + + + Scilab is an free software, cross-platform numerical computational package + and a high-level, numerically oriented programming language. + + Scilab is distributed under CeCILL license (GPL compatible). + See http://www.scilab.org/ for more information. + + + + You need Scilab version 5.5 or higher to be installed in your system to make this backend usable. + + + + + + Octave: + + + &GNU; Octave is a high-level language, primarily intended for numerical + computations. It provides a convenient command line interface for + solving linear and nonlinear problems numerically, and for performing other + numerical experiments using a language that is mostly compatible with MATLAB. + See http://www.gnu.org/software/octave/ for more information. + + + + + Lua: + + + Lua is a fast and lightweight scripting language, with a simple procedural syntax. There are several libraries in Lua aimed at math and science. + + + See http://www.lua.org/ for more information. + + + This backend supports luajit 2. + + + + + + + + +The &cantor; Workspace + + + Screenshot of the &cantor; Workspace + + + + + + Screenshot of the &cantor; Workspace + + + + + + The Worksheet interface of &cantor; consists of three parts: + + The tab bar, where you can switch through the open worksheets. + A help panel, where help for a specific command is displayed if you enter "? command". + A Variable Manager panel where you can see the list of all available variables on the current worksheet. The Help and Variable Manager panels are shown as tabs on a sidebar of a &cantor; window. Variable manager can be used for Maxima (if enabled on SettingsConfigure &cantor;... Maxima page), &kalgebra;, Octave, Python2, Python3, Qalculate, and Scilab backends only. + The worksheet itself. + + + +The Worksheet + + The worksheet is the basic area for working with &cantor;. Using it, you can enter + expressions, allow the backend to perform calculations, and look at the results. + The commands the worksheets accept depend on the chosen backend, so you should + learn the appropriate backend syntax (the Show Help button takes you there directly). + If you know the command, but you need additional information, you can type "? command", + and contextual help will appear on the right of the worksheet. + If you want to see some example worksheets, you can go to Download Example Worksheets + in the File menu, and download worksheets other users have published. + + + To control each command entry of the worksheet you can use control buttons shown at the right part of the worksheet when hovering the entry field with a mouse cursor. There are three basic actions for each entry: Evaluate Entry to update the result of calculations for the entry, Drag Entry to move the entry at the other place of the current worksheet and Remove Entry to remove the entry from the current worksheet. + + + Font settings and alignment of worksheet entries can be changed using a toolbar above the worksheet. + + + Settings + + The Settings menu allows you to change some settings of the appearance of your + current worksheet. + + + + Typesetting using &latex; + + + This setting changes the way results are presented to you. If enabled, it passes the result through + the &latex; system, to produce visually appealing formulas. For example, 3*x^2*sqrt(2)*x+2/3 becomes + + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Syntax Highlighting + + + Syntax Highlighting increases the readability of code, by highlighting + keywords, or matching brackets in different colors. + + + + + Completion + + + When this is enabled, &cantor; will show you possible completions + for the command you are currently typing when you press the Tab-key. If there is only one choice + remaining, it will insert the rest of the command for you. + + + + + Line Numbers + + + This setting controls whether the different expressions should have a number in front. This allows you + to recall older results - in Maxima, for instance, this is done with the %O1 command. + + + + + Animate Worksheet + + + This setting controls whether the different animations will be used to highlight changes on a worksheet. + + + + + + + + +The assistant dialogs + +There are several assistant dialogs implemented in &cantor; to alleviate some basic operations. + + +These dialogs can be accessed using the main menu items. Each backend has its own assistant dialogs. + + +The Create Matrix dialog + + Screenshot of the &cantor; matrix creation dialog + + + + + + Screenshot of the &cantor; matrix creation dialog + + + + +This dialog can be used to input matrices. You can define matrix dimensions and its elements. + + +It is possible to navigate between cells quickly during input using the key. + + + +Matrix operation dialog + + Screenshot of the &cantor; matrix input dialog + + + + + + Screenshot of the &cantor; matrix input dialog + + + + +This dialog allows entering name of the matrix to compute its eigenvectors, eigenvalues or invert matrix. The default value (%) is used to refer to the previous result of calculation or input. + + + +Differentiation dialog + + Screenshot of the &cantor; differentiation dialog + + + + + + Screenshot of the &cantor; differentiation dialog + + + + +This dialog allows entering expression of the function to differentiate, the name of the variable and the order of derivative. + + + +Integration dialog + + Screenshot of the &cantor; integration dialog + + + + + + Screenshot of the &cantor; integration dialog + + + + +This dialog allows entering expression of the function to integrate, the name of the variable and the limits of integration (for the definite integral). + + + +Solve equations dialog + + Screenshot of the &cantor; solve equation dialog + + + + + + Screenshot of the &cantor; solve equation dialog + + + + +This dialog allows entering equations to solve (each equation in a separate line) and the variables to determine (separated by the comma). + + + +Package import dialog + + Screenshot of the &cantor; package import dialog + + + + + + Screenshot of the &cantor; package import dialog + + + + +This dialog allows entering name of the package to import (⪚ numpy for Python). + + + +Plot dialog + + Screenshot of the &cantor; plot dialog (Functions tab) + + + + + + Screenshot of the &cantor; plot dialog (Functions tab) + + + + +The options of this dialog are separated into two groups using tabs. The Functions tab allows entering functions to plot. + + +To enter new function click on the Add. Double-click on the Title cell and enter the title, then double-click on the Expression cell and enter the function expression. + + + Screenshot of the &cantor; plot dialog (Options tab) + + + + + + Screenshot of the &cantor; plot dialog (Options tab) + + + + +The Options tab is used to define plot and legend options. You can fine-tune almost every plot option to obtain the pleasant look of your figure. + + + +Plot 2D dialog + + Screenshot of the &cantor; plot 2D dialog + + + + + + Screenshot of the &cantor; plot 2D dialog + + + + +This dialog allows entering expression of the function, its variable and the limits for this variable. + + + +Plot 3D dialog + + Screenshot of the &cantor; plot 3D dialog + + + + + + Screenshot of the &cantor; plot 3D dialog + + + + +This dialog allows entering expression of the function, its variables and the limits for each variable. + + + + + + +Command Reference + + +The main &cantor; window + + +&cantor; has the common &kde; menu items, for more information read the Menu chapter of the &kde; Fundamentals. + + +Below is the list of the additional or special menu items in &cantor;. Please note that some menus are only shown for backends that have corresponding implementation. + + + +The File Menu + + + + + +&Ctrl;N + +File +New + +Creates a new worksheet with the default backend. + + + +File +New +Backend + +Creates a new worksheet with the chosen backend. + + + +File +Download Example Worksheets + +Opens the dialog to download examples uploaded by other &cantor; users with + GetHotNewStuff. + + + +File +Open Example + +Opens the dialog to choose an example to load. The examples should be downloaded with File +Download Example Worksheets beforehand. + + + +File +Save Plain Text + +Allows saving the current worksheet as a plain text document. + + + +File +Export to LaTeX + +Allows saving the current worksheet as a &latex; document. + + + +File +Publish Worksheet + +Opens the dialog to publish your current worksheet and make it available to other &cantor; users through + GetHotNewStuff. + + + +File +Run Script + +Allows to load and run the batch scripts for the current backend. + + + + + + + +The View Menu + + + + + +&Ctrl;+ + +View +Zoom In + +Zoom in the current worksheet by 10%. + + + + +&Ctrl;- + +View +Zoom Out + +Zoom out the current worksheet by 10%. + + + +View +Show Script Editor + +Opens the batch script editor window for the current backend. + + + +View +Panels +Help + +Toggles the visibility of the Help tab in the sidebar. + + + +View +Panels +Variable Manager + +Toggles the visibility of the Variable Manager tab in the sidebar. + + + + + + +The Worksheet Menu + + + + +Worksheet +Evaluate Worksheet + +Triggers the evaluation of the whole worksheet. + + + + +&Shift;Return + +Worksheet +Evaluate Entry + +Triggers the current entry evaluation. + + + + +&Ctrl;Return + +Worksheet +Insert Command Entry + +Inserts a new command entry below the current cursor position. + + + +Worksheet +Insert Text Entry + +Inserts a new text entry below the current cursor position. + + + +Worksheet +Insert Latex Entry + +Inserts a latex entry below the current cursor position.. + + + +Worksheet +Insert Page Break + +Inserts the page break below the current cursor position. + + + + +&Shift;Del + +Worksheet +Remove current Entry + +Removes current entry from the worksheet. + + + + + + +The Linear Algebra Menu + + + + +Linear Algebra +Create Matrix + +Opens the matrix creation assistant dialog. + + + +Linear Algebra +Compute Eigenvalues + +Opens the matrix name input assistant dialog to compute its eigenvalues and dimensions of the multiplicities of the eigenvalues in the corresponding order. + + + + +Linear Algebra +Compute Eigenvectors + +Opens the matrix name input assistant dialog to compute its eigenvalues, dimensions of the multiplicities of the eigenvalues and eigenvectors in the corresponding order. + + + + +Linear Algebra +Invert Matrix + +Opens the matrix name input assistant dialog to find the inverse of the matrix. + + + + + + + +The Calculate Menu + + + + +Calculate +Differentiate + +Opens the differentiation parameters dialog. + + + + +Calculate +Integrate + +Opens the integration parameters dialog. + + + + +Calculate +Solve equations + +Opens the parameters input dialog to solve linear and non-linear equations. + + + + + + + +The Package Menu + + + + +Package +Import Package + +Opens the package import dialog. + + + + + + + +The Plot Menu + + + + +Plot +Plot + +Opens the plot parameters dialog. + + + + +Plot +Plot 2D + +Opens the plot parameters dialog. + + + + +Plot +Plot 3D + +Opens the plot parameters dialog. + + + + + + + +The Settings and Help Menu + +&cantor; has the common &kde; Settings and Help +menu items, for more information read the sections about the Settings Menu and +Help Menu +of the &kde; Fundamentals. + + + + + + + + +Questions and Answers + + + + The Menu Item Typeset using LaTeX is not available + Not every backend supports every option. Current version supports &latex; output for Maxima, Qalculate! and Sage backends. + + + I have installed Sage/Maxima or other supported CAS, but the appropriate backend does not appear. + + + One possible explanation is that &cantor; did not correctly detect the location. Go to the SettingsConfigure &cantor;... dialog and change + the Path to the appropriate application on the backend's page. + + + + + What a peculiar name - what does it have to do with mathematics? + &cantor; is named after the German mathematician Georg Cantor, the creator of set theory. + + + + + + +Credits and License + + +&cantor; + + +Program copyright 2009-2011 Alexander Rieder alexanderrieder@gmail.com + + + +Documentation Copyright © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + + + + +&underFDL; +&underGPL; + + +&documentation.index; + + + diff --git a/doc/integrate-dlg.png b/doc/integrate-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..6e486dbf642fc06ae5c0d67ca20643717938dafc GIT binary patch literal 4674 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 US%Yhy@@@$5Tux24SlTr3zc;lXYybcN literal 0 HcmV?d00001 diff --git a/doc/latex_formula.png b/doc/latex_formula.png new file mode 100644 index 0000000000000000000000000000000000000000..4bf723c60163ca2729238be3224cca573db41bfb GIT binary patch literal 597 zcmV-b0;>IqP)F!bn~h45Ql<3^I_C=y)VY(0cLS? z*BNyK4A-Hco>J+aZ!Cwb2jqIlh4qM{R9sKW3=7@i0a)sId@TR0ki6o zzO(<z5=B!n(|L0+BnG?E=v?nPWoY_B@$8 j45I52H+X6JC}jNsv|3iEwy{o800000NkvXXu0mjfepd+j literal 0 HcmV?d00001 diff --git a/doc/matrix-dlg.png b/doc/matrix-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..245f322a6f783238b74a8e5a8726472c489726d0 GIT binary patch literal 2042 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 literal 0 HcmV?d00001 diff --git a/doc/plot-dlg2.png b/doc/plot-dlg2.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2364dcfae759cdb76fbc1e3be20464a1eaf3ea GIT binary patch literal 9465 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 WHC4iQ3QoSL_ef3We&Ib3?0*0~-xDVQ literal 0 HcmV?d00001 diff --git a/doc/plot2d-dlg.png b/doc/plot2d-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..d03452cd3c3a12303715497a28ea654c88bee586 GIT binary patch literal 3645 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 literal 0 HcmV?d00001 diff --git a/doc/screenshot.png b/doc/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5bef6b9a1937ccd164e9397b7b051db0b82afaac GIT binary patch literal 31151 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 VwV4bI!M~1HTkDo)+2wm7{|6S(Jl_BS literal 0 HcmV?d00001 diff --git a/doc/solve-equations-dlg.png b/doc/solve-equations-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..55b13ad4103ea0d5e094bc48d0478b654917b01f GIT binary patch literal 3394 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 VS4C4x*?%KBduu1F;-7tD{|(fMyW9W( literal 0 HcmV?d00001 diff --git a/examples/maxima/maxima_examples_plots.cws b/examples/maxima/maxima_examples_plots.cws new file mode 100644 index 0000000000000000000000000000000000000000..4aa0401ccb1f894e40c722f4db5d0d3005e19f40 GIT binary patch literal 258708 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�g1wnVf>Ja(5tzo^9Ivb6B?`%djK(56Cx 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 XB5G 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 z z%L$M)*{@7Xg8)c)(nMdVt}vWUsx~gn6=Hi-Nl?ujtS)D=O>e>C4qcaH@JR_KUd0_+ zN)5FlJg%e^_$*3HZKL|WQVFyH&FG9|*QS>fC@^Nh~`S`l3FC&a5yazX}{m3;A;o z7y(e$u4jK;Y3D9TCMcOH>%4(+D7&QUu#WMR+)gl;sm?)Y5YC1h{c$U+M-ySpbR`7{ z+T>H!GWKKb2{<@%bm&+8RU=43x9`{s~kg(^TZ z^l#O@L?K~t#2&od$1)T239d4sl{fj!#m0t((z4)UDQ^?}`?v=t4EQqO;)=zE&cGf3 zm#3L?JsEICG|u|syTV4ZwjoF`_lyEjmZNww!H1!6z9C}GvSRl`3<8I?!hY=VT}Nphy>c*Mo5lnCmtkGm^j0uWp7-&bVa+=m_`TLi{1OCu1 zA~w9~?b~)YNOpF3guJRk@q?qm@j9e_kiw)r9@;>)G$NHat)8#LUt6iw$8CAA2k%DP z5=_%=Xk=a&Q_9&F_HuN;s>*?BxlQn!(RH`Myj?aqNEvZ01igh39OsIx@(X=qSPwp0 zBjbzbW})@<)aP=XdDleZC_vCM7r{G@JnF4|ah9Cw0#&9W~xSm)9)Ls;y@;BK6f6XBvgXjt`3r zOotjNjEx|V+(G5uKn^O!hnhI4t+s(Y?4YtsrCT8s;+c-=sLq+hK&3Q}mXo{UNJX|z zFCwpye}NZ^hkd}DXS6nE143IDa_?)zP(QKcVb2X@FADs-lEpVtxCMm_pu22}3%Yx0 zhzONUS%b(Qs6#@%=YV%Y7V`GY>-w)(VXJhT|q>>^d8nw#w^$tk`&Y(oL05JN}iCC4L06n5(>&GBQmU?AcA2?e0dTIy`n7$vk!N0n(^>LhoM9w zZN1fU<{(rB?31%Z4uaf+2@Vhf`qkJNM?xI{$7Ogx)ao4mZ_&TxA#tYk1oVFm!>3V0=@sR%~2Qh{!q~yk618 z-;=W|=1@RIE<|$rD0Eyu8)r@SFr4QlG(u7e>k#jk-yuhSYmA%cQm>YBd_Jm0VE7R)U=4s4Nn6!bKXwR6`pcfd4O^cz^E(hF` z8zMJ{t5XQ~g3a8$fmm_*3a$5ab-eLLVCaX1RHE-;m(;=B4Ycq_{E5Ve-Swqoge|nM8HnOM$bRls{ zgG=Y+T}|178J0w`tec-#n}Ym|ys*^#c)Mu-zIyvx`#@8A}5e)dYHj>vFM8`p&9 zfoc57Jw&IC%=1Vtu=yQ`vVDaJ#c@kc>NnlM_fUM6#s4#892|JkeHH^zM z+DS!FT27Zve)Mr?ea$oTc2$Xuwb^tyZMqdp-1ZQq`dd&hm$)xuQ!x?)e>IkKa~c(t;}dqT@N4 ziB#IB4M1whKy0{TU8f5^36m!@45emOLn^G&3e1ESXA)Ty^?D{D(p(`j-Pc%^ODV(X z;3Ud=?4g;5(NtUIdHY0A3teS|oj3Vpj}rTpL1<=z+UV~ChUJ3|7eVqA_RFCiWYb_q z;;XdTLd&HbP^+Bm$~O&W6zGflqjTa_hz;5RX&2#pWmgRx&v^@ERW`5J1;Ww6a%!G8 z2!}7wv*dyLAA)JvyTi+&#W99izCa<7T^dcbfw*CU!fPw&?hFcrH-S_J*|V6ccn*Fr z>c^`3a3a`v!BA~(@d>KLYqF~51N>kh1gugt6DX2fwD~vS|HwRS3S+pD_HStqOH_ze z!g>;!hizdd7{V2{Bme5rWLV&k0>#MREe}NpoD9z zM_Iq@>?%6pDM+A%>tM}?jNKa$DCxPMo4T;83Iax9xWuT4zuuN0^f@=rexAcv+aeR z)O$Ts5f6YG)1l?Q!#1_0UdeGqwXYWob1?0Jnh9`93QbwL&l@PL(LkbELaDH}5~niM zT_;RZtn2Hyl|yz1duq&)7;t45iFdG2gdbVuTHh_yHx%SW1|4s>kJM6;;e*xLCdYvG zeBMPFyW>qhaSX9v*(S$;0OPyz395zvbt77g)38yTRHPSq!Rl*nz-zpYiITTlo>YcV z(@=Ed#K^+&8F<}M7jwh=BG8pZR<9>oV-ghAy1UyQzd)4+?P&DUXm?E?BV9H}RaK%> zL-%_JGirR>MUOM8($``0G@Bz#RM6ue5c6bDF#X&SAZ9j|U1nad>MlO{u%kO52)^`e zi=d%}sDi2?yU;wGV@cwjk@Di! zhM_`#h1Z!I@Y>dUt!sZ?+lZk=1t0LX=jfz(ZaWzI9#=@jV1qOwtt{L21_Eh(@Dbna zz)p}R1c=vs@b=oa8Oh>ZLnlPnyw3W92khKHH|HCJSqK`2uTFN{S9`#o$H~H9a5Ede zb})vGb%A^QT{?1ZZa~aXJuDJdkH!pOZFje4JdVLqROkx}+cnki=VF%cfUFMX9dvz6 z`fk6k4?u=)`uu_nXj83wcua;3Z?Kom6&dHgzV%amk~aAa86tr0pK{-cN}g)^(VWsM zq-pU}4fOWn$|l%L*;6g2B#!!Ryg#(djM6f%?Lisn^}f+u;R?k8v{(YfcrM=h2G$uQ z_i~c-oc|je$y>q7p!ST&duToyL;3aA?_@d7WkQ@x!Ql0TN9A^w+i#ZR)XlkRLh4C{ zeh?%=M=)R7Ra9RLaxxOp8xS77$wT9yJY^m@Loe_QZ16v#L%(AxEX?gzhC%XZ3`-f) z;2jjwFhTPOt|?fJKRTvW{UL{@TeDd;hB20%%G$UwceXmgkB_%ehE}}6r;99%McL}a z&M)1OxX9EB6XYx>)%R}EqqzoOM%hK?Jw!GzoAqOdZvy zzCT@Lx{I6!XV-2hup33qk(tqu5oenqGfO|c94a{G`5=neyV`ZS&qY_*U{hVEYLCN9Pb2_C zy#mKejxBQoqVYHBJWrjdp>~18jx7hrG4y>Vow!%qB67yJUse?H2EI9Uwl^}R?6_a# z-O-r*&`rA?0GFMXB>}C`|I(KUZBrgk>%mpu15+f#^B1;BJ|~&CEquTV`zI@9m3&+i z*=Cs78-S-)@UB)>Mic)+3nsR}u=S>&@pp8NlnOibA}>49I61d)@1Q^i!>brI*)9Y& z1DX95L@pQ^jxexo&HhgZZx2+gj#qk)=6c;8e8h2bkNftZwDnNakz^AUwY7feI7JbB z$8pj{n`ZS|PB!P9=ZV%=*o$x15Hg~Nc7;D7{iMm0>E_Wzo0VU@oUGX!KUXZ-N%B%x zKR=YC2RG=bI98h#Z^KDncbQDXJ8-z9KDVmqXHv(vFy89MaT_T7AKhy4VF}pc!`&{-qaGTUV#}z9VU=jql7;KsJ2e+Kp?lurikecng*|X2Nv3pM2`sHum>%>@Y>HO4D;9{}u@hz#tvpm#Lp{!z zffCGMB*B`Lgh~eml}NiAD`6Qm=pAG%e}=7e33`=#+3b3LNxn`VftuCQI3 z@rir5#&H}RSvUH;ov+pMZ!TyD-d?bIn(G}tWo%V75=zQ9hGu*&?MkBJ)`Fyr_e-X- zy4n1GW^#P*;CI`xM5eOl;C*sF=8%bYqCW;MW>Kr?jR7=*$#}_ab#4H_t5bDa+l2s% zXfkZKdTLT%bb+yphZ<%7%Q|C3XIyL#%UmrIb-6WP76J7!P6y@_R!MC2q z_<;=Z(F|31!8<4Bupx@=CMetKu{kDW@x<#LPx#SQg}WG72ONl41x&P4Q+S5moOY`Ay04XYb&*j6ZdeSzm0%Ay|Be?_zaF=3NO9u3Zl(cJaYF9vRo~^@JvGl8mnA z`VZckI<+5jmdYBiT$WD_iV-kGc-H+Dz17@+I8d>qP32SB{IvTV({nJ6wQkfM`kcBg z{U>TbfEAdTlJ4_LkQ!=N4+TiBlc3SD}0RBXK{~|EEirYJu({UeQoN=&S0Y zg2X(USzX5)5G0)Qk<;hQcu64x&z#*RTNGSZc7{g%VHgBMmr!2t4Y{}Q@zOZdRatE$ zSSTu$X&j<@@r|J3Y#$-+Iu2nJ9g-~9@&-C!e9xocO!w;J5K7_cB`m`Q5`G6)P{0L3 z6HL7@4oO)!^LmA|Dq*;6FasW;fLc$feyB%ZqaZ?sbh{7^tWmIdp3dxKdjkR#ovt8o z<*2)B&PbEe?7BKwxZNTCgkCmmKYX(J**u-u$@UIJDEi7l*!yJbqYt^@pM_L+xYDkb zB7C~-IuQGCW(V6l=(hIL)&LoI5jt$#wZr>fjTig?r!RHVd`~jy?;Qw_K*3#+Jpyb; z;$e-1Ug5hvv{R3Vs1mj8{aBQfZTa@ofByFW z^acO!zkdGTzy9#&Z(siKhkyU&hrj&z?U(DH{`u!W{r$hc{q*a<{QT3efBUE9U%&nM zKi_`+%b$Mu@_$fE0|XQR000O8SdG$5Lv+87=lcKvd1nIv7ytkOV_|M|Z*pI4VR&h6 zVJ&P(GcqzYE@g0YyuJNz9Y>NS`m^s}Q4bFWY+&zIWoCUgb{1&cW6$jRs{QP4?#vp- zf|h8B+p?%8=`RTS-(SW#C$fqZ$t>CGogRziy%m{NS()*9BI3jU=c{k_e|~!L{n$<=P%BFK6}wbzvlen3YdGX@n+3r!ksi)^puAA5o4Ssog_QTFU z{NAqIeYpFu`Rntu=7)$9iL z_rEpIPhUQ5&VR_GU7cT^Jw0fMpI)9{H!sd#o;AOmKfQk5*j3LiPk+05a{A(|$xHX_ zta*0&=Vpy>57G z`0$&H7w1pcAAELtl^6cyvpjp?Ctv2f$T#rnY<=06_HM#kpQQCCU)!3W-5CAT7w513 zda-&LH}2)9SFbM5uCBiN?DOO4<=@v|{q^$n<<+ax%lwMII=#L=yL@@I{yM)9TQx3P ze`wp5pZ|1qcDa0U<0^dr1=cbgbonQFfu3F3&2jBs?*qoV@#77y&FlN~)${WouA6-~ zkosv}kJr1V32h#4wTutl#QD$7k3YTe|1z~ZDQPv19Be|pul zP2Lo*n^zb4*FzhcH@2hfpWPe3qxgU4j!vIGy)p6gSJ(f$N#W4*&!2DpnZIptg@4)n zT>g4`@g#2%-1Xag#XfDCJbPvj&vlA_y!iR-`T~bJ|7G{4zw*)cKl>YhJ$Z3)b!H=A zG@CB}vbuXa&tHfakqtB_XO~xY)cQkcKKhHXgEsUZ+m&x^+H&6V4mmcjd3$e~@6Yp5 z<~eCz^G4Pme%-vjeEZUq{OQ}*K5kz761+|Fzna(O`PQF*+PuCxyS{w({S({S>u-K2 zlQch^zj(3!>KTZP0j)p%;_CUuFZrANFBU8>;)l(V94_;+vmf$cPn#E+^*p4(^mkQ18C;#gw&Fj2Dzx}SU zXa4LxR64eJUX~+vdat$|3~Fi_cH*9x3KS`sz3EZ&Ue>nadl0hxpUa6MRzs z(iQgi$&G7I7ClUNkuS}U;1BcS>h4=GT2p`__)VDD6n6^AJ8tgl1~O@R@?GPCz|_kJ z9vKYsx#q?n>qXG5l;`IZs~ddoU$?af|Mc>n2Y>huo=dL!O+2t7ej{J6hi|d2qh6a^!z`tIiH&<~vS=G)b9r&Se3;q(<=LyV(`#dNw^qDx?ltQ)|JMVO;E&B~ zk9k{Oe0qNQ#9R^gKe1LY+u=jooL)Zh+h6fLjB(F>-=tlwv}t-&k=|NkIR@-C&27{5 zpuJ%dhYIcPgVpJ2Z4{gR=2GlF`1!`Y-EDlwcbO^A6Q-|dnA$W+t2Ol1?jHQYN)Hoxm+I=#PZvT#3(c$-r^ z^ko0E6C2)<5#2Y}KktQwcVb|6e}8DUcVuDrFy?>a4ZaiOn>S8&bBg=f-92}>{r#sh! z(sypi6|H>zM{GF6jX|rj9-4c(vwW>4yD`fBhs}s}=g@NQqQ3ti-1!{U@$TR1_pFP3 zVlVLC5%1rdci*A?vE@$h-;j4N-|mAyHsAe%_Th1{N)N8k{bKbUM!s>xYtM4ObbXf< zxnFF)+w(sl5%0U5t$Td;!JQL6eCFPD!kdTSo+;n;pz0o0PPW$Hpf%AK& z{C%wI0g>cP{XW{yT8}_2mS@*5=4RVu=Khv1az!7i^x;AJSf!5-(x)nYdXT=W(svKi z_f`7-LHeOeKRif3R_VtF>8C3F^dS9QrJo<(KlKe5Dm!q)7JPUQhWaK95AVWI--hAg zeHiK+F+98zLwzfThxg+7>A(Kp@yOk9X@7F@>pj!{GhO>DFYyBp{m=KLuY9sw?&F{4 zAzryC@41in?;2e>81I?$9`B?G|MKeeA3vS>u3x4p!PlEU(PqIRtZXCS`v3Evx%G9Y zxA*-$bH2}gf7i^m=^uF9_rK}yxrxuV+{Am^@ps*XZTEX_;&*TN8}r+QeW>kHUP%jI7*_-E_opEUSq%jJGAUy$T(`d{LSqp{OaPxZ=bKC zMEcV&@in~3O>Qmp^98MU`{!-`bn87832gYruP&~xzj<(B^Si-*qJ?x$T=+Wgl1(qvZKoHqaQA5LqeyAMD3^}qbq{7duV z;+M0_=Ed0$*9KO8nSa0dq51yeSHl5*PgCLSX}zI;zvU~QTwYvV z?VlU2+@P7OJNET|^wsC5&9}|$4zcg_w(aA#d3JV<-y(h^hRb$@eHO~M>DIU9SZf?o z3#qpdtUidh#>yKf)82)De*MPp{NA%ktlO@jT<<{e_HP5-8e591)!mpI&#qeT%0IDZ zy!yxGwU)}%zauW|ahbT6jiyI5!u6sU#L6e@ICQ>>hwXxxtrzYE%hSr(Vz0^VA{ej&(AK; zgiyTkO@3>kyct`L*u1#TxAExTU*`Av>hkPb*!qGb{-C+_-3n#@<}OP8AZ>nyd3b|5 z-@Y(4`oVGTzGOXgs^@(A2zO^kkHPd&^qyPBk`s`Ky{n3B&mwdyE z)$u>h&Rz*#dP^2H-}*F77Gpo3KRNsQi%-6@6G1@YtJ5cI?)hK;YonXpHN4rcE-#)C z<+naXf~49`&9~QliQBZ_+x)u=+ueWrZ_SUV*O%wN<{y7Q)3Sj(g+=Dfx%#k8;gus*ruNqzIv z_gB~F*FRm;RQU2P`EU1dl@Zsmt6_7nc3s z9%A3R>2&u#&quR;=#pfYj1P`txd4X{`v)%R?UFP;bcy8)9EJx+8SRqk&QX>{e|+&v zbDduamfY9w;)mNWU0UGlw^s0tK8rU#D;nLSZ+`pn`->O*zkL7V+&lyNJHO1APk*?0 zd2PV^wmF1hY>;H}9axop19et8hD(C1B}EWZ@aXe@|ExLtM@iesH)4uqNy*92bDAwk zDQFnsj8C80DyGgvNUX~i_xY2&W&ib8OYr^c*{|2841RG1-s`A(GU9sLm`3yDuLsF$ z*JRw^uh=+V{W-r_CqHc*l@E(l9g+X}>C-P> z{Pybk|6ILiJxsn#7wv;AxjV1^^w!mjT`Ib}sBV1LyvF5!{p44(t(w=CB8AQR2p=UI z2nOV~;CX4j%Zs@%dXU z-Ap=MZ9_1(*oexJhw4E$2e>yr%t8XE9+cnSOgZ>Y+6wGjBNK|~>(xz080tRbz;Wyg zTuGCBm6Z6}Pd!zuua|qbMEWvnp6DN|hoQgXb(CY^*>WRfKsMOvi;L5z81}d@BT)Ct zO$99A@<8SJ(()(W4`M^B|Gsqv2k>Ph+s1;w+jePX-pi@@^54Ic-+nQtPoLgAez!%IKZ6pL@6EpPy_bJ|AU9WsdX<^WPgaM2 zQ5=q6SLQ7H)K~cCmU*xD^69(Yi?;kf=XU<%KS2#9`0Yo{$Bm`d!K+56R%$-__`6#a z?smVMqPtBY9qV=xfUKA8Or6fU)Mv)evx!%Vhg|)3b$#|D+5D@gKm2Id|NZ5~FE63{ z8Yf@GfPcTHdGg}y^z!-wpW8;wvSA0$B&VXv^{qK^QGliS=)nRkAKQgli~m1a<8D6k z5-j!)zEN?O<(u2ZSw7DCXf}i|FP{GNUm7jIF6#)pH*2TkH&S~|1^)ix*R!YKlg+;Q*X!q}FPlGSz3KAu{QA22 z=IoUXJDA$|?=R1&rfyO`Vc$@9}ogo5m!?=76NRyuxrTYI^^40mcTe@yq$+;1y9w^#3> zx!+Y?5_Jixu~G_`@0J|;>f+V1?hca1`1zl_7wvReJPysh5dO%_*V7K`|j zu6JG^SJ&H@zvKGbxAo;JCg|bX%hO+$r(8XmpZP_BJ@`11z;49$-hP!XDzAK0Q{Fdz1n1=L=L8{g{Q@NG6( z)?d9UUtNPRz5Okz-@NW_e8tK5l@XR1K=QUmd-qS3NLtsYxp#Ojg|*WL=^ACVQh)10b%|-v`eum`)|2{PMc*#-X4Z- zT#>hjIL3R(`-R;6bKwTr+z8E;;Y zUllLVJG=R9-j4iM`_dGJ^`5=`6SvB^`GrY}r?)Hb87GwO{^;5H(_h74GjIGNfAi-C zpP4Ri7yb-m_w3j6YiKDXz&{0o^rp#t@|72PdzQa?P0Cxt+1^@x6z~BZ3wKPKpUTWMg?DrMb`tO_fdGosa zNB=&LtHD3X|E_3Of3AnVb=CbNpD(W#TWWco_pbWs_gPq+?fd2hbAet-ij2{ zM}9YW!}emzYgw&idF)&JkvH{i+Zy8+;&RU3Eb}ZS z8?68j|AGWICobjEa+34m{TQF}M817S4G)sFmQVlk&s#o7|Xk6 zu(f{j`M6@IMQwZXd4K!kC!dG)XS;W~g%Sw7_gY&7NMI-R+F?%jG=2zHeR0Q zeEq{$FZXcV?eq2fHNhP6y@uI_`nLIYZCC_T?xBf8#NeN{`DmZ|kH6b}X9YN|CZ=kg|pKq@EFhd&n zw(okFVKC%KKW=}R_+H;kY^VG%Z5p<{nXYZ~!-Ou~^)Rtbp_!-Q9iHXAzL?ncshNj< z+k5HKI5x4(n*1FHCU$Lpl+bT~l<H&E3YgGIsVT`Ihf`D`S2{Q@6K2%6ok) zDdfkPV$@qn4?jvD%!fOt_O7>*LKmBHOxqvjy}p#pT)SrM!^S7+ru-yRKi~CIQXf)d zM(NfkY2NQUnN!ycQ@im=>>)Dqp6+}nQ)VDT3frILy}pw!wfRX}7m}4HSqtsAo}`PJ zee^@S{Yl>ML0LV@-t_Crv#ivEeD!{Pd6(aB(@)#q$t|Js-t@T1sCoxA9d zQV}X4Gq5Ib7rpf;w)y7p4vaXw*SFHQV`pkp-1=HZ(?7Y5Za+(p-Pgu<5RmWnwe-;* zz;0sWvt(=8st%>Qo(0=4Z^GXxSN`y`bS5d{*lm247-GI(ZX`U*YESmqe_5ydos#7b zKg*D}S4cEMHk_B3vgQ)GkKTGO*nc$6ewS?d!w+K$VCd$4>x;>HSl08gk=}Y3Y`|{V zZnHG+myr!^%1K%% zd6@V5X4X1MLUOb2Y|6)2Uu@*D)B3)?ejoRh8SUNo#V%E`H)D3r^M}4vJzJ4eF`fB%KgQj7?%{BjTcw1nkY`AvAynT(nI=wvo z5qRh3ho4@e(O2c>EI5q#bpz;!!$R)+_QS@qhWv&Pq06H7S(ExvZtlmHz1G_ajd{}i zUpDF5=6Pk#h5opUnMLoj)IZs^O&;iEx3{r6lYRM%!QRv%OYz>OP5HVk?QL3q7tQ;U z4AK>v{0g71#p~O%7VNl{_}Yz+=P8?M?aBOVT}8rY-cEHrgyE4ms`6 z;B{*yZQe28hs`^5d8SdjY7W{}7Gj*+>ZDF=FPEFq9xadJTPpBbXKtx6VoQbA$Od~> zz4vI(Y0sN)eHd!f7JBU|_^GrVF>!wLgFS6thhgAm?(u5#YTL`Sr`3D+0c>M+)!kg^ zwW$IR5B8%r6>i3MX~*q6P2A4W^vrhDIxoj)%Q_cgdtj1boo}9@Wt}bHgN>Y@FZ46^ zRDL~k<2w=?qq>nrohQu;zE2il%frl=G!N8q*|Aw|)*`>D%k)VEX~$d3;`vCKc)Qe8^}tHYz(Z23K9eQ)2V250Z#Sr_u-F60~7cQ`D0 zvX1XJH9a1d>;PO!+;Oto&4c8v+!=yMtY)9hkh%I=o!C}*!a=tMwYBEcCdMlASbJOb zLw*m~OzmXO+5FO%&16U33I>Be?G8S1wVGSi(_>+6>^((_H~`Lhx1UF zzO#46?KI4`z;O;nmqMOaM>*z2;FC`E{j|^9Fmc}?Ty1Ar`^l^(?BmJU zIQDVRSDOvSb^1q?B zkr#S9v|K0K$l&F8-fW2DMCAd8nddfNli#o5*`lTIKE^A^|I_gUqp7^zLYz-+mVDG` zqHQirpGU$u7Voq3W4zLZUK%9y0?wJS)xjWmbRJ`L4D|A|tm=-ANK<4ichts=(u{9R%*tfq9I{ zWr8@1c!0g;R6E2AIpr?)6qy|u<=EJs?oBrg+|v-damqtv?%hi4P7}p$ejR-?)l{m5 z+8&n2-o)-Sx!5J2&RcGxLe)Wi>>{2Hj1sRPZ%wl|_gQV|>x#`nZYP-M07~k_bDKx% zXU!|sW*8uh@=36_*^^@>W0Mr1wxc)f=R$82+r5%s$vm;aAdHh9+*0bHQbp{d*5>7R z5-a;Y*s@nh&jzkU(b~R7XslcK09h#Odp(Z|ClZH-jvZ0ez zWa}n9Jr9;f35O_kastB|28eIiW0cU*M5Zmy+>BL*Rme@*!M?=%Z3bBiR#Ydie?BLp zlq~Ab7M#!AtEI`?*><5~=qIuAz=htvli<02_{>YpMAefCXJ|=QMHg0#ho}XKEmn{b@}|+f$iN6oGctQ!*4~g zQhDS;pC4IE1wCitrp|xTaV1%2GfT5GJtcx`*(OdsPp^%^!(WwzqPLekXyQG>oPK)Y zFcMSZ*6OL|bjvZyr!G$?4UMOvs^)a%6pg3>COw^O8Wsp|1t;qe2RJmc#*kIfF29+_ zP2r=^bMofO58qagQW-${6=a|oyfhu|E;A@viii#(A`U%F-bq#xC5(Xwv`(+PtpghvbG(xN#N@?yx?U384Y0mJPpz&C6ngW8}27A zwW)vbm+6p;_w4O}))d)=+}^N|oZ>u~FUs>UMG1{V9OtQM(B^)I@7H!ejD8pmp=t#$ z;VWOsJQtGaFyX3oo~~d0}CW zh5#?rK;e%w2Z6fJHrKv7ZK1YlTZuuv9`R`UwZ_!=v^c;6c_U&dR1LUR`)pKnRqsln zCWof{r?!Gw6M5KZ_5k#{Zk`m#$o7Omp&sYC28*fAn9_W$C`9__knx4Gw`oz@1v=E z?#ME)*KSxmH<1J3M! z^1G_%P6L?PFiO?30~?0XHB0ad@nK2_n56Rn$HpK#ZM32tRR1N$Yj%Uvo1xayS7}Q- zQXGw4qxcGR3oz*pi`|<(X$cCC84olsfeC91yg^BDzH&+zF86g_FEGhCbA+BN8TV^hH zI!sfOo>tQ>eE^dUv*N6P>QXc$s?$;*ZC6iGah%DFT3hIB!REz}#&m`Oap3CvE!4KD z$pCD+q;TEd1{e zgzv0}u3`rmOjHVsd4H;YjzViQ28HCv*s*;*X<(L(nkS7=Wycm?C{s721BuV>vu<2{ zuM4@&>;6b;W;#HW3UjwanrWc*c2rs(U9*p-048ULmNrN21UY@4Stk$f;E7u~4<#+W zbH82JkBl=6c0yq^M8k;KslbuF@0=Yn$MEYuSG1E<*cg+ubU5L^Zl zl+z`1PKFjIxEpQLxxpc&zqZa!pHHxzeE2oGQLeJR4MsJO#t1`6GsKZOIolR$7T{Ek z3sD(5HEHDZCVi9qvt6$^|K0|ZjiijZZ25ORT^*(pPSd%ee46d$(y8Sdp!vXph0j9Oo3_v^G%L4sP<+L_Y51)}xQbfd zkl;G(7$m`x(?MXdR+Heyacf$K6I1Ij=?8BG9@j(u_97gy7^XH;ehR=%t}7 zt)3=Po5~?Hw25!Ivqmd)j^o9stfA1sJutn)U7UX7{_nYdZMM)ir~lm+63eIdlmsK>m>> z(d;1>k5Zc9AemNsW~V>y3ajO*-7k?!2uVH+Y?g6ev^xOoY+i#T%`m==>(zawgaL7ew)YRNIdrYTUjNW_KM*tEl}+J#GZjf-Y~!#cgK1u39+ zPz{sDv^Pvwr~?h0oE~Yi#+ebUy$vPY8%{Arapu&pN~h8Nvw0UJOA>$u4+Sw+Fn4Ju^5)F|4T( z+`@+M>4qmNDkUUt4?TTK`F780ggVC z3IWdLP>Vd=2%*@St!Apc0VF1XMh)lF$~zorPuM^;UET*!%p=h44)~G69#-@Lc(6ni zTt3PJeTVtAC*pUg`TEV zmhEyg2&s5=R=dkg36mo8XnZr7Cn~~XORW1ay!YBV1A>=&-OMJZP%VZ4>17(kUGAn~32a#B-el?%NcqCmvA{8M<= zR^F`uzcZaZ30n1FG3~jBw=^2FEb>JrIdYLr@?wFbgF5o_i7 zwKUg!Z}KtA3aR;~ot~V7n5@Jl1LtTPA;lQLJ;a{IvEjKRV25^g%_lz4@8MQv)mN(l z%%_(;9FMvkjpBIN$8G>KlLN5;)BD0q)V;~A(av$p)S0$!C@%EJ-Rz*OJkH1m&DSV( zrgc-X5AZf+OC~Zy;c+9)h{+9LSsMaAh2GRIhjd6|J5h3jvn?K{t|e5gH??wtPtUaS zyifD8n0re0PnAoH+_eBg#JY)SguM+ngM&^Ck{>d+q*iZ=*3gx;4nPrE!@T^3JxWcj zcY2A$iEAAkMAYgI%%>9)0ku64Jza+sgAr3_29tFIccaLCQ`=!qpLdw4Opt}fsU|r? zk|M=)E5X$TUfo%mQVP)O_Xd~fn_^~*)z^$wAHZHTj8zC<{{{Z8Vzdi-k@_K)M2j9# z5L>V?)1%3RFsc$;axMBHI!ImcwB9NgH1caQCrnz7&EB;G9I6IZ=?OY<2aUxNW<=`S zYUroX8+>a5?oeJM1ts=`n~u(6GWP~pEzYe$>jPp0&{AZ7;<`Gf*Qrep>6A<&<>`cg z1R6Ks-hA5=O)2AONlvFwT-SZ1>$-lZo!m46M~sKH=Nj66Ab&Yz84hV>=`FEKL}1Xp zY>3UtEZ?exT&T_0MF=w;-X{cpQq{E=ND-MY<<5qr0dm?H&@A9|Y@{F8_O+7>V#A5 z(frv8VkTHUWSC<$Hc+S;Or)BH=qC=-#5Fc4JCbb)i7P|KUoHy9XK^XmjWEq5Qdj?^W1$>hM^~~dBSxE968IpObXAn8H;+PPFOXz7-w#m>; zJh%~dV%A>l-Uj*WB_S;o;YHIJs(y%t+78hy zEx>q0^i!Za#n?*k0j^Sh3kDM34J?TC4W~Pa1rj-@U8*il7IK_rAt4L>{ zX$_T^Tm~>%*g7N}YEu#}AxgETR|z11BugaVK9U8EviUR0>jPfTWiyRn!+JZt>zRWT>5xtY3W zu^wjD@UG-euu1n-Z2m%SN6L}BLn=;O;|Oq0n3Sc1t)&o7wwc<&^R_IYYRcYhuVg>e zbJ3mL6PBUVw0a=Y%3)g$I%0M<@Bh8jPWb2uNjyk@7jhaMaXnM$nQ+?h#wK3{V;Qo*%c(Y#!( zE4Xu0>`p1ERbQ$GaEmoeuHepY%E*eP0!;`Rpi^jmT&n2rQyn4>RFNM+9JVBSUN zgYICcu}~jCY3f1=3e+hpj(nBg4+`mtxgeGaL1TuBw{)7kW00a-%?1%Y5p2Tv!XS`@ zCJPP0lVS}%FBep#|BA-C`6v~k4O<)|g`AO2!8Nh7yR;s5(@Z@~UWAT_z#gB~22@sYo zE5AK%C{<+t?V%}D-*X{1krgN%T-srabrRU7C(!8^>7VGWRD~@7WaS=}0Vk|EEutzo zQ{?6up*M%Zk}e<{3oB1M4N5){^sR*k(h!u6Vq4!`(J<)i+`Eimihhun3%Te@lgz`- z1s_Z9?MaIxTtrN;wp|T8m?_|NzSrKfQy+KcJBDY%Y9!;)qcA{<20#r&Iff1>ixCP@ z4@3zt+3@PnhgF-_>6ujKC#hEgjE%;m7&zBpLMl3f#LfwzwtQKHEeBanPi58bCVD%_ zg9kZH!-#InK`oREHBVeZQIn<64ocC43re1F+bSEf$whB(I6;GwyGIVFJQ$V1U{M#F zm?lO^Kpsc7nL!8_+&soe_)+aWWa#BrDFe`LQ!b*VMLQr(gWZ5r>a=47E zq9sJmh3-q8k4c$yQCcu%F9L5!bVAZlh;->POkjt=vO_HIxEe}d1|a_sI>I9aI8mM< zk_TikeF!WcV~)CPa0|ybHm0-?BwEXE53I)GOte z4r&Bu0{nZiFZrm7muq|2>{WwiA-8SS(IHSG<$&Z#K;_|R(R4inoaS)^2JbQ6r~$T2 zqV`00)RBWu?uAvNUZ#pNsF#R#2^9>+~IJYSP~)m!=8Nj^=V5P`32qKI_LBXSr`YsN^og+UE8VZ0_Q2 z9LwfLdM|5$(3`m=6J+bp60%jhPW!+V8Jx(O!kx_E@4GtKE5H-aHyn-$U04-j;<|H&XvG4aFVO%nRQDa1*_8 zl4%Lb%+hb=o3e~`a_xaQ98=6j8V#tJTr8?$$T4>SCAz$o*F#^!pwqlnWeGp zfIY7K@YQ&_$dB01NflNU)y_jP0Lj<@c6Agk*R)zzDMV^nVsWZqwGoZ|Rh3-Ps}e{o za4Vsa=YeP^abcRj))DfK^Ctn@fJ2#YEatnXP?&?3u*{d?TV$uIkBVAaan{&sSKbFi7asqAm}vkod= zdEn!kV>t$FZptw^&VV?r*9|V@_JTd2K9uSeux(({?ejzvaW}*+3XbZgFu3=HOJq$xK&mIMfSvw|$5^FY;tU|`_n5`ycX@nzGU9ivS zzD)8&uunORkt(E+9CbIC&90xp6E(qEQIA8G0T=?c4J54*uCLfAfd;%ufk=W>k|lg3 z>(j<`Ap?(c=3z^o(n3xk63oU_3g0X<51yu!MlkNaML7^?oso&rF77<+P?MBCfN@Xw zj1>ngfLWYUgboI7!7Q*)hP4~bJQ+hG78`HGej2EO-r1U?!s%JCL-o(>riJAg6ZhQU zfy%>RmIuNmkx3zs8^vZ_?gV<4tKkySs{%O?!HOB5s2;04o{ex{N=3I~ZZW}zwFtj0 z4x&uXhidR-C#Sn&=v*NZT*k`af_0HUA_xlO8PLQOCe|nI@J>oZ(M|si=tc~ofFK1D zQ2R+Yl1e?xC@qc!+?97~2FPgcxW^H#fjPXN;synHAwTYB z6)AD%4-q{{F`QH<$06DS!g+K7%3{x7j4gDO>eDXdj1sY!gDiEJ@gohKJeZP}c&z3& zc+nEMB^BZ~cvSTTFXX~g25O)>RI3<&9&T27CzirP3Q1y)13_m}p25Yc&s)gtRH>A5 z0i4lrkmF*Ik9VNJO4ivF{U3-(9~<`&V{6qjSqi=RmfI2xi^aKYdKDx|D|J5&SnCc& z5_&q`h*Bv)YT2rCIy6h#FEKk-4YOJXl+Wz7o$Jtej`EtF-hmI27>P}Pc-0qjr>f>R_!*iML&#@vd3*&bsF z@2s|3ZiM%b;A^8^2FAZZ?G?SF!Z=~;0Bsu%64L}yCp}Pghpn8(Fe%&|kfDhfeb{iG z7jmMM2q1v*C|61Js>?y=IYihOogwJLgiK;E*#^a_hXx_cY7A1eN0gg~LIR!-Z9mf5 zP)HS?3YPIQT=U%d&az3Zn$X}lw3=LYat1!9MyM#Ig-!15&7)B)r_|D?ZAy$eYWZ@z zMqxD<>Q(=n$jP~eP+l!r7m}VNn5cb4>(XYs%G~fwXffBDVaMS}L!*vrnWu$Z#s$+1 zOm$NVuUCFB^@h;5VPaSe3I}XQekbE(kD6^&|63uqi31Hpzh?#is0?+zssJVS8tB>q zSZ0_g!c$DpOKl*d=Kba;|bAhxybF_i#rGeeFS9y0 zuzKg{P$;vx%p~kK+K+|Y);cmXNqp}_)d;x9ivc-|-eG7oP=EuWY%v@M5s+)K1uEUM z`Vw5(Fr-#xdh%d{<0l}S2HF#dvZM~^FX)$UhglibdeT9mR>@YSs2AjJRBg##5)nOO z&4X{LV=Z}zIY%?Al`CGc>Y5AR>5n@U)O8hCQ20C+r85KQ#=HV+YA1^?C**2V6_f|d zd2SWAD{|Jz8PyG@ROc}ZklTEwQF%ZCZdB*7EI4L|nVOZ~yW;a6Q>$rvKETn?$c&93 zz(giu`@7S#i-Uv&NzqLSmD*Usbi}4g1aT6NP{mV<{J4|)0BOYSlmy>&gamxbvXsH+ zQOgWP58zzw8QGU#xMnE(2+VM$Q*n?LnbP!oMfSAjX=1Y z6z9PX8$8T!(t^CC3k;7L51N9iAqK>!<+@Ykq3ZP00EXZw1qWb!CKt|f1P-zxOZK6m zAxqeTr~@t>%l_4U%TAvcT!ma54Pnn3N{yAcsDJE)WU-V;fkBY2OnqwF)eQYYZX9%S zzt7^GC{5H%(`E+ZxT*}$1HbB^7K?i18_fH(Ugf)x8#C!RF@ZKvKuYlmPk}tp$t6q+P8x&bn8aQ17&W;E;c2y<(|T-jjka| zPz=@jjaYR)&3CAFJzeA3%qoF7SbLAzE4i41${?7w&shki=K6B-EUi?6Q9d&}&#?&1 zpdt;21aqoKlMqW=L*jT)4ZEP8Tl;El^JM^fc3nJn4pahYCM4AXV|DW(j^x^=MRiMY z0!t(iuFKWd8sGL2Oy!LV%fLOXet?Fw)^7?4XL(64L1$%=I#$uc-j`>3qYJE%3(KLL zK=*)QF@_s1u)H+%5|}A6DKim~F&X>qqm0~IfJA4kn}c51pudNzs`Itje9^FB>9E@nn)EbNPa7~i&Rq)G7XO^JbpUdIWC zD5$pS-UjQHzNEB3RV%a_A#5RM+OSDQA=o^IS;M~h2w4qc!6_)|5{YeT^Ac4!=#U~4 znynITmNW@)bg2=embrd}3$^)V^h^dum;bzV^(z!7w(<>TGfM`%-N~y3GpAT#yqXi+ z=~>LqVH49*E?61G3NW6Oay=7594uHY6*J%Vgv!-*WM!d7E;X!jS1pm#LZ2?&w2J<* zd5-y+Vz#_TPcq4x4oynv8JSqz5gHUBQK^9-c4APMh^}ZG z@>mvn_T9iHQb-5tUhmMLX-PtyT5c>;Q>Tt#bov>IciV=7FXXI94N;#KFQaW11`P@d zzDt7I<)s=~346fW0$MyUs#9%Mu+U4#C3qnZCHa&G8z!pU>Q#`~(R8-_^qyI1s3Xs& zIgu6J>fWbi0J<4ry+I)m5GyUNzs|i+LrV!^=*kokjuKXi?ACH0>&WavEk`4|sVxN{ z#JDYya#mM2LXk#;Im{98FZrg1(YAGFcXia66K91hl0DE>c7oOrN-VKLQ@+YDV$eUb zM`hQ%80KzrrOCku6@9A=z~BV-5*$vh00iikh;WyxvNMx+Oj}WjL?uxN16?9FYlAbU zkV^x&nL`}_2K59jI%87L&6NN??d9|u8u@a>Yim9rCpJZ^mCHVrGWsEjVGr_o4Ku-B zsF2>{^)f=_kxF6~>I#q3ue)G)>jE(%D-| zB>Moi(yIO}&$sJZ1O@>k6I6t%Bj(HCeDg5KlRGD$8s<>7ci%!!U?Jv~>-*;1hGJ#w zzRYz3#e^kTw(B^$rmYJ=5zXD~_Jp4rS;jW`~Vvb1nFg zvCi6ycIqq@N3RIoIa**2GAoQd&}Yury@i~;2o#cRsGNdrS9w;U#+>jZD)EQxT2=gw zakC~spd_9xHaVmIQb)9tA?4`UtmZc?)W=m5Ss<8X9k=Wj6p27PBo&i2)xU?E9!Y-+ z*}1h-RVqbo=XVf%v84RL0WrvZP6tGm{_|VWC+5vyauk26=gr&`fAYK;K(D-}e5r9h z1lDu4k_R2DKxX^ZVlY$?QS_}E-Yn#dnd7m{u6EUDL0q*emXp{exHonlJLEZ9px^Qg zA%6o|)&_gr2T)HJn%*W@lw}ATe~|G;d%Wvdg8=mlMpgfwkY#D!`hFW+bRk!bEp+yt zN{%Ib^#p4;UUZmRwzA7NlsX6|TFV~XV3?q)=oNYgs@{qdL{E{kFoEC^flz4kjE6vr zDG(nq5gtK|L(S>q^v9h59W0;A%{>Vm;m8YmtX0m;^5|IHgBG*7Eb_*m$4zXy(34q$ zB~Qgv116XnrojqYoh#yV*O&p{`{*)6h(tYI=nm9?j-&^66>yxJC0&ReM@>m&jwf2l z*|+BP*;E**5UUMWsf)A}AduIm6h>mUv{gfoL-0Z>CYMZ1Y=rqQBY< z|A_)IS?+zGlH)bUMjDKmK~3{n z7K?Fug6#1+JDB8cd1eAbyq3*D{iqX?!V$a2`30VhU35K`Q*#FR2<%%_`pKFjh&GJ+ z=z5$9rwX{mu0tFLBE#(2AuN+Km{SY-IXxrFJkR!`g;4RS6=Z@56IJcO%KR}dV&SJw zb*asZ;10=J_|1n9Iv3?^QNXh+m8lgck+<|@Da46tmP~IA+-UGgN>Q%*GP{!7YWvio z8otp+DMQK2w@i_>V@7nsB=#I(Rn#X$&Nk6$HTLNP9CyhpUs-eL==BMewJppX1SJ#k z0uuVYaZ}zh^en_p{CN*yOF<6pL~4 zBb@VOk|mn}SRO_ft*WjxYnDGqww=bI69=LDU^1yPmt?=?t-FFVjx%xVN2U>^;$%( zI#;DSZ@VN8cdQG*axG(E4LKCP>rv%O2_u5iqIFZfa7v-K+=*f_u2M$2fzTi8n&9oJ zk&HzSM=g^{pEPv)EyYU~YQ%gns}fPUnUu`id-0Mi9Vn5^VL7QCn4MocL|x15iF#V2 zh>ts0D;2Y`C#6f1xL)Wxk%ikV*>{-0n$6D?AQXmqW9`dAZu?kWP2pn-MI;O^^5rQG zJ)yrAy)fS=APKe(lHF1ft0_4mColk$1TUt~x-`0n-tF?lK;jy;=PEw>D#wi(XLsTD zWO=w>p1}51%9-F0M9jpwbHR_3i$-8uRQW=U00_ixEU07KR^AUxihP#)j1}AYbLR71nQilvK)C4?ZTS<<(lEt8&O3RmK z>sFZ@Engouj#ub_w1ys9?fkLOAFVdpz*5NGO$I5qN;(U2ydC;LKi6mx(-|$QSRFF- z>W#Ib1KC2&(2Fwaij%1?y|KLg7%hi{g3djZN?@oI@!eLFxeybDfTt}bnIV6nL3>T+ zE-(_%TVu<9=A0H9qhoGcMe{;TYXKX!b&xMTRd9HTZG-+l2&6| z8sLcb$gD9iEbwO4jCFu3f~IWM*dwKw*y^5)Mle=KbXHRcHNX)wj?^gS+%T_n^h9W} ztDp?80m)>nF2!I_#}JcgceS{d(;j!7@}Lo!q6X;^CaHE-yR`>Q&U}w-HiB$Mi}EHK)SRY zg}sOageE=Ta*wm_LC+el*kBuyHSh6|qa*|6q6wTvZAX;+)3F;jY}twO80gu#q4$E| z-7S{z1aTaNeYNU;f+WxfA}}$OXl5>=iB?Zcj{uX#(Gv?()hk#OdaiX;52$%^*-&cJ zC2wGy#>g_0hJWh&1-vyhN-y!KZ#7*(1JGQ;M5(|sRl_X#9#d)L;QlRpO@KkDd^FJh zW20b3)x9NhQ$R{(b+5CH%z;u=m3jb+<;K~3Q$3UIX;?_MjhhN*Ec7Zcg)#=TcTR+a zp#C+Mx*6S|+WqFk9y?d}29;Il8fl9)rtReRrsE>>hgDGp&&pPTmX5g+*+^yAfye4? zC#ElDv6|^6YSm9=q_(KH{o;g>ChslgCu`_3k5PKH-Cbs{W<#K7SQY6a>f>%u={=fv z+ ztz~TyLt4ziS?OU+LFVaT0W-RJM!>f`uVrI3WYL?M*gJ3x zldErIP%~q9k&hvfjaVjePmGTe&^&p`>1%w%M^Kq_%(E(OWy5)B!Yf-1BXlpYzSN=W zHd1Efq_XD1^%!m;R@GSbb#wSw9*VVF8NpQv<{53>pkvBp$zM;*)Sjy7`9gi%(PyzT zRsi$GPB#^7@ay69!U3$w+BQvg(c~#Wr zZH6yixipUNtNG)70Kl4iSG)K+O+E7TBVq-uhJ0|fD~_S0v!P8LO&1o~1*A%q+KeMj>H zOpIL1!)Y~a2J_C;o68jHXW&Z64uyoDir>SG0Zwve<4Tm4O-084rZ$}6aB=?Pma}B_yJ`#(mV(_&Qi5j zJT`4%lnXg9C!^!WOQl+cAyE2A+7@}%Fcz)aQ9s(4sBu{@Z?ueHOWpE3IUecef#Tp; z?a;Tx%VSegMC7-{8rKN|rH&0)sG(R#FPZMutrI6qB+&htg>k*a|j;oqVYpfkuSgwoM zY)e3-Q?fl^1}Jyg5~BcrPP?H)=t3(u5JLe4p)gAAY}Fk!O*6CF`oYnt%;{2ClErfB zwauNJE;tnmtt#SAT3UH*lyI3^P-(2+BHd%&*Nv=DD7 zO2@`UWI)3fuSB6$qSH*irKUw;^jAH20!~EGtw&dd4pvk`KVDa)90*@i!JM8=1p^D- zB=0PPq8rR$7^E1CsTc6XsuH2D07IUR4QHdK4Rv5dueL61)Z}k^Z= zRD@HtSfWtCStL))EHj2RQ6|eTW*C^MVTJSByiR@G(cI+GaY;dU#JAD0lUbk!9~lFbJ0wQoZLAW&+|mgXg}v<>c{QpVTGV!s zqJmB+O0mM;qG*^JMxywnMMexD#6GtpoomQdM8phE`&wkg>5n@%IZps^p%Q|`8X&vf zZ(l0oS}-TZR=_nFiz74mkgQop8#_I+ors?*b|R_+Or<+2!N#%2Qg_pg{wRIprSD{~ zB1pFhVeJE8XDy}gim|FHC80p92@#9|C3R;nSvofKEg%DE0|3RTvDUO!V#)5FyxMmj z%)94I#J}1*;xTdrD)>&{D85ibzdF6?c%#Q(76fV^Sm&{H&CJ9so@pS?6xpYmxo%?f z_EzdHuR>1cvV`juy)LjaD{-RYhU~#=ZO5{KP2?+#*#y5&kM_8sURSXUaNIfE*J_-p zo@3JPc6{kc=|&nOy2AD9Gy)Tz<^ZA5RsFKiA9r4_(o@n;h!p4q%xqPKu1{iHEA)QJ z@Jc{dg0t3rF?YcCR~cTZB#4slGe$8mq-^d^tK>^>%pQe^n6+5%a8ig(v!!Pmp=d_g zmaIj>d|Am6751~xqEC^&KbsQ$p6kWf3biGb%cm%pD(55`(;JkU&Y@z*W@)9-9jRG& zph#n<$PE+w0L&_f&uJ{SxaD&9zFnj$PkzZuZ^O(qo-yh58xj{#|}1D(?5*V zx4MzVj(hmogn_Gq=R|*GT#a=GJ#W%rghUt*blPV za6}L1@m|G9BRTdg@gVHf%4&gDIwCX?k?BO$wB3T)E40dJ6F$%roy@?MB}2sCI0Uxo zv8&+CnXm zue6-P9bp@?QiLb_gryGah>+%J@=J@gsbgQEm1W4NxWkF5GqqS_!cK>gmB2c5HtZd= zW^g-Crf@U57IX3uj77G>s$(N}!gL{*mWr(>ztC0P2bKu-g3c&~;TRUj&(sq5e261D z`KmNMoQQp?o#YjTqPtIr#8fBCUrfwrGiA%_2aFI9rfl_fKcbVfHa+A{ixgArv{-ap zs5I26yFj}s!AFF?ax>CFQ1&TpYb#f%SulYGNeyR4#s%FR48_~Z<$I#P*mkqRZ9?=> zu(7jZ9WChe=40~0Nd;dVy~-Xu&wSUB^@BQVv=i-Sg=ZVU;t&KCG_2;%^8t>g@9e#E zU{IyMpsd{9k+Fv`Q{x&92Fku}tcemEhBh1xSM$(2{c-1N9SgN^Q%TzuMh_Zh$NB-u ziq5K#k9L4L6i~Mb#Rh9QSRa5He37f&1gY>tTQc~HQzkR)#20O$h=E1g6?HWSddFnG zI@GDq6G9KYdM;3>wktvG;Bn3aVn@#iUr{5f5^|+R!NxQ7xM~@}1hWc;mvFHABU;~Q zH0-h>#M)$R>%@%yNFTWXQyyBVAtZbNqK=>p(DAFo91G5Ca%4!Pc#fu*hq?2rlG(_~ zS6Vz}+F+j-;^U6K1o{v8i!rxJZQ*I2d*wOH@l-U~-5yqBBLNT_syWaL{c$&XspaDE zU^O(vbrX#hgc@0$ellR=$fW*`HVmx3g!G}R;DyB`}9eFmKnX^?snAvo`Z`c|;$(>mRS})YJ zVHDBp)w2)v8rZvW63%)+eZOdl6NzpRWq#4%L`qqeVHaxJsW93~=^}(hq-1;U9+j_b zxfyC1y%xkW#A6&;T6GzV9-cLK8PCO@n8*Q98$YPDpL}|TJ5pH;dB7}l0iCD%4fQxg zP4fw%rP+1P);(*hF~Qb6+&euH>pWaFeO=|@CN>5_Db*N|BH})w zo{9C~*YyG@P7k~_9eeUrohW4z+Q8g+`4e?$i~x`Yw#Xs4il+UvrK0pgeY9Xbln>SO zIAKjgMqwteC*Ai{erEIEsf>Uj1)z6HGNFnC;3jmWKDClY#Cn;y&$iA*fxnCb;ld;k^|f}$Cn zVXAag=b|wrRVCqD9#F>+HU7-50M2|=S!;&fYkIa1ppqy|wX)KG0-BGiYAr+nl}>g~ zvFb}B0=j4{7~0kB^M*3G%Lp`{J@?3>ckRvT=TZna44T~nMKs&ZmNgb8&x#OCRp^uG zkMvzLSngSFaByRXx9-Dcbd{>|G)vzl9&4p*Z&7&55L8JL72eU=+HHkf8gJ@h#rBq2 z5fg%}77LnD+Ka6n31X_*&`zKC`LN)hM%nFSr*fS_R{^n#B#z!Z{xL%J?BP!ZXuyOf z@p&~R!O4&GyQvf_{i&uK1uxf1_;sHM?6az^JzVIF`wH#=-*Pn|wU8f62UL$nLt^K% z*TB8Za8w`V)?Fc0-OVih(Uzy0gMBAZRqpQ-!GHR}w>xtj4&#Ij4k5-z_moV?QiS=} zZYYDdkgE-SD3t{mMo&E<8m&s;g^4X+JA{siB@_mqWmt`K7$IMS^z4EE(&-6J*6HS7#Vmp>?V9yr(z5 z0i4<+;x$chsqs7toJR+Qf4M#ugh*0CxDG~|S#Y%wXrCN{2I)GQ3AS4#jI z7WBqLFPT->Kq}A4Qsl@`6PW?2(4v8549JIqSa4j{W_EJcvPvagL_O#M90ua(ZrDu7Vbs-h{hXaRf&_qC3V5MIh6ML=mpw3D@+d64Cnt{RXc z7HpC6uLVEo2RW)bNa%Y7hRk-O?_L2M!&`NXnA8J9qBikFWFiAf#99&f(<{(w!U^7x z9(kT9(lPTgWFWv(w*^F3=ncR(d9SNEIEc=WLH0ry5ZySkJenCi*_xEKY@rqcc=qUn zxuM&s$eAv})CD>IZF2<*g*+JJx}M`_9p_?~W@*@ne2uJB4s>kY$5}>TtmOJ#^&k`?-yz_YJ&H$b;!@&gJXs@S$Fx0R+T?S=5MgZ z1I;nhd#c-cp+2JKJnBf69yu1xqE|T&#_ik>WAJRs)UuqBz`;^pwD6nqDKP>gLlE|k zTlSMA1bEAwGUJvlVBg7PMkaRjARYY)6*JIerpi3Z0E9jRUoQRJ9WqK-h9ZW|JrlWPt}R8A=EMkh4)qvGxR`jT^D2Q=rF1_ zt;J{)bEKi6ILZ{!ygG=mklWlNWnk-tLToIDmk~l3BO!!l3SEZ077q|707wWvL^A@A@Oz$JNHm?~0ZSI}Q8xl)jOYMlo`;#~&^0idQy+KcVOx4$mlipaG8P_zeYM)z}?v zNT~fNa7yEa$W)86srH>kvId3wLL<~tE!OAsN2;_z-CNn^pajG^S&3(Sbjxx=1HZ%qM<&F!CO_S2JK2U$rN~k8 zCc;X78iI1Z#-1hKA2*(0AQgEdw7m>K(-^DksShWD1jSq6_Mro~y)&IGDeE4f`=Iy? zTjPXkar$Khvt&jYrA!D=23Sw?#vL7mxbcV?&NL?PM-3?2K&%>(YE^)&=pnM$meKqK zyobSyObb1iC$@IsC`~t7icQa_Hn$>CV+g%h;pPju3|9GEieE9%ub5O5_t4KOabUR1 zS^2uMGywey-lC`G&-4LUl?GB$7LdQ_!F#Xk^?OI4h`d|XhhxGxO+Xb(u33&wecVA@ zHtg!kD$8hy=Ap6i212B_hz=Q<&?t;$!Mnc!ZC>c%uvS^P0z^S+A06~jzIunnjHnSk za%M#wIRxNPq3%5{BcP^)_rWf)#?kB40T#uqDATh$C?$3ft>7bz(wOn*!Er~d)zlIn z;Ye_OuSQ&%|?N$q#&BT5ilC~2*#lWjVaMjFK zAK|F8+^EQ9Cx{Bs41$#{&XErF{AK`V6KbVlNk|oqSDGKI2 zhQLoyII5cWLVw)3h5N=W^AzXiIn5HqMwz*EV0L+laD>(Grc>k@E$Wep*9$blyypB^l4!&~!wIW;vR z8nH?eI8olrz}MX?H`+TP#0D~p%}wBhg62Cn^$L9pwP_>XiJGZKP{@kfi^_YPSg_R& zJ^onE3#Z%+E5e-J60HHGeFUYjLS&Hr$hd0NZE z3Y>MB@`>kG7Dj2wP0wyh9X*W(jZaMYW0eDU7&?Nh=4$i-j^dWy$;^BAnZ3hGJq`eA zK$gG%8i)Pbpqg7*Bt5wh;LkbS?1m(}1_YQQa@oXOeYKdnl z8*Osk5AWC^I7Eyvqr|dc;IDvqWRX5&TmpSmGfG5{)M4*}Zm*x5M2%GiMu9nt&|lWm ztqKRrxVQ4Ll&Kx^QPuS|23rSt3x?LA1Izpckb)%Mj^0N*QzMGz(HEPUPgY#oO%7g> zA{s}%vtv&7AnnHs%O1wb%g0;kH7MH*TM>S+SE4{=cNJ;^3{}y)D-n{ZXY)K~aECCW zw0LK=Rl`KwSKf;=W3eXV1a7J6Ku&*TRVy%PJ5hlGnOwY6FR(*kA;dTWsY?H!;*#ce zW=WoEUDJj9h)M&{^cW{a&kOZL7@|B0R!E)i)D%572XL=18^1zTsro4vdO#M4rIat4 zrVKsGP^IXp7zb1hiKCU$=~1Ge;1R{}&?~f>*SU~0Dn!#sh!$9qC_d02)XK!pF}4eu zF#>>O%+`eR$ig&~aa+)gk>I0I4X;h7mP{VKER6&&Eeh5sHaFwcb_?E%dM;qIj1kuq zdmrJrbD-FX9_&>DHi^bV3eTCy@dPTY!Prvl``{xKWtFv9}wsF=Ysc?cy!3;4#>N z(M!AuAk&X*1&$t)GklN(O{t&)x(I~S!U;~znk{Usml}0hHH{m5ld&1(nYJv;I6%NL zkYTykD8W56e%Ceq&&iKFOX@@5&$j5~)wfj%GsxS1m?G5?>r;}5rZlt9EJ9(o0`%?b zu@JnxyxEJy+V>_F&ii9E7 zC!jCOf=V0w%Z2)AolOZ5QO$%CK+nlMlhVhtjt!7-W}!&6L}0F`Qf;1PRILN@vZC-6 zdd#~jTBihyJQ$1CjcSc`7$%l`GD|K6`TQmaPK?k=+6@tmWdQYO0P~s_;Kb;y8c@ZF zF^rxPqqA_Lm3>Gzvi#AKV_?>?WS z`~4h~z4rS><}3AR9@3&m13Zm{x8cbFcC7+8M1F*cu5~u8jL<=hkl}C*_t}! z#e#%#*YAwR1=E(Iu7!M^CRIQhv-d6VLh3N#Sj5Dv$YjAJMNTYsVMSIDJ!A-=2BGv3 zSPoKw3X6XzdNIt*-S+SVy!gZgnXeT^c;TTiPZi-~sBlxw_FTx>mx2d6m4qHtHh>!D zI$GXijD$iKO{${Hhz)~mo7%50&LA610YZmSPKn)ohStEIEnUhcM})7z7O#3a7jg@k1R4^-<78;v z-N5ao1W(p=?W{psRzSVkyzK?zY#nn_-CUw)t(w`jdE$Y_(z{wn7%18k>jGvrleu5; zv>{a8hJ7J@xwg z7!tN<_xP4AXTF+|wHP|$8)7|Ha-S_{v1lp=iROlf(@jE-fgVT0aRtDXteoQ1xS(@< zVogLk{Skp(6^TZz^@%c))m?dMo1JGH zj2;ChUIMNHMk>tWLpvctdF2a7E$(XL(}kQRFJf_o$YO+bVZV;5K7WY)NROM%L*Iyk zNdfiyd$uyJ+cIT<dMy3E44sH!!r1ZDW;c03J@OiDjo|Wfi*JfaW0Y@L~Xr@~zUs zEOZ#hX_TFAN~!|QFh;6&dZ9mBF4C~r>1tn40?lS7353pAtEFLu*3&$ZA4SBiM;)rs zR*i6EEBH}}0xzjz!_7?-qv&yj(j0I zM`xgiDe$QyRf!<9q2(|NGAKo+Ca0WUIuO_e0v@Vt(h5dP1?!}=L5%^O+YsqxCMeB7 zl=-U*sX~n|UFxh;f{n?`e2t~z`b0wtwX0@GiKLR-9eGyT&>VarUv(2gT~#l)-AN5& zL=y%ai*6-kDx$yz3NlJpRqU_|Kohkf1cLdO#@tYHVWw-5Cp9p(6-q2;LVZvW8^Yx3 z9h;q8NseqO!BBYX%-pN1U4__+=`%gPqzR3l9dCV6 z$*;zVijNgUouJ>AL<%d3JTQK-A%mrifUc_wI+Y9xWG~Xihg$VgyC(V1Es{J;tWON% zE}>!chD_~+mPO4b=D;Hel1jtqB}uy@>K)ZGEdohcBV1GH@rZ^F8)}-B0Z^q+xmO*$ zWhcM}D<;*IvSzVYxfWw!6GVeM^i6b{re$!yy0%pY01#a8+*zfjgBM-^-dXCFUNWlf z@g=(jJ+i0HrcPvq9AyB2yD5#x#-*vw(ud6Zt@P$W8Bp*`=qNgYS%-C~ckyw06oK>_ z*Q2YIy(lf|7w{Rl)A;Uf?y8-Dt0QR4Emje>J}8 z19*$U(iA~2+Q6QTGCKuWCgQC#xf}!#ap!o#vHLw8EG8yP4mJDJdvAUV5ErIFED3O*L;l&)MRyCe9z|l}BNoE8~^al2F za^xJe9@ejG?Y$51w9y@<$S`|rSGTlN(~p}<9caNe2QTb4vWw$kWMwmAED|tg%uG+gUnTHw2aL>sx;6L*iZFwqcVMb>ixuymDOY+k*lrF0`=Fn z@<*R0A_}cpC0(for07{qUZD#lTB2=ropBZNBYSWUGDS*LoZxdsbUQcOo=c zJKeB(9Xfe!a6=S&W`scz=p>w2%t@(XZSg{6trksntWjI+JAww_+j1a}qfKiTxesuJ zXPVK|&K+AkLW;aK1g{>td1h$D66hyYa1%;GU{?nr)`BBG!cno?q(V@DNu02!U*{FL zh-$QKN4CFh4P-b{M6%5@wnn0tELIWO%LpuazE57tEeb`@4=n29?r~VFYyy`?%k$zM zPi)W`aPL=p(d5|RyuQ%`AGsF^aYa=iupgW!R{I7(=l z1{5D9>|tb_)AY=_QJ6Gru_y|))mjj{fP%?zV;+e-ROUn=vMx^M?NJ+8VOPWvdQ04^ z##TjrL?I&R8wAsck1&#~nsSG(6;J}@RN;InNCvC%P6&9tJH#@;amSdf+Y<{|l{t{8 zXQ`FT$-Z5m*={P%z#!%)~F!B@Kf@9uVtukh)2_p1CWC z8h7wxO%^*nl6Pkcet12^t{S;MW}*Api_1VU+4KU24{2jG=xIz>!x9Vm5uk2H*=CQj zCGU)3qxG_lS-Znhy3+t}HO*JWtsteU!Jk5HysB?HhlYAUz?cwR5IrCKFcBw!+6-x= zp9$MsAsk5ZdIKG&CJ+Q?G?Yn^6_I$Plmdrp?tN?SWS0IR<|n@;6l7?dg8Hk-hB5?^ zlBz5Hgs_SnwWloGrjQ@C$;ZHnyxR8Mj68Sb7lds!>yDLE z%Mha#XF#_l;jXR2yRh5x3D$rLK7e|0F)1sSaITHU+#xzEfjCF?p_K9`+1494#s}ymZi}T_y2=pz!Sx@UY6afpYzJLHctJ%`g z%!uWtUgZllV9-!;mI9;Ck2V)#yP z!I6$#1)_7(y^U4uS=K{HfgRdg>tG<*6>I6hCv0X_wXM%W47hp0DNf!?fhBsnffX98 z_9jgkbAz&_Alwo&JTMHfhH63Th5Wb!s;`k(V)oQ8bp<1%Kmswb-_`*!wRAeUKWsu* zq5K?ky&|=fA9n;SF`>2f>JwgpvsD-3!#LBHm`z9QpdKWiZTim4|8$CQaQ zfMG*dQh37%t6RCyn(F8NpU{;~8Ezs1%?-xUwZgO6Uh3>=k)hYKonKIc^lI6bWq>35 zk18->RRGjUi6>cTIasMmp|#@O0mpZ0`5Ia@ym9DbExzdV$K8J6&(_fdOWm4w!%COR zOPXRYepi_}k5K;Dt)sm|KJ`Hf(3A00Vs^=5LQuzr1HToht0vB=i zTGh_AWwP8>ARXjuuRgX0Ft_#WWsl}YD~>|f47@Q4U@SARzJ_`CQM~3clKW=ZH{K<^ zKCx4?Yb0N59%pvrX74@HRg#D$+$O8iJ}HF)aVJ6z=qRcu;um_9T38$d!YEkw3V;hX zoIKZk&o-!5CX%g%Ti66BbZjB0df$MBSd5FuNruJHt1ZUhZ3D7aHZzITN(xRaC4${0 z(-R=2s$N~lRh5~Q7v)SfphNUm%j#NVuL>sSX76C1Gp|)nZxm+lwiWW|XrP-N!XRpC z-^^GVM5N$VhcQ4lbntf*nZUZ-LsOD29L`ZQ-h2qQAfdQrz3~5^vu{h197mG;_fzl! z5kkBO@D9cNjQbyDY5D-8YH|gX7TMitnQg!`+)2PpO&^EY%7h4mW@%lA8KGN-y(68{4(QTM7Q~ z+y3HGnu|%Y=Jnu9392svr@WNLam+N(avaq4$<6`)#^(+=#iy%L#&tVjUKYh2q z)%_q5(Hp32Xlek)7^tIZ6W4A9=y~}CTWkEG1O83Wl~Iu_lJhqYsNcwkkRBSla%P*? zEULfa9uw;UrQRc35+v`dpeh#|%?$v(5hxpZqLf&P9lBXF-JXQemPgK3)tgcQE zZy?$QD#?2%nC(O@>?!IO39#Rzsv(Sbf(}P4fTHF`clLsQ`K%^*NBHLO177XMmmdBl zeI_|-rfN_XkXp+4rk3ixXE}{Q9Kh*7JG4j+&!Kv6WN1Q5v=617(eh(LAtpnNO_sT` z&tmcPJ=yuv3F41Ex`;1#3yh4&7P0FJl`9C*oqeoX=c^Xj8(d5uP@G(GjBebkypj(w zFh_+kU5V_%yBJN>D@LclxlOEF+L1h~Y3`%6;Gs?-W`{V!s-L<0pf0Sb8rT!@7lRKX z3PluG%NlmBCB9KT?vO=&b&}n=OT%{bB9q4)F+cIQ+W%u@Dt=!janJRLJ0+SjjXywy z%+rpANciZ#v_4V>WK?lP`%sp>(fLpn5PX9}4=x|7lOrt^i5NOiJ_c84Fw~U183ob4 z34mHMYqeSoF@A)V?A(dKRZ##`W*l|F95YQ`+`$~O=rBa=U(K|G+#U|weD8gzN^iZ?DAaX-;ymx6Z2UFSH_mxOdA zj2>1mj@QzXOL3~>VL%?rgQU6h{kk$u_5|yQ-mH9GAe;|3z;%s27YmU@`^8>_^>Py7 z!9}{v_km;{%tnq@9v(LFB%;`U1A`vSMdm*h(*v8=G{L@ye5od=KO!&blxHQe*#qxu z{GTfVc~$;2xm$tRb^!nDzJ4yhfNA4{ZQmHsFAL|G)>V1wWoGU~ zMRJ0R7Vqj{=|+|TbrLHG)EoHbNd{{G;={rMmS;n+)7^$K7zJ*4{W&ZG43r+0jL;RE z!|Sh)`Zt^uz`KU|rNOj5R&<;_#x^|)2rs5A9`+QG( zF}DE;4{;DO5j1-#Akp4cU9BSty#bBoSi6c;MOd`kmR;`XM`M&}blhb}QPs#@PrBz# zCR-|bv;nO_mAljIg^IohZ?|}EsH;ftD8YAbQ|lUr=Va0cAiv~zKFcWvJgjv+b2F6lr!tbvK%ea(>S zGd1>9WitVIN#WJ{3mhz~9uk_c!($b(lJP?0tj-y77Ucxf?nTqoXtI`f#IydwDMezT zOlatpM5g1t8!rh%&TWSw3IYxi?yr#CqumE#aLIDia^>>T4Is_mIt#WEjge|V2wY+u z-@Ag5A-)wW1^?`|@9f;*0_@0^M518&b4u}XZ^sj?R5I~TKvlHwE_kQn9*#{U7+DoN zULS|HAlUG4^fjzbSSl72cWOh!>p2n>|7?N3#hfY#g$|s*bh?a1rb60GCll_rq=Rd{*(w^Z z>qm{vBx^l+c72Z_)pXdF_S*a)N0Ud)kFD%dV5;ThM}G}J$h;hae=j1OSfzMt3m7UC zS_pvT%#ekaH*+3^C*l!Ui!0&sk0S2#zA}c#*hTJwQh2ln~Ji3ttKH@y;6e@G*&Cw+d z=GN|fbNv;s%Mg98T3=awG{$x^#~TNmvzRvxygD{{J;lZ*<8`Tg(|TIV6F7QOmQQ(| zi-!x+1TDQ{q?gfuLjlGxv@b!EYfboEPv6Tg9?Es5X@@`_CMG7Xgqc6NKp}$d#gA27 z&6XNj>a%Kvy~FjP8p9Z~ERuuFBw`k~X#a!XKtA zHdisBLaF{9cq4RbIl{!SFzQd%Kb;p~SWK+pP_G7UGTV(ka%k#&>Csl7Inoy&g}c52*z z?0n>rT~jy8#G9a9-2aa#!2^+@$cWExm`HOqLM&NGPOK19dq%`(@sQHNAlMz92$==s zbi~ye!|ylOz87B~A%Edqfh&HbIr^SVk&Lje5^;5H*LEg|Ec3L0tYM#>GrQ8b8R|tEvzpc=wx+ zvoZ`_ay=>Afy`&%?3l8h^}K9ufvlM++euIh@@4)d+o_iA(6|;pzvn47Bls5jc&Tqz zZ?ZSIJ`=gh*~V7>=&1?ftqfzUu!Ao<>5O7vPetlG7WT6R-(_Kzzlhj?5LoOzRP4eW zyo{(SI9v?Twz}jLZ#);C_1A|y+aL6ZqJMRXDIULt-l$?h{hzz19`}iU!g2Fln?gTp zuMdIzn0fGyI(Mt3?Otay_u2po$+WHT%iRNp6V+#hW_kHVADSeQHVwq^RPihuo2CD- z9Jp`t`|79LWpEkboTGW}RADTO0c~+H*u=>Y)s24;qEQz~A_5VI#aWB(#m~Cb+a|hpvdsWZGxoJ5# z&9VvzU^qq|_rD<~>)HMxV#z^BmS0#NJ?k%OgbzJub$X_;jmnSd5su6p$RkV$5J{V8 zj_0uBuO&J?m&4Rc4!Mst@4gEhiQUM78?5U?@Y{<`kHV~0Sg#P*)d}MDq${y&C`JRw zSZeCy$buU*0xJ0XNP!Tfs+J^VA4{t8vmBh^?hwB+gVuN@h9E_T>WQWjp`#HUyve05 zo-CR)p6f7rufINDkDs^5JP{1M>$>Uigt{H$j+?gs_<4cVui_FfFJF4qZzGK znFZKtcFGHt0d}CEf|l)Qs~sCu#i0^&=4VQwAsX`_0O_f;LW(~gnEngR*&GEBMgUKY zmob7TyE`>POrvtB75-m`+VPIc%I6MY{iVuI>uIA-^;7PfWV)jX+0>{3Q1u|yBF7cJ zH;W4oI3Tj7U1RfeHEcDrgoV5d`tN#{RQ&H$cr6TY$ax=;D6TQr&!R*(P!GhaUbW%gz-2DBye zP!LioQ_ATKqD;?TZwuxr1EWA*N`ge8Cz`=91z= zqbaVO?&UcY-~f)j{9EnLTpyudLy&l}bSF^x&fIECcXAojke(3{eJE`Vj9M|DfTyl6 z#<>A?ENlto^1&v?nv3MCF+BAZTAc>qht?HPB*{G~qpL#R>nXnbdgP+aCz9k|T-Kk* zM4|xFr_^6Q9*}En&UIS-$zFebI5ztE*jo1P6%Bi>T#+`4W*d6=->!Xom}P+pMf=8N$$K>2N{6D}GfJ z-*8Spd6FT(J$MN;auIKIRa<)l#s(2)icEQZ2MXe7j~8>NWa@y07%5DF3AL_PaWji@ zN%GYOluV^*IsjtJnBV|?bPEif$RQS z#z6Whh?~o=Sc{qU%A~Pj(0C{nL1a?Qe`IM6-!r~YJlk~F(2iCG3 zq75o^V^n)>K&7A1QV{J9MDKc z#5~mux+qyXr-W-@@7dt`h}ln=i{~;pKf6y5f_h^I@&Zu5&=63}+oADC!YuT~OrR*V zdDy=Kd|*!5_#M!+m5PW?6DxSEh3e+drpCP!ibxTou0s% z_{ULVOvOhl21F;LdCtwm*kzZj^>iV`X^fc_T_xs(t=L(!ux;b`b(bq0C?_=dikDyP z>o)`3ooX?u+bBKR<=>^iLQ%pe-=^&O;RUMY2#5(@e9QdxXEjWa`4SbUy`Q4Vp%Y~Q zyIPq_f;;&(x%0e)_3&0+#e2;4LNICLKDYf^^F7jdqK(l$Jpd3g zH8uXS}+?K;-uL4P;9GWVsyV;)^UFX9@MBxISVA@r~syd>F}0AibzRCLwdgk2L`M*liN6BGW!z5Patb z*GJ4VVyE(>i%|#wYq33XVA9JQsoA#igejoVP*7)cHOU$zY->A;Nd8*@{*SXpzW*k*B+)&oii#SLcaOTKFaqC*=`>c=B_E2ei zZzQ^J&&F}9mA+%BG2W5llr6Z8=2(vj(ch(DP3z(^>5kunpBw~GJc(&vdMyKFHu$3cL#*DD#B{f&a zcP%}F+DjqTs7Znprt^auV+2U$gM2-<;^rlpq`bmXy~D*6vn00u?tZ)$MaLDVtZEk1 zGTfR#tOi3D*v}40hA12>&YCv}mOwz*?L4=Cfag`hYdgP-YGl{cliHAjNaL{hV+TL` zK3zG^Ssq|oetlf9K`b`(snY9JJ1>4ij1664urJDZ2$CHPwwg_lTu&Fh1>mm9HcpP0 z4O^8d4Rtyavk>s_mR~Ds7aX1#kboHV;;)un>!874R6yjg;Sk15s%oD6U8jXgGRhX^ zK)h z!HGFh0cP69d&Dt$hO4jJJ6xm{$-^5$4-k$|VXLA+qWpx7e2f2muE+{F(ZC;YTZZOB z6yC*$&m96e7yI{&`a-g9lGi4=nB-q1+3Y*g9MW@ZWPi9Qyer<1H;CeZURSs@^6yWc zykY>k?|{PQms9jCnS=KAJ}3%<5#Mo-#~m6N@=mc-C;IB>AR7ViojK z9pUS@d9H?*O;OmxU>~eob$;`8KAIYvn9A}Dx&Orn^mE|Al8d&aWoDlt{MU+Kb4(3g zk?gDg*6rO5b8zl}gxJKVF!QsXFKX;({q^B+;pby(A&>s_t-Hq7EV=B#aERwm7z{e; zL4n4SwfC$>mYr~bQ@qglx`*W%U5>4&I9rKM=*;IY&g~)P(mUGiv%~d)oP<@-L%cmA zP=>$yWZpKm%oVC7j#!!7)Hm|*%V;9Ltf3gpmuY zd$|(IV4Oc=lwX}k7D)Fod6daDM30?mx+34dq3y>GD!3;{-}@Gz&r1*0XEmN{ zJk?flbzve9pbRo0Dd*_@_O2+^2EZVlt_73V6cb*P!2H8 z?u^QE;C?WLBHs2ch3t#A)f-$NasGK7kcZytbQY@zz#c#jdfm(}UAk6Mk=o-`T`h&I>jfWR(K1Q;h>zJp%Nv zuN<k*LHy8l{7O(uhtV5(h}pGI9exz*<7(@ccCp}I@5KafK}9# zI)A9>Gm&iqtwh1uO$z#L5cox@x;)CB)v#J6PoygI7G90`d7+9pexD|wOc%g!f`0j> z#nJNO)$;1=!+-40M__b(s-3ZhJ9n4aHR!uZ*@c1VB+VOxW2OoG@{ZIF;u2;T0x8X* zqnKu8ih-zsYQc<4WC9n~d?}0UZ5q>(t)U&FcaAB-aevl7G!WK(-Sk5j$tk|?j+Y)c z!7-839pxnEtHrC(mp8{;e^K)eFn!or4}hE|359@FzVHHN85(rwG-VkXNWmJLf)aY+2vM+|R|x zuQ@%Ukqt>v{q>~WpOSz_s8Vlv_USd4?*VThQFU3}&-D;p$uNJPqW(jU5kSx>y2_oN zbDkz8T6%?50OB!LhrqU%O|Z#E9{_u~zFb8c{9m0^Tq+4pcI0outnlYl(nvlnoIS4Xj}^E1yNteEHH3&=wvKNXz8`Ybg| zu>uX!{jZB}3Dmqdq){w~J&L?4s6E1=C>mBo8L$e;a%4TilNz}n8jIrR4Uu7kka_hT zdjpg}eY#d`oUr0iVVkwdH+x2tpWy(NX8qOiv!2ixzHyQ8>MQhKr!vT8Nqu~y45E951Vw0+v+{$Q`~^hFe0cUbf`;#x3STu{TgqY8 z*Rt$+RwH0VW49*vjADVv(SBX#2SqmzOhB`W;=kIBbj;90G4u63bqBx{uL zML?mqEa<)X`uH+M`UXTncsZ0>-DL<~dK23`#*1yjKv6IqX;Y`Sj-z@upwlmz_2R_c zmt)d^8yzUmjiPTk5+iaNyB_H11jMN|VQUF}X#+wN$sCc`=`QqevEmRTk1UR?uEglT zagJVvnnNENjoPsqVW?4S0AS_lKHP9riLpkPpu-iz$nOsGvu{DIu`Zs+y(k9QqMLRxN+H=+} zFU99``320Jx8W3@r|xdT>hp0liu_twMw0Lase1>=77Q8k4^|bA*N0PC7P0HzNSE-v z73p7MMNsjkNl-}TM2=;V=Vz1rgXJJd>zN-&A7@~Me58x{i*_6ME-h2D8twoAq5M%E zcmPjGd4K~?@E=!qlXtj2R@pEN9M@xOth6UD^Jm(HKeKl!NYUx+Ak%0Tzk(RO0ifi= ze96#};$dq_f)P#N=gC})Y{`;&Arocdecs9|+Jsl53;+l)@g*qAIbUvaZ4YA-Qe!~3 z=uq2(fyW_-DSAubN2^h75#l*F8#>0HpT(CT8CU|H+Ms5pys*+M4EGGg&}&bHxm=}m zk}&t^>e!|jy4!_?OwqVp1`Aq-u%od@nY6@up4G_V3~WcEWZXkpMSD=@6e%YuWeZ~s zz{Z*%#9K%O7QF+Pl16PHN#m1=jafuZQ-XDnUl|mQ|3hN5YA0ScpaU3UuLb^pr7GA6%HgofY^h~^eeIAo-gR~pZFlrA7btdn)U!}XCU;O8?L zuN0u;X8>YIukia?BS|FUPAk4~vEcmC%;Q~_*K>pGqo>pyJ1QCc*~khO3mZ>4MoO|< z)M%hUA%q#tGG*^s&)`IRMyLWRQzaDJHBAcWuRJ2OsSpbxPR;{x9B)v*x%&DPxs*(V z9Oov{`*8^7tIFsKVRa@Go0qn#7}f(zo5#7FqYK$t53r?U zZ;cV-^QSM_ zvP=`t;6F?ZnXJ*8RBuKoZ<$S0IK)f$Vvg@pZl?`+aH84+ypWu8Kt*GA0>O6`Ee7pZ z?MY`B^zTE&`|;-Nnj2gnoq9gINXj0QdOvh_<$ey=1*xNJ_24-MAqVT1w9cTL8(bez z^;z?AgngbW#5m(6qi}%6m}?7?n4%RS1dN}D*@_3)U#oe6Hz4udGQ(4Ig62OT)qw>T zoCDoof*5X6%Ihf7CAq9Q=LXkD|LC93)bR5ZBO0?88xT@2+)Chi19Y$ZzX3lRkbWJ>9XYt7jb3WFejY&j% zOrH+WWKEc3EnB-f zDzMwgk8sQ}$(dl~P(vGuI%TI}{T?+s`#=*Rm+}U!1}T{%r+9-2!W@?EkevAg$7gcS z6B3h}2vF!pMDY-fX@wAY15JX^CxS(k7%(5o& z>g(fThKf>-?Wf&SQOHCqxT5Z7G29t2YlMtF9D}m*4@Hj7BzGtMq{ z)q>7ouX(&kxX^NHq!o{+UY}xNcI>VLAP*H#37pm+Ww1 zpxT^#K}@yK$UNsbX?Jor>GvguMSxh#3FEVzwk1H-)11l1ow9~F`X#0*0^z>l5fwK?K$-)_c!*0yl^>0B7kywk z!GE?utzB%l6qGSm`uBF|XiT0XMP%y#a+vGD^cexb;O3>5b965U7dtcSQd4wEvssV% zV!V64MmA$0nceag2-6{R%9}Z_OERN&xIQKW{y@dT;Y3KU(9MdC8^3oWoiIVd2bEAcYU7hhLEFoQ8O>4SM1z8ip=t~oF!f>eta%Gmfcs1)N^&-f?SR0VmqFqL zrepCo&>2AF1`oM1*-fkInAcxYdBzha&P8A+Sr~r2Zj7=ebv@Rm|0V;;)*m?^c^L^Ns_`mlJZQb!nANH>Y3{?Zr>?56pvioV;3g4;~k0QSx$>2cX+nX0Z=lwUo4WA4tAC)An-ww zHZY-hwg+dpYtZ#s&+(1NgGPknJ;5j`xOqIZ3;8;cqL>P~4V-u2g$g$3+K1v7mD#s>KnPPB-qs_9Kzql)Y8u=k*uPrP;cl{(Q-L$s`0N3!VGj zOx`El!TRSuKcnstf+)t`YB=Zh@kG~Ogf~?k!FnV;NvYYk9LslYejg_cA(tpL!@ukP zhL#MpxfsPg-e77}e@M&b2^}y5b@{bX#GDbadFnpwOc9Nf_IRaY_HqJ4D(rU^_E}~M zKd|Rwy+fR!o_o-m+c2>)o^*%=4g?^*NW-2xAP7W?603=+Bg}e~zZ8gl-wsM%fqnU4 z*~9+=YZnh5R;QLXK-p8>vli#e$9AZMI26Hwd60-6KWaO74onUbPEM9+>*S)5y#XZpJRQ*iv#OnBe6idiaG;JR)Smf7G%2QH349CO%z*t@ zt%R3f9}Vb#;4@gk)$AW}0|AME8aJjKV{`{?_vis%qulvIvNeFZF2;_>nj99I*h zyyJzN%Cmz&US1Cx&+Bd?MJzs?eky%bCZQukcF4g71R`8Cm^ZIELUTDh5tuz9R?{!q z3Z~c60`fjCQ7dH%me^iaeHr4_IsJB4;IG_=uT7b@p_WR;e#tw3PFN$2JZ*OF(^Nr3PX-p&TC`U@6!y9Eq z3ARjvI+wFCFTXxnUYrs-ks9Qx03OHqn==S#b3g zkigX~ALhH1lfpU0wZKdc{fnmZre3VTA8&Awv1~xsgKV*)Kw{;!lkImT%i0J-L7XF1&Shv{Fsaz1)*2Lu4~%3mcE!K? zYi(pVmus?)=XWT+h*MWqeg{K-?nZ*~<2GXuiN)*j(pS=fUIbLk4X%$! z>^~oi>N%Fd@p(S+6vsh*R*2L~c%lWh5YHipwbm*uTSYCuB0wlltIs4rE$c@WxD;Q&eK)wr@luSIk+jzdmNx;Bg{5 z1%_~}0_?5veIz9~Mc8X+uS)Dvpx_&eiDxyb@2oXkKqK3f&6G_hWIS3+Sn=-+L<^4o zzM1f=0qv40to4d7Kx>YlYPDu5DL&a_r zC^o0$j^adkL5`kV2%+CuWHJR6tWlPFnw66`aj=aDg(KQFYcB#$l{@Vkl6W?V7doje zl_-RODt>bYVe=%}iO@$lZv|{D<%K_(O7(SKgg3Z8>gzG!>Kg9NkB;s5I-{!w8!9ft zQw+|7Vdf{Vi?4O4;#__qaPFKsZT_XF;Jvtebc&Fpvd0P3Y3d)nqA_b&u!z~S0%5$x z^_iT5ALPuWiCZ5s!FOnu3^rOATqkA<;li`;D4#bmUsn`m?-3Mbq}<>Ci+_k!lZhW& z>bdI<_^Eu-OK7Mv2c4WEAX{=LcXlaseU_6QG;GAqJm-E&E`IKkxfVqJmJ^P!82IfZ zG#2=6v5s1N=3IOc`N5ZKgMYN4ge3-prti>u_l=6bcYt<-w5pe7%0$lr50p@?%L z$2cHQqdw8$a2~QVPasTB(n)Rt&9}^2$Ai5u$GCF?J9SuL^Iv^ z$goC-=y7mFj|a1m3BDei&kf?6PETh%D1VI2ioHmAQukf53TWC=ldR%^V46tVlAiD^ zzCOf#e{fnJ)=GaFXfroK;UK@HO4hx`&jVV){>J9w?^-2Ea>)Tg8-*99%kqI{KqpMA z0XVU7*P|Kr;j-kLi}5|TjqN`RzX<)sV0W|A``}d+bnJY{gaFQM8ZF?kdy&tj$9q4?T2Rd^Ll=n~W% z`07I-PIu zgt!|7(O`r#j=k&Dh=(5iD!I%{eyDc1K9e}kzcIt}@&51Qo-oZCEKR!EM!0B6oWl%F zy8t`GSoKB9v6fRC4?XLcbFOUbrAQK{{*2ZsHLw`8o20xqU|emJ+-BLnXfci~6WwVg zmNa&O`UhuZA^s6rz55}WO+flo21#nOYSz3OQ!e^Tm&yYKx03<9dLfEE92yq@{Vx05;2a=As`4x$H}ueJmzvuxajm9fA@?4;Rhh66cSycK9_kbH^%* z=(a}#-avIh^6DNx3$RD4sg~pbZ9oG=8Y&=u6=!7U6v!$su+})d4O>2RO=*GEq=O1#e}hzYIMX>rvU z9clUNOI1{TJgy+oExdhw4@HsUKs-$q59M%#!%aSsF37MUveVy*Mdo5qebP)_rKtr( zxR#_zD{|5#FP^v5Pdc0zW{-gH2hQ*^^7dJOeay8(t%JWC>}JyTio3Y)(uc-eIQxKE zgJh(tP3`ou+|z2&)v2zX8(HKq z8V)2?wlrw+38`V27!5F!BV|PpjcFCr_yw3ZH@H560RiTjsUKZ#HQPAJ$%DQYK_*C4 zekERp^J3+{dUYdvJtUP`XcAOMw6i}5?eN=-56);#YkU{?KL_G>0%*EdwRXiz^m2bL zPpZyIUTj4zxLWf2X3X@O3{p}q`RQCZqI=c2JgZsF<3)1ca#p=XZd)4D$Pti|8+*g} z|I*~2;_NtO0<+=XbTJ1>7b#OXhxWAHDzv;54^yBt-?Fu+JO9>c)E{c>+&go@@5i{2zqMJhw7mYcJf`wE7w`->{?N(4yuB?` zr?Yno-Y8+EtTvn};t*M_t#O|nu8$d}|z!7b3k(Ir16J;+CLj?8$xPC>aG+|`f z6>9_4d5V>Z&WD*)_jVYykj;Y56j$(lCx+$=ejTP-qpp_vCaqtsxkEf=r~XKBz*Sb` z{>2b=j9;Zkt>Gq>;atyOM5<3Ql$TNvt-gSh@_U}Lw$uD3@uuU&3LSBDFh|ryh@RyD zRegx=(p3ZF)fa!&A!aW}s8nXds>32ajmdLF_EkVV3~uJ2D5~l;x-=Klo#bT9tA1S& z(1>ZN1uvl4wj8QR$&jI&X`7{J*59poOx^*RW8wlpg39V6CW2DM9@3%5qjiwGwTF#m z1%yY{ASqb+)x2Xazvz930sv!Y4jzi#9kS;gEnX{Bw9~vju29^;*6Um7xh!gb*|#6t zmsx?l(E;{I>n{;13Ljd>pV^*iVgUz~jWcw||Fc$!=INT&PdCWP`43=LG6rKXXfEoH z^ssG`T*WzmARlUf!5n**3!YZi2Hh<=3gE1Zw6O~HTxoE`1=+Uq>|%5M^@=(_S6^hS zlVobI5@^2B9v(9QOb}*#v#8`eySmdY zmVv^OM2VcU)KY1=;5?2kXLKOoee$Tu8Un0F?JL;6t7ozNlR zCWqU8rBM`tq4NStoa<5OouoA+1vbY@`LAk z%^&z^s}WJz)1`6dTPt$Dg)3!cZA9k7K$1F+3b2$%dIr5uzaN_&hNDtJY_#_Ar zQ+IKws%A_Ojof9Eh)}Eg(mRNvNB?DymtrdpP({!}14Xme1M=wId0TYIrDT{|qcxS< zJ6u$p0B^9Pn-tbWZbMZ=98<%l+M%p$Q$)}HEnIyWSCrO<>T?Twp=62a)xW{XUsc~% zlBN2=13a=~ajpMBj~B#s4eBKSTlF$tuLug<9W71T`n}m{+XQ;#La-CufC#uOouNH2 zV~kTIo4CI=ne_VWqvQ9-dT0Cmkb+_A2khTN9TBH0yGMH2>Pe-HWtosPmy=wbA0s?B zGWhyKT%(X8M$Z1i=mqRnlp~>YqImd!!RUcE!J%HJTSSy{ViwU2Lo*t5fR#B1TlJBLPF1K94pnpCXW}IV~}E%^t<1ED>)Gm^X>zG z_Mp@|GnF*X^R*X>m*c9=YAkg8i$T_voIvC)N%nkBp@hb~ntr1SevytjbrSI`p}5xQ z`R4=Ee%AcwraaJSb|Enj@>9o9gq{kP)-Q^7`vz7>ROJona=YPM^L=Sy9GZidiK|$3b23AqWBDatfry z@v)xKLxaMPbvH>-WcU_i=U6}8ae1hAqG+ey?GM@xXOwDR`28&u?~w936TDa zLTs+L=7=046=HZ+r2|qSR*v+G@dMAS#K})o60%)yJDk5TiCb4JY+X#6kS z|KWukXZ)1bWu*HbRK{3!+E{?5`#}-Dclc&5TqBZS1dQ{b*QRNlcWG5>~4dI zM0Uh|p~b`JUFrp-7%S@N>dLWl3x(x z`NlMAuJ=c4!pKKBwxR%NT9_(*et?{M&OEI9C!(L|W}Wy_Z>0_B$;JvOPH+AvxL<7~ z-%5ORkn0;aW0p;=WNjkfz0$Qk>#0>BqszKB28i&MoWi!w*-%{IsUayTGTTiBJ($h5 zMueUX@LhNF_Te*WGAM72-GeaViwEY^$|<0dQV`zG;9vuEK`waxE%F_J@*53S!@0X(N^l?8yzb3U~ z3K3U-v)5mc1(4`-5_#9l<-j|RGN$S}19l_gDTlZ?zwQU}Kn=7)DZCsFGh0V`*6~^- z(fe?6<9BMi!1LtmLL4k>)M9S-20l-}E{o1&Q*pzh4yn`OCmTR-gF{}JQ_;L#4#K@gNB}HEC4(V{ z#-Y!L$99B9TbXwZcsP{q_6&Qq+vi2R7)q(LP9@j%pfi<0ltg@TFR?G6${ z$FxoAlCRhm>&YA7#7;9TsR$~F?Ql2o`u~|e9W5&5bn@61Ws&2%M&f1M>`M$xTL2@N z*jF`YF}7B zjcicAr$-0vQgjO9Wmso}&J8%3qe4?IE<8SEi4tHarzR(Q$QspIPO$DQu<5l7(c_+_ zfKlruS80w;rsXe=Pl+0BBcE9olmp!&AL*0QiSR?foGPu8GUs}r>4h%V_eLkfDigtw zIVSj-p#e1ly)c4^p>M+HQoR24j*T?eUlcwS4}R&hOjMpycrlVnJHQo>DbCL9F)(wjo;S+B8Rm-d~7 z7$7k@)VUCAFmf*$!wv#(JY&RnL6-co_MFQ(fIUURVlF6n0uF*zIK*%tIfqoDRdDWI z$)#Mkk^dS}DQix24^O@^0I1RAv-$ea8P$20(x z(pZsHyqt2k(>ixRxYb^8%J+!oHS?MXbAYmAzsI<<-|m07F#OgG?*P1U4!er|B>!VnHn@zYaIU$m(mNgB9ez`ebi$eI^I= zhlwjFePg>S4-a=W^zbAfA;H`TKATBXeNdR%n`7kJB1HCqWbX|*U~~axDRd$oIpgVtYNt2_om3tDS2mtC|QuU_$Wyq+VuQ?{BceufVe|50Em z!&)HsvrgZ5ky|wMAeU+RV$BUMgujYJxr^Ihs{drLti%_lW&Muw5a?eUlzBvd0FMue zP?q3`b|9lt=Cl#Yf%)^j8SZDxWANE>;|XULem2Tnz>fNGsZf>!ximj}7$HC&Ncr{A zQyl}ABMHMt3_W%bhUsw;M@nMO-}3yNi!W+}@EL`j9inZLL;e`Yn#cKw8$0|$&<7B1 zuww9)y0IVpP{vM_DXb`F{uddme~%sfz6Rf$DmSeRFxjk3OJG+LCGT*FO#nV;Hj*6Q zy!@V|&;6OkLr97PMO+RCje(CKlNTwkVr{u{#4I*Yr*c#V7P2qA4PxlKboCW zlKeO}Q6L|0tbhKh**SNcdUvt@G3=xDPi~S}!WsrfI3DPS^*bg?>p{`8-V#e+NF3&a z=Va)BgQBB#YS4nJac0tW(Rk2`Pg1fai$SX+YdFn_;nb#eC?I@Aq&gQ1ypj8scCsJI z3wS0nlzMBY*k=pb(6AV4cG!u{GJWzz0Rn;Hpo4mvX=Fr08vochI?)v^g-XAo$f%qn z4#Mc+p+DQbTKvrQq^#74KgK4^Ymi=HP5@Sqx3_R5c0SlHA;6(1bImB?$KHtwwP?(l zIeahzjtWspM3z5xbKo#$dHA`7*h>HJ$Bx}pFNsc*VYNt3s|_LJeJ*6*t*L0w2G>Ue z@}G}gDmmaU&KD6C4T=njh*DFI4S0|i0_S%%*xUdJ^Ul9o1WkU|WB{Tm-R0z7XDmX= z{S=iK1@EB7Lc*BkNu~|1Pq%ApT$lt|hZGi5u!Fvxhyel>(lAzmp(G>(#v7L61Fe_% zfbTQba$J_gWhgVSs0|^WVa`wQX@c(J(x*3!?YY_#K$|RdN&u7WTapOd_==+J1o0T} zm4Iooaf_hGB`h>IP^m3LUP(0t=u@G8@5kD2fR@z4a4k2Amt~V@9k2xxE477pxO7~h z7@1aiF&mf?Oc$P61C$;4fY2}DCI!(0E>pmHR`-UNUmugHem=b4e~`JRFk1UDerI1B zp_OQG=}pqGe_PWudAHp%ihPALO&5MS86GeeW(>!ZGb zN#=6S2HCwkLlXgsc(Fp%DJB>aWm*XgHW8hv$PM01v9~B_)yaB?3t3o+PO{ncK$JR3 z_Z9_9_|D-^O!9NX$V&G(Indz}oR;n_&vINGW3zdzglfZ73&1c$J{xuF(I2F7u#c^@ z7!8-ojDu|XM?dRvU+Vl0i)4K8k>(NVamM$305QEhdhY};GlThhzvH@DqWRByG1X~; zU^xGIz2hGsZ9a``TV#RV*G}3Tw8vrwltqgvRW`vOYr zxs%{PF#G`1flum+;o#M(2`lMQjC?yxb@1!+i<;JB(01Za)~|tY?Y?WUdihdoH9mH? z(zwfwA&P6D%BLxo^ zm$W5qfrq==xxd5%hEY!{8TBm#^jZr;6c;g*_ve3MsHArxt{oxE{{adB_iyZLk^(`nJoPpBeM>C7ALge6J2{ zFQ>%1i-JhH!H|=jN$8-ccf!3<9*UwKlbcP)5b55l5B1{fGo~Q4%L44)2*(-u=d6P$ zVW%ny-TUy%8%AqPw_aN$Jv(R;%di5?GpV{@_FC$XNfH?b<;0`GwBf`=A5nANn5`aZ zZ*cu0Hzr>1CiM>WbS(C%1qfW|K&_3o_1Gq1bD|C_aNAp$?8#!6jVr7Y@Bd{NZC>Qs zEEIANh1bE7Ktct}9sL!os(tSu6OuG(LO8l&GZmm=7p913`o6dQZobM+iUXx0e8M^` zebSPl_H00aol}eb{v7yt=Bq{`yRh_YOZa zzS*d}%vT0l)99DjjwyH1ltm*>4V+eFDX)*RH*-ki;SWj0oZwh`{(V%2Wds`_cM4wE zdWnI9vBnyznd>juF=EPp7$A#56rCDlyg{Jm?&@$c$3*qMxJfEO9VCt_LR;1eVRJnQ zG*#Df5{)|cl9j+I3Sy=mXN>m}pc0eT@H)UDvcG`3pB*G=BGfHD-4ETVn`D~?yX#rx z)6imOPo8ThywA@L{Ns&HgVyW9aF}&B!tc+f{FA>l@8%W_VeYk0Tur1s7*!U&h5ukOodf?s$l43$&S1f`dYiiPMhqcP&iS4%T}Ymzr#zK_sVuFCGdW zqvK#^Xea|aQ>`UiwJwX}t2GbNI{@Y%JjpDn{b5#pwlI}2;dki=?LmVpbY|;P5gCt8 zB^biO%~yzxw@|YIBl2M27M8w>Ih>Gw94eg>QG^90`YF=9s#4%z!kW$Mp(xq`qql>MsjBrt(p8A&xM}dc+ z@P{g&M#Pl?OJ*#rR07^3+*pHWACBGsSn0!3!J|r%D#&vhw4$-K^usKy8b}Ok7!b!qh73_tnsX$ zY|6QQRfKy7eEN_vn{T1`OeHz!&%>~RMpmI1FS!o$$|0mhcTAqmdOGb5;w2lx=CV0e z)#6w@5KiPFWi7II4!JCq&7L(;itDLg_B`6)0^xJav<}?T7>}`7@)LhIJ%s&XD-(^k zZTN)oeU&%Pe{=OkW5uLrn#$Z%JX9>Qm6~LahD)lO;7n_}3LM33kySzLEyU{7x zqHLklo>pq->;_7npS{Zz2*$b4SPlT3j;cp$*QLeIHm z?rFUh($s`^QTPFg7auGn-V}y_2dgQ(6qzFM&OD6W<29=b0WXL zI96aU@ilT3I28Hc{$Du>$kh3fhA%=eHw*Y z+eEHi)hu3peb}MLZ(X+Gcr)M)L)cc-iFnF7GE!-;x?8j%G~9sl>Vv(7Xg|`~#Rw$3 zAt?SD2vCRT7RXMuWm>N=wz%^M4J)m-bUFEp)Ni!fiJ%1ok38VXOqB}MytLJM;vKG!X{EoJsfQX-Gv+|Zr8uaEUSkKS zf`J;WLyVQ-+=jX5@8>D$o4ne$W%^< z(JGIi7h=}G(~U$jl^_i@B2Gt1NaCRk;4Zulh2PjXmdl5s9i&$;}9PzKe35#_n~?Bo-FIREATSZbDQP~Zmt zScn1jjGk~1rA#p;Y zTvX4zlbPQB^O-0d~D1>B2i1^Azo&%#KNVkuwr9+rc zH$!VXGQat}4$zoefVA0XR(Fy~W$JnW+(M#EajMd6JAR4MXhQu`l=io_;}NAL@d|&5 z(u#g`WPWv!qE#;AnS;C4wx%0B>(SYY&Zat^51VY+ea3$ur>~Q!Dq0m~6ql&jm*&|n z?-T8S!8s2vz)viZHWE2a0FEzwV1V7~jtEVb^p@oy+fYyHOuP}3B{BMt0YAX{L=F|z=0sK3b$IIMc zj_-*NJ`<KzOVbvJ4kkG#_~)uqcPg9iR}3DVptIanwG%Z@CdA!M zVQ+6ntIv84d>8_7D1vxQbNt||>oC`e7EQr@5gWcpgRRT>8x206?S&u*bWS_6nBf4GZ=4NvYzegRE-Ig+KUaH1S6^<|U#Rosj+2qq9 zVGfw8vajp&v8}Ug>9G!>v49uG=Esywz17Eh`SsDiR?q^)u2!y-I~WZC#|||dLvlPN ze`pYj4`p(i=~GMMm3Fv39vl2X`YNNBMl(8-x^Qb!pBHa->S#u)NJun3K`g-w`unp3 zxNdEhqfx@(;*>qT>k)ogw)U-5p+!qCC;(_}+-K%r2_#yb=lf^U1!;_Iy%C1QO>_p_~uy z>Ud$J{cM0zf!x)mAfUMV#)L2Bq1`Jj$zY7bPc}Ux`b0<~V>+?6{`CgeN0Uf?5cQA2 z*`p*f^D6#9kSuwmCC~}DSSAoTP+%pfYL+M1vl?HvvT*L3k=eo#ky0VO6_cPBRcA!3KOto%pBo64VZO3Eq`{P zB?X;tqb>)A5`Neo-g{PF_&3)mnNr`yK?fBk5xCMDx#YfUJ>KS%4Q})esEGtz>7?Mt z@)r))N5|AwZyTuZc#)S+*0Wl=JPKL(&Vu;vw>Zn}m{w6o38E_qDEAL>k~|p@ib+!| zIM(Z-ma?Q))`Gi6)FN^{HFvEMgL+hj^`XU~JYjMQmW&^5aKXP(Pw(VCj3OXhWQX{g zciJ+{Mp%7y+9tVqHpa_2v9>TV`h0k1^rGK84QJH31Hr+-BL`-PEXhBcNjUtZ7CZ2zIXczGKjELSqahd*Ym{ z{>nRG%Cn1+fI-7ak+Fw}0%7s6Q6{$2r-{cH$(<&%1HLOuR^QwK&l*L{=AFiyJp)$* z#VZs;(x|=!*)tE)Kvb2Bsm1SZsiv75VBT?VGq;Zgew>N)P{OauG|mjEZ{0E7k>B&i zqPa{;-3B7+szC4-D9D;X6g7vzs;jaTkFZiXf~esL=QVOr*bk7e0!HCGrq|p7e|gmu zkIf3k5j&^jzldH3tCM;cep-Z({?x>A3j_$hl&4bk_!d` zD86&#JLi&U2-j%{*QB~FYjelBTwPWXXhuLFp6^3UWpHb7k1#edhp$FqNVG9?&8aX$ zcwrRl4KC!q_8G$o^nE}Eb)N(A#XVM*N87D3z%S%1ub!l?`; zH37perqeXs>5TwRB*5mAV*ZYH_={sFu}N0VrI%kHcPu1hqp#M~N%R){)da<1^&m5p zgQ7Jc+cCpfO6i~F0O}gJF4AU45k6FW-h~n(`BGe?SGF;SEPNKZ#<5TsU>kp)+2yb-wHurqY((u?!IDJsuYC=t?^gOpB_$pi$2 zyz2AKCqEnDFiAnZB>tGFfsOwt0kl86lI>L^2~B}M&|Wc%gIP-kb60P;w*ZonP2US$ zm~uE2WMHTnNHEpb2YqumTGJGHe!k$`CH+WS$S{JqN&NPlbNJII)Eti+ZBa_d=-a#GMVV`p)J;PbvUcvl1?&ToEmjVMVDsuHIm~iVIRwQNbpi{0} zqnMPYnI*#TU-yIf7o4$yB$vI*Dlf3Yfi%W_ZQS;(y*@(QfQ=3hAc~+3yS)21q=9Dx z{=wq*8I$g&%%Tme8ly61r^V2#10}R5fjujwdutD|X9sjXyEu)KOOTX9o(ATebP+RS z_E+CUw;^g==xqE_a_DC#_hZ2CP8~A|-lIZ_cJeluND{riD&&{+K5WzLr zdcmA+YmdHX`SsDi7R=chi7e(UAV_{}6EQr_{#rzxJvQ9{Cn|(BD_pBdEi`o&eb2~~ zJByPENFg|lt%Mfvo-l{`;rA7|ysV$~IK59@*2F@7e{|H@?O#aYf%ImuBB=C1 zv8uSAwfbN#M-?u&I7^UzKJ;MTfR7fjNNFnD5V3*pn>Du%0>0U6xwDr`Iz<+U<6kfc zXnMbSV{qzH%Nd3ZN8%WhMo^to%<*anFgGCiB|izCrxV>d$TZFFyNjeff+IEXO;hbq zNZkeK(q5Eg&kp3nimlk9>|brU ziBVy42n|VfwaT|5#ujInw&p9F_(DSgHfu}Cv9{1{p@7X4VtSKbG7Z$&N`joe<4doo zHmSBiae^vBpRaChHDUA?dbbE)LF&K%{`A>NVptEiyaz+pcoTyU#P9&QBdEM8kGw~a zccWg|X(qu3mUaTW=BmQIf2Jj44S6BLntpSx(jhe$#~3U0&Rd{NIIZP+I9KW5VdohO zibEXeK>-B?S9woye-hLO9<$VDJ{w4BLtg_8NblDzO<#k1KMFLDnq@}WJb$63$)Gc0 zjEOb=Uoi)~Lrhqc0wscQjtRuQ6`2F3C7|=8i3qG^Gqd`tQr#bUz|!mMS#vXh!F1?mKakAn6Qv7eoSlz4>{5pv zDQT~Wlw~wfX&I06>~MX|@PH{Lv7-on<|m8kgP{|x8IMq8lQeukFDL!7MATl+K%UhX zI14l(+V!m$1ssqR0ov2aN4vJEMvz=UBk7{VyruG_O))}T6;t9vGa#5EZ$FaOk6%wV z{U6#f9V`;REKC+P9bDcd+Tr?mAgZY*I?k@!+H*^eRR7ajKWczO%%}274e;0I`cVTM zllwGHCBEArM!f@ZY;lFg3LYy`zL0~6`67dWJyMRK({Ez zUB7`}m*Jz7ml>Ks4n4ZpH&+DCG!x7^lpmw@C~? zNSP4cG5Ot^XTM>FAEHde*oyF^uoy81$X!V+6Yr`809I+$G56K*^l%P3>yA~O=pFEL z58?mus1ThVd6E{sSjOBn3k$`J^mf{-l__D=$E)sGO=7$SN+uHj%akzsvu8#0bbxm^ zbTX`!1J3B|NvoRUj8(bh4KDf>QteQTo`9lrvRIS%YAchRk^>J4r6#$OV`0*>N7xMJ)PsU}E1G2sU(P+fPHbr9qm-L2I z_7&FP9n6cGsrPxt+%hQ~6DERK8JrDJU~|SKpHvbke3JZjmmfWstNo<32Naih&T%Ph z^4n#_kjV^c0l}OIG`B3rfcT%gS8w-${~p`@1NfvY~Ret z55xm@oGJpxxP`yID9Pe+2 zgz)^_%t;np{$tB4jo#crZxP`+IokSH_*Ao!<7*O!Oc|0=({|4SZyUv@?mS zEG1}@z3&n~c-CJu8*-Y0B=)%9!4uz-(1Swz<{Yr#F{F2(?>#xc6YX2pVA?^~Vz#-H zNFkh{X4c)Bt}ro>{-NY5S9vPnwFFLGTy>)Z7p7KOct$L=n8pD_f&0@EA4M z0+pX&VMutI5$Swv9(=Ec0Nz5aJZ)g`pPGU^czAmz5A1}_#s}s!oi7;&+lGEl2A`}j zX>Wip-j+C;xXV|7#Hdp`y6?Mkq?QSeT$tFiCzym|4w2VlCT|eWdaD{9s$B_2UsI&9 zOdbLq)=d@IE_t&mPEBKa=Pvy0AelWN5*N-kwcyBnx(hd@JRAu6hSWVzlvYM&Z}~Xh z0x;<=HU@O^{Mu>L^)EioA!mnywj9Je&spz1U}b@}b6K4{JIG$4PH3Dn#VE*dy5l`k zfpW-WD@Iahov%8m+~j4>Luz$hdkd5(T{20%?0}DgCL=bh-u131>)^DOUGYprF+IBq z3~1SLJsY6!5UJDns=6M==G^-YopQNMKIu^yN)T!U)UDWJfAhRQ8{m7d3{L?R22UhV zAQ~k|e&A0cq_7DSLORHnjz(ScAwDc_Tp6`UJ^*{kq;Sm#ofcJk1L=E0(rb^EBOC5@Kz!_7d ztoH%ML&hl-%JS}V& zR>(u)f|UuDW<7X7{NiH47Gy-(nz9;!kB&%bWW`D12aDrU5H?TR-PGWazJ|Hyy7`(r zT)#|Qeu;2!Y7k0IZbj+=>UO4foW8%L(+l-|m+AeiM-?S8p-BGmoE0&HW~TSS+@cb1 zrz#mV^dN|kuIU$bg&%qcz2vwv(ae(^5-0k>(FD&B;7O$F*I*-co-q1S%vkgetJ$`9 z5YrMDsedrla5OT}U&rZJ|4;vCI2pG~K3~fe{@MW+s|j&cfzI$trZ5s`+(9iUdzF3^ z#0|1+>I<^tT#PEFv*+5GxdD)-$PvqQ$4miyAK5V+Gz?2pC$!C@;-wHJ&mfL&zg;?+ zVeZvQUhxq7x8x~&u^T;TnWKw_V#i&o!P&A|&=%KcG6q2(U98UrOYMHqddz{CTfMqQy&8yZ5kxBXT)b+X=rzK$<5y;`V~$vb67t?Zn+P?oI-yN@ zVM?X-`k||IW$gJODkNJch6d6r$f)zF+P?5>kj8vqfpEwFscLI=(wGl9O&Ak>q}g}T z1IOOOqh)&j7Rs~hn3A-R0H z=N7n0A&TAzWfDd<>9vl{&=q1@a zlY|YRT7$OU@Ml00iGU}>$tB`UYvTS~k0(6|H6*|MLbT zVq_+{mNU-P*M}2g{nXTsBDZkEz?Ijw4zw2ew)d6qfC9{JAcq{VXk7~xo*k}_2>|fD zmDApDGOUjOM+B z6WgE7vPCQC;3x#Mrm zLx@%joe12Yg#O|8&HFUI@`tZQ(Q}I+pt)Z7hq}J348AJ2vHFOjl{XTHfq1op-PgtWW8*eGw`%yJ&i_4sp zH)1^=gU3H(nS}SO2ZVUC)e;D0V~?(X%cCVNVA|1@Pkw=d1ruP4cj(K~kaq zX|wg!NQ}5V`XH}}ZcOrq{-Su{g;vVhj$A9jMFRJHuUNP}Kt7rJ1?g~ifP?+>?p_%#_jG{U{2ciWfPU}&xIYlpJlXC~) zc20Wq7&xxm<*SZ1+>LD&r*Pe=zs!sGLab`}7(xXpXA`p=jd;fA-ly z5?%4mcIREk;az5&ku1#{-!4FH3C{7w1BpK4|4>=17+Br`C(2CQE}ln#NU@oLrMSZ* zQxp-S6cpd)tYGR@xJxjym%0e;0MN=lYvR+;MMOE1@u%Y@FgK-vymdANsHW##DdDjtR++@XGycsd{y(qz<2HRV$>=4)^lvZvV>Jy=H?;MW zVCuxI5fl2#5E5cY{^L8+8UuS;SUx)ldh)!>8vT%hR0@tYjthn zd_S5AVL6UR)=qurgdbjPuXtHnF8Yk3P7`@qu@mYiv$90jM^I<(ps(Xp>x^FqMM_Zb zsyy}%Kxzs5iT4M9CD@QNF3vVKq|w9yK_Ta441ppW#nYRPb8etV9mUh6424N5il>KJ zJNQeV4`7<;9XSapvzuAr(+^-;BW);0o$${`H9kAQ$|0ost=W=L$s@l~cj7jqBAe5A7jr_^1-Axg2kovME$@7zwV}{gJ#M|8j)H~xH zGe;`G3bGU7vTe&G(P1Viw0gU|15n~DdzAoKK&QXQFbTbE)=-KdlO8n?y>dGKOB1_K z)Ym*QEEi9Vw6KRKMng~2#8kWdexo0X=Sc(4cMQ+}`$9hq&-1bHe?{K`JFG#HNiy8SNLIQwa(9RGQ#ImmX>W!&953ICVZI)>OY=~A4b z>Fa-gI{x7<@8jfe9e(?{^UYGhBA%Hmp4BIN z1L^;c3fZGmwB@Pf^38$d4pUmhTK*jxXYEHEj2WtbBpOO|0=|{uBj;BR?{74yqG06$D5 zHTo8aPd_yM@?VEqq0!f5kIDO<=j0xLJESXj`B>LHN3Rz#hSX)bXWFJwwPzPJmk8$eA z^ty|vP7Pv&o_lx|Rm(btajwTtUHF&@)hBOVPuabdQW(YMJ>Y8#X&WZ7lr0j+7;AdS zv;O*gO|fEp<4vl?q#=;WA!IAm7Vd|X@?i+Hsf73ZXmy-<`StO?SF>cQ|H~#Ok|M`R z#3^krKFOwGs995Ke}hXuTc8Twg&94bp|M?_mNLSnrO*xM>HF~Q6Ckx`Xs(-qzSXVm zEp(jO)gn1?JwCo}j^iUnn(h1?YiR@4^oZe93Nv@%oXdf-w$LTUqZ6kwjRn(okWC;A z7D6Z#X%Czn@jme7BDoUz^uP(0*pW8C6u-p;r62=xlQCE9msGoL#H;UnMCQN&*zhcm z`3DA_B$~XnCZ0P8A7-I|=|>|#Ym<@3nz$XE5tQXHuamS2m5DoDY}VmMa|2YzySiP` zJya$_BHv|d(%LB2uHOBV*bDHeE*|Lf;D4cA#RhZQy6a%$k00A{s$bZs1fIe{Z~T)> z++Ur<7}d96#;iZr%V%X=)q0Q`Q#yZvP7j+1^JOGn@ay+pJ$u5Jtw||rh8LN5-oo+( ze#eunAKUSui<*Iq@(J>LHuq45d_m%F>L?f=)tHu(DkVR^wR4%+}`RVfTdbmif_@Qxd zTG2X8SNTcW3mg#DiCh*cL=c%eKro%Q16>YY4`X20kh5BdKAU77Yik`SI?wn2zLmBAg+~4bN^IRu@ej1yYa2w<#xyEWQwDu)ICso3l1g zq?(s$(>NyI)}O8^eMdZ@m20XOO3M*Tp9?}*;H(g17r0QY16DV&v%(o?(iom0m^knN7X2d@S6%WmYQ7^@z zwk|%>R9%hAD+IseX25F_ZBA;$KAM6mkK zM68Ub=MP$w45C8JG@D1Ut?Z3ZBt6&=D-YNkJPLR~q~1aJB3DLoY(bs%s1U-5J4eH0 zbW8#3A+pRl5^2-C@Hu`f``5!bBo9vpE}e)Tr_S)Xc;_pq1<*oKt94NwYPr!|czKB0 zZoGe#w!S6OawMInDn_}vP!e=CVGIMwX&7^NFgOQRVdQ(tUYCy;wc6tv-(pNVC-Ctk zE$-USmVAu-2%%ezkgu$Kf1LIJj-lESm+|cGwmGhnE)-OH)OKU@ZB4iS{(Sr z%MCq0TEI z9`W;WU#$msodFemZ8krF)Lu|2NT#fGs{ZH(oE1Cm;Pn{n2f&vitaObLDc9wx5$UlC zwnGpy1bY_}Fn}Qg2%ar8dvFa70ZO1mZn`pvT$GeqVWvj7d`4SYWSP?WSRBkkf~Sq! z@(`=MMytpk42l7yg*)NMM5&PlgP2z`KqbyB88gyRWIk`aa;wNZT&TRRZe@>24`-UK zd{voy2B1m~{=uf4UFD%zzAv=<%bPX~~()b>%^E~_~V__+@z zg6Rh8aoMZ3?J=bMu|r>*`^$hw1zCnXgnXERiQ-69cb4@AA?vcnL#bD!gUBsri>3)n z{ewbi0k!9q`4>qgPYS_pi-55kSUntIZ65~JHVI;cv%z@wpzNXnOc5ba6Ks#Lh(V5l zvDtHNjpv$I4Vhy!bnc4;soBL?V+e1YBhgzW-8oNB#;u2bqC4}Ghlkf=@GU-#0m|Wv zVi+F=DA(S&vf`52nnZ=L1mj=DA9-t-u+4FFlWu_{Y%j|9t`V7B(!H^}EyTpKU0v{eDxTaONMkz{gWWJCzvfn7wIcL*}D#&Z*UQ-SKo z7ccH#1!EOYO`@(xw6tpWJfd=!ra=^$YrELq>8&)?p9B;FCSmpKbf>tau(k|wz6LcN z#L28Fvzfw>#ErNgF5Dx`YcfFtV_`*|>?;8#AUC4Mn*qioiVv^`J20Wbn`8Fob^tWV z5%18c3TNue(Vg|S?<96Wk?5L~?dzqzBSbaS}J;L+B}B_6mF zE{cTaY0n}v5H-D{0`)0vPgi5XvCnRAs0RgZxx9Kyw;m#g#S zojuzQUetyoeI!eW8tbPx=hi{K=L+O5VG1@1a0a*-#8aon8PBycFQzakOQRIeeuL@&+e-p?xl^4cvMsDB3pFc#qZ)uwH?fA z-1gwRWYoCV=EGI9<+7(6*8|;^XBZj0Ot6($J9ut|(joviZVV!oJz)Copg~oQz{(Gf znAj*47^HEI4Fu-~K>1+}Bk~f)Mwt=-E5wRD-6$ z>7pgrd=`V-0d`pua^<6m-~#pi&4z0SW%>31MXCl_jJzkF+<~CoD02@NVii2Gz(bjI zC&G|0WHSe){fY zoBD+@lCn=A9p#efxfkj?zP3fD{~L5#=1hIl@JeauzRqEf#67!G-z|yb2#sfv-f#w_{0wq<} z!P7b~RwWg)6U`pb`V{Ep5kK{|xUPN_4{c=5^J&ZvuWKNVoz(rjGZiQTB#1js+Xm!7 zO{Hu+%9P&-SB%ySh<+M##4n7IQ#q@8d9gh69TLaoA=Y^O9r5tNFt>qsNu zm}P;-huw9)sv|@;eU<8zpgZ^Og;V7MTiy;%LLD!iPyoD9P`}Kbj9_@5UpR>hh)9Km-wBTkd9&GX0F}CCQ|ea6$qlA!-p&n?*S3m0P^?RU z;hN8>2E}FnlDrDQG=?}pC$zjKlIbrM_uR&EyD>?S~J0s7k&B~dnQEUUblEc_pl4WxQ zMN+sxqC&NetO>IWuRr|27R|W@n6<`yzjOUgJALJWlw9A3(9aWt+JATq6=)kuv!fiG|w;)uY zWUB<1e>NKJZ>awcdsoQ4nkD=N1{HU&ntt}YYhYUp4Lyp30LUu@5$_-uWlDh=4n+BR zcC}PdT;X(eSX}NYQH#QQ8u0Th6ue618tWei-#$%mh6B?vsGd@#Zyno`gKqg-euB6- zr?rJZKqi-wf+KHSf7zcwW-vO=Z(hyM#upBEgu*w& z{XG$u%E5&rZC34TlJGz_djlG}Jm95AD}vkC!dp^V(a?}OZSolse;)(XA={Fw^a4T*~5fwSbfqhWo zJ9~&z;|I@mjUOmi-cK0rgX{Rf8q3o)HtY?6=5a%Dz)#bpa1HBwtH;JMgzIW5JP@mK znPYtVT=3TBqrAb6V0B@KGXw@%vs8OY$q0X5rQDts07gEXU5#hKbe(~!Yp_lROb!{(>4Kekq4mxr!i0mi9e{HR5uGbC>b}Z?0!pOZL zr|`NQyd*VtP?}>gf9`b0)B!imuB6e&o#~@3bWthwP*l zsl{ebY>OQLj^vlvpm;D!G^8^_3G5?K0wM;W-y=>XH}){SC^>JA!=$rYvbu;C7!X*+ z<#17BnWLY>fg~)Rf=D)o2jMJ{UnSn^Tc`F^+4fj0MdC235pNR7T&7=rn5%D3ogPt} zWwRpb@Wh(pu|27GE{?yQp*`mNC?^5DKgHFDIZn@=)gq>xpERJ1zy3-f>}{`{deYHR z+mfhMNx^+kSAeR_A`+X6%%o|#iIHu%Vhgs=9z59GZy_jbF#!+-LPY3$5K@^^zvUs8 zShV)E2A-rf^q}5OAc}ww7Z{R9gaU^~cu9k2TY*3wH`JDfxno|jVmahxHTVS3gGbp2 zKI0dqlC;nR|6WvQo(7+?$AiVxBc}0*+Vq=+pEQZCHNZo^*~{A1 zvZU9Ov~OXuk)#tJeeP5Qjq*odCCEap#udR-aKGn`4K|l>g~^f9XOW(Tmb-Z{W72M7v^281cijyp2*Rac)~`^K)!79$}W=a&Za00BuXi8JeBs6K7L zl>_YMBF5|KiqXjFierV8LXcm?-?#vUU&+-2KFW>^ur6-s84L%wDLs7P85{~mVU@?n z5Z;a1P5R!E^kO?RujQQs-CD7lhwCqXUUh4|p@f<<=fg=+~S87(oA??(J*b1d(^h*F--KowxY zpAx6YklFpH%z`rn5wm7N&vupVT|OAHEIdWrWQ}%O_E;xkZbw9W9kk4q;2@s-#Q5eL zFFfqAw6hi4h%$yJp!wJP#%7dJ*F$zjQG@3DoJ%weYsZ>oC>eo}zHGo`W zoU|)Wy<1OJ&w&11Mz}~@!dK-ltDb?TX_A;3rWs67*jIwD3vITDZLR{h6r7kLH(yD| zBBXp}w^@l3u4czOxEeN~B_Jctg=~idoKx2SI9-vE7ATH&19&UHwa!O}suadEGoB|e zDe{=ujj*2rsd4}eraC82A|;)!*s!km0?fzDFtV<#BvFg;@XDN?*0apq=18A*Ve?OS zkX9k{ek-KrD^aIVD$F2+@rE9my@(W3OhEQtTW!}F!9w!stQG$)b@{-b$l&)A2sxB1 zu5mY=yLnmFg%V=ys(p!DjVwp6$_+F&AF9{p;aB7g>sC z!I+K&m`!>@dmV?f0!ws^;><#FpKeSWzRVGFutR{+8Ul{PF^Hz7L?lh@rMEFTkoS~x zds)x!UfU~U8a>II)k6h-@tpwUvcqhT#JWKdJMfBwA#G$n%zI|>hRqeib4VmWLdCR) ziTbP#Y`6rk6o(LQLqf`MMJdnh!FHgfB|@nw5#j9cHYTvxsAW@X0A#LSE6Ng>(QfUg z;Q;$M2?og{#wwCWQw+zrQY6FBkKIHGN1y-Hz{uFhnk^m4 z$AM15RnprXq$ytE(@;m&!ZTHj=~Vk>`)ZXA!$1L!1|^tHJwB=)r-j$|^ocTdDOC+V zqj(He7p115Q`AOmb!198N^I_kx-tINJAu_9k~Rafc&lzX zPt=*|V`jfG`(v0Z@g@4My5X^ZxCY4OYHTBlux~4wP&hQMgRppRZ$hiHJI~fg!VJ9+ zd7jf%b2q43PIcF2$PaL%08Q0}Sz7~N`JZ+9)qnr`505`YP4n%v`OVM&{`tTD%4dz!F|DZa+;jRrbEgrAoWEeZ?el;C z+Gjd{opt%we}4S%<^AWcpTE2>-z?$%moLkozx(n1>(}??{ilEPr}95~;D0;q|NPw# z?~iZ3`Ij%>{prW|FX#XFkDtH)S&ah$0GY-F02lxO0ApcpbZ>HBZDDw6ZDB1{Tck@$@}mB_4@9`)t{D+?tXgp z(bLP9cQ?2H`=`s_u7A2bySR1MhV!deuk+VFxxKo~zx&hj{N>NDUfkR*;oL5-F7KZH z_~Po9s~3xv?_A%!{PglJk9cwOa`|sRzg$dOO#G9#e+pr-t4aBbpWZzE`KPOwcc0z7 zynFqp<%9hFm(M=Tzxep(=a^I_3ZlT-D1PG;6I*S{qRIS{2spfb^h?h<@49ePnW;vFE3ZmuJ5j%E#LpX{CN5D*>e3u9_{t@?bWk$9^&Vh z*LTZ{>z7x{uh-A+eq7*N&u=e(fBp3G#nqCx?)la7{PL%tE|;e_x3^bMVNY=IJl74( z@H7wn9LIa|(IwyL;_~T#++F>4x6q^EhhN{kxPDfD@ag62yzwue=h+Q? z@aTqP@5UT_;_6Snf<3=#M*rl+^{c<$R4=1>mY-j}y1jb+`pZv0ySTjl zkNQ`Cy}f+-`qkxaennqi-rZf@zILuHQKarzOE~M{`2dr+wzO%Tlo9WaWBm| zfBoaULCfF z$`jfDJ5O}^>{&DMkFW0j_u|ZXpdWu}f6TvK@Eh{WDit)E|DeytzI6>Nok* z!|(p<@;C0@to7=nPZ-4#l zEa9uS@a`9jr$`Qmh0{@g_65zz=kL|c^~<~E_1*2we_SmW`4;d+{AzjfUg2?Xp1;2Q z`T(e(`_u zTUqp{EF)of9{SIxhlbbmM~42}7xYFN&W*32ok?HDd+=?uytt!HF}Nq0M-t7m7y3<} z;LB6b{s*4gohSJGr>p|y0rOv(&3^LY^7ZTMr^^?h^56@9y?pSCGTZgTeD^>36~;I4 z(8LTr`F?q`<~O?P2bcW^E0EM582E;%KCnbm26aSIKJY|RJ_z(2WsI$#HsToPuKFnD z?_{~h|FM8sKE3+k^5^_E;6#G1OA1ZD^1pt(yvYaj+wT@w^QT|PpnuIf@+E$57Uj?U ztMBDk9ZBAzd?3Fy3%qT3?Npm|3Y2hoT{)(lq z82k#V0Q4nWf6398HvAHdW*1Zb4PSTl*L^)Eef=I%Uy}wR_3c+e{gsVJ$7j`NUQYeI z$sk)jNTfkr*%^K;-KAK6J=GgYtFZ0pseJwGd^^AWuI6cUX|sTkTU-BnA>Lo#N)(&x z@{I_TA_RyRUtb;{$>vM?>UZSdpz>X0E)V=2#UKCu4Su3O@i*Y-Z<_CZQ}i%?iu~2Q z1X;|B*T)|LXh8u+!4JX&rZ_4jk38I03(BOj@+XT30#GmSSu!%nA9-&4q22_36kR_} zQ9a;~^6Pc9@K0_}Ed2f__>twRJj6XaA`kLaMI`(2R?MyIzYR}-IX70d|9-c#t+df^ zKET#Mv824hy zqAl9x_U5j9nA!gA)vK$^J79F(jw|P`Stt0v?vVt4Y+hJqFE2j1zI_U=h|??P9n5z4 zwl0^qPv!9|zK3I+cV|EO{YueYv2c&IGVl$w9@?Ld&Ru~0lZ@1#f zd%rZ#cHH>351A>?W76a2at~Y8ADPNOWGa}*#>Y<<9`m;J!$0ys&0}m2e3gG>$?;)J z{v%VRhfD<%9Srw?$@Yg%#<%xTlbO>j;*e9^x3YiOjWrKsM5pHZ$GtG~AO;4{_lIVC zAPYOenE!zf_#no&PfpfOahlzoc*6PT|LW>#aUuH!#D13Pd<)EyzjyUp9z(psD=E(W zGcd>|NZC7tdpRVD$iE`>f_h^J2B)`E3bdB3k}f>I+XROx$BeV@A72L zD5ozQ5c89xmUE2y^hG$jj^TKxkNSyyfluHCo*eP?**yM)@WafLo<5Mrx9`b&e{8BEpd+)KX=>9>370bJMNWb5Ie#QsT z3{K$05xoBln(-kt_n$&DK8EK0b7;l~(cFI$&G;yq`_JO_GMJ2CA) z(zRcCiSJqTKi-pG`DACF;~(ZBu3VHSp5xuSMk@#7i8)VrCz${3DM(KWTsNPt5r)&;7BP;n3f++;@NIPdvn@GY|33PW-Wlfa8AR zAs&6)n|Y3%^%D~wob?lj<}*0ceC9!cJaO9PWM92}eSP;kBJ@52(q~sMYb+3lBL!Fh z-}>a{#m5Cj1V4V>{`ge`Cc+Q!4;dczTmB8N&)`WaU;li;KW4xF@q&NMd|jU9b0RrJ zOyvE`zv;K|%bOR!e^y0__(%DQ>|x7Ix{dy^p!NE{d;ZkDCzZf}Z~XG+_1)J`Z?EA{ zAbXMFkc`HQR9necC~FP~riY58sWeff3CtaiCv{_Wp{ z7D%7G|K4x^>G$QImKQg_UfnJ)u70=!u=30N@0%Z%?{9ts9N_n4DqKCw-~RPK{g}U9 z@XkM8T|fWvj=!9LzvLFv$y*JnQht{kA5)f3D9fAr;Nm&>=yE)KEp_-(_->+<~S4*zBG zUxeX;69JzY{jKYMtJj*xA!i%+t{MTXfle zcyW{8-_u{NpS<^`{GM1az(0WQo44?iaUl50hF{4C_sx^{9y>H3b?^XOAo;3uAVzpO z&T{jSdXdlQ&-r#x+QP3tUfo_XLb3TxerrbG3~Yy8Ufku!_~>6==J)#Q_UewY^@=2Z zZ|Qzlq3qutqvXGcHow9=JV2fMFS>>QqH&IYrJjkOdU^Xqp1a01M9Q-w-kRg3w-PP<#YMzW5Dcu3r8+3 z>AU5lfBX9G>Q(;tNB>U$$PZksj{kmj^@`!8oh(|um1&kN#(ueediB-kAAbiof&huH zE}z!i^FRORg&+3GLJ#}p?afm{`PH|GA*pau^W!aF;A6tS*Zgl0wom@ce_4LIyt}>r zE&uf&SG;Y=olKE_?{G@E6&{rf_h}*gel>|Il;66MgaIy~NYg#PBD^ z^zWJ0J#yMJ&wG&n@dfe(n}0O6ehv3b>mNTYy@os!PJ8BQ+B7w7c`6^5Zal?S5ebdk?9-pVZw$>h34? zr$|eV8GIqU#lO6W$@>QlbA$S~GWN`%+uWc#4Z6(@8s`R0G-$kkP)$~P0{M%eFCQrN z;GKVVRjIo;?VCTWPnJBXuYdmj_1*Q|&v#@hd~rTF~|D ztgYYW$zNoXgR>Y(m+91na{kwI8&)x$j-T^*y%dZ5tT=wqfhyJCr7Wn312jB8%w)spox{tp8{ipA5 zUYz~q`xn>X8Q`Du%Y6Clhntso0K8w9bF;+-lPtbNRt3L7b(V7sOM)yUMG&UoqtE{3 z)8*>#nzoZ41Qbh6$;s=v%oZdoXgIVqLblub<{4`_I2Yg706ie!Bx@ z@blNmdj(ZbjCh5fq~pDl0j z>wo?DH?XaiH;^KQhxH@;$iYBpK)(9G0by1mzY3kzRRJJ;=?0+#5g4LIQ6+QhwW}9DK*x z3fi|o#wen%s)w{_sLPBSjRU{HZ<0w~B_+O*TTiOhSLN9ukzPm56aBqf4EZbGSau9N zFAqWt2nM@+adY_$hrKAw2&qGPD1#eV7NqNQxICu2p&@4R&I+u!Zg4^!56u_G zARoN^aA`hmGBGbc;}QA&^ryKy$a$CEa_)P5hRZ8|{7F81F_+Jtwb!o~S+WLBR6dz~ zBWExF^Pb#XzSLD_E`3s6{-QWsd^MO;&#CNidt~0}vwZT-m>sWmefUK820d+d-QlA1p&nBK04|)Cj>$|I; zh|Rxx_QOx`{r`A*^Xp60eSwn~F(ALMX`a5gy1c!+!O!8KX4&urJ(DyQsa)TJ6Bi4x zEFaukfaOE@V%FmSPu94X52OSO{DHsW;w-H-=mNJ`_=Ei z-rPQWop((K<0>x82dApI;8#EW%P0Txub=&8;SG3_b%ZBxYp3JatoDKm{Qb>uSI>}7 zE@#U>-~D*`a`|)Cn{IEf@9vhbuU^5h8>o%{^78slbj3GIEp31A#P)KZOs}PQGl;ow zknWf0Z-qdS6pX>R7c-JpttD1?gv&mmv(1CN;Rq0XnU3qzA1`k)6a;^K58;$r>G=In zd+E2~sP^*5bRVAkP~qu!@4mSosxC3L2Gyui3TV z4lKn&N5`$AZX=f`2Emm1{J-ilKKZCD!g4L1vIhC2AMVLVsv5mndP5LC6^j{|2Nrqa zqE7F>|0M=7&0@MzP85x&8Z=L+zDx;Lt>);D$;WpInv>HBk~ERYXxLKw4+?pk57NO z){kB-I69Pc!dc-0NFAB?@Ed>czJbFE1VrkT@OSUJ@A5x>(C;1&f4$%z+w#*5stC(U zAHb&JU^4702&la=&2RbH@VD7ysekoKe|3k1?(nxn{q~J-enpefuYgczK$1g^_W0ji zBB`!VbMrEDi%anDJQ3Rlxbmv!;_VwMI|6dTluxlDNHf&G|I7bJ2Q3fe2vK}y&f`j$ z8YIj=o3#|1g8#|`cs?u@`Fg(jSdp*iHrf;9p^$@r&NO6u*iMk?5tR+O_;X`Duwc;{0oGv^qWqyGPRO?V zN6)XH{l*M7^TyBfZ~naCXQ0c&7k@!x_v*LnJJeE$0RK=3(%U8T$yZY3?Royy8=~xn zgR@nAWbgxWEFAe}HpHl&*OQNKub%yK`2s+XUtK+`zE*y!$7;WWL*-}61IU|yE8B2& z^^(W^9R6KV)jzk-*?#Zz=-=mYdGL?(pA}8@V?A{DtV)V6CJE_a=&Lch4x9f85^8YR8+lK!7@7T!=kMk`l z4d*+2;X5J2C;JvF9WCc!-IM%^9`ai(iqsOl`pG>*jbwRKD-po=Spr-=c~2@&RbPQ^ zCXru0GvzFnd-k@>Q%W{M0Ur7ZB``Q~NiLO}oGeGIjlfF@6K_SwyCevC_ebyzr$H0iQ6AJJh^1*SSx zYB$vU?s&PrEQS$dd29yQ>!+W^ik+(3_VlyRfBf__Q-Aj4A&;Pez?08XUe(oauS%7w zDw@SZkn;MsFP?ny*YBS|(W+|F`+vE|d=RbQv)z^D&bC;WMfDd?80d10VzYK%Ow1y5 znxvX!U92^J`DXI#ZqMJp|J&smE}op_@1NBKyUEXLb{Oj0<=fh@FreI{CXONo|5%p~ z&isepJ^2pmk)G!TqATtX?5=Ss<@q;UN*XT3Ig>RT8;>rnzf!a zO}-WvZCKQ-{o3tK7@Jxb#g7<_>k9Pj;_U;xGwv)&M(Eh z)1_?rfp$B)lCasut}f~ct5*`zwxl$_l4X6DD{*TGOY)O<#qU|&HhYN2?uuJix1{v} zD|x5y#QAI{#o1dQTxMX|0y(}CZ_y($zmj))Q8NFE%Qk!GLozmthU(7OD@mDuZTsGQkzr;t&#y`B0m@?~1+w4kw$SVnUJN8ZhxRgSA zq-6Y~D+z0UDzn-kOBr1GtlMNszHR=gXS;$KWY*ZS^vOpgEIlhH38BP-s?b8XHZe=hpP>~sACc5Gjd-%9?) zVF=7e~r<^MH@a>Hc<$!`zP z^Dgf$U;eKTe$Nloe%nCvt9bBrckspI!+zw?ew!WBPLBD%KBR5i))U(X;Y5shE(jJ7 zAi=5MzP~`8iEQP$iODU`7n`!_V&iI-e_irsntT(oM73r?+cW?3$HAm!0F=cWh;F2X zp}s+JewK&(25jH_?{D(VA*(BS<_HB`!FtLwrzPO8vvCF1yZ3qCN&z^WRf%y{oB%0< zPP)OIY4INC^faZniw$`!Tx|X!e{rRyx@|b65Ys|so!;_{D=pG(IAOFAx7X*V1Jw&> zOnH%6Rf~%}>tITy#wmT2ITNiCOwmZo#C4w=x8tla3r!mWZ*ATs*bqmvIx}3TP~)tt zY_0RWP)AcbLvJ$}TxfpX7W8|1n@-*)?a*kQLX7sciTXBO^EUC7;oHp1g=NN7mzjUJ z!sf1vJnU$dLfpO1mA7`~RnqwZp_*shwk$4!bu?q%0eH4R%e2GSsnn#l>Q%v=gk=U= zrKOh%1}^Mu1mS6T&bZ+b@{4THXlsQU=X836;-*K)^AU2ix7pN#y>)Qf?Rs#8_NgNz z)c8VA9HCv0P!=h$(EM~3yjwV>M~1+Ao8QW4okC1U$jg*o83J!EzToq02;nlpbz zng3bjxpt*F_q;I{kU2P~$&XBjLb%FcQYEL=mR*LCc(smKn|5Zrbe#62$7zTEf6!GG zVq9y`YqKA}svBM#xINbAr=S^;Ip9^LO&V>lQ1@3=*hAp$O}M?h$`m3nZDxXQBbmmG z7eYCs(-hG+KU7c11nCG^6U*J^lL&u4f= zei*WyofjWzlk*vauO{Y)!{sV9ZL;!UJhL!sVtz;~-5s4_ki%Qxqhu^@vSTqGhhkjG zane-u6{}n9Sd_<&IU-4$%v|!3keBNkjyU8`O5Jfpk#NEh*M=jKz+mmc$BHAmF>4ZH zT&U57df8p!h>l;WBM}FFBEOjfwzN;NC7~uy`3bhPGh2c^hf|afmGz#vQhs7NMQQ33 z2{oOfq*I3a6eT%D*KPf~fa{fk36>2<0c2jO7dJ=j3=t|&94INzruf_2WTioEYID3wiy5~l+ zzp*(-S%Ji}YhZtjaKP|D4k*<1+1>lIs~k{tZ4^#B+iaOtpgfWzI6AvROl-j_TL^ND zShP8Mqn_k9vg#m;udSKiSn*Zr%Ax=sCZ>~X^j_ylKT7bRHXUU|!|S5d#E4W=IbcM5 zSMXg%c+7R@8Mg<%OQEJ2Rd(C$=(|jTZVKu)qJZvrQ!L-kZK!7}H8CPx<*qly^8MUM z)z13@vjR-Ox?MOfY4`gg5R<{IO5Jl@QF(X1DQr#wggjx9gD}*Lf}WtQ z;Ds9x@LVzSzkP0eWad%pbsnGlz_+9@H)pDpi+|t z=;f+}qzmPhvij#NzR=BkIDEEYePT?EFN;v0Vtryv&}GS14_+69GbCZR9_JLXJyhzI zx@Uc!=M=F`T74i5dna+kOu?fP#xHd2!BJvjed;vw>So|K%03(r2IwLK!C+0{eIRQW zISZqcE7UY;$NTc{c$qujPrROaVhcLI?kr!=eP(Bsns#>Yc9yT_E;~zVUj#|ycF__Z z$ZeIHrqpA5g4;qW!gFZq4K}-t^fD8^Ov^$gjIL*)MwZ}}3nhJO;)U?xw zdVPD0{l1Yy2jxC9LKhw;WrUdgt$J5w#!kxk)sP!9)xvadbfdA95o%gyaUjX=igLtK zCgL)8GM$-21mwMjd6FLraHS?Gqe^`c-pdL$a#(z!0Xd=DA-?E?c*`E9HYjz?mju&# zs5Us#JU3J};@Vu-dC4Z!wPdTWYa`h*A4{~mD=}`8GAnY!Bz~L;TTST6onlpAfuZ;) zCGq2kwMK_2;0p=15vtQRj8dNxs*Mek`3Ujh4SmFkEz=DR3eS>!A1R@QoGl79DPSZ% zPoAau&K_T45PJZph?RY|wSQx*DhV+;BlY5FKt}x=Z1}VB1iFsf#j#D6%)B%g>PniY z%981%dBh_O-a!lQ6?&%*-|4)zE!4d@cf7gXwIRDS;!K+_^1O0?j^(*f_f~&eTKA{O z^N8mNm2_c*5wEIct3QnReW50KuC`269pAFmA6Ri=KRT*AURFv{CQi$9q3%^*;rX$V zG63KKMhK2tXKkaP8TLU=a6%zJrJ))2K=M1ynk(`K3!jL-#IvT^NtL>{Pi4~7%o)h1 zvXf?KiaZ6CRSx|yUckhi<6hYUUl)<5BY)U>tAi%yAC=78k;VGbB< zBTh%lEYu`UbV|qZeApaoSx^k#TZM&paD6iO&&5 z-od7|&ba0r&6^iOP3LGoI7gj%!LeG@=ENgdiSa4licYwul zs!-EOD)*)LD+_19IRSoX?Y=iEl3Ay9Bq3*HqXr68Niu8A?s=tqK5BLs3A3$qfF(+7 z$00TyfHdEvXBftkLoAVE%aOK?Ld832up-4x75bl$;zHa@arIzrtrU+O6nDTzd7CK^ zFYI?L#D$owDHY-}r7&L>;^a&6&<)tFkMwpZ^_;iEkueidol~dNsw1GCZ7o%;2_?Q(6HJu|pMp2bA72=jz5}qM&*ky}#f1HY>)RQU_Mb|b| ztOQtLL*p|WhYN)IxZ+TJW~^$XXU7?EK?TQm1%9G!5>02Yy-H5OOXW$%>UHrfYND7G zW77Kg{W&)W=V6=k&;|5bvl3E67Hf(>7ve_)e9&;e?V9Rm&OHS4exs6x86C@htKa2V`T>NYl_@inn1DAEPtIJl(buw`kQ4WX@y z_KyuVp|156KohNUh&0;IQ3DDZfQ*3GQj4}}^;4;PcaH1MkeD%~HlWhFN_cH+09RwR zL8yDTq^J!7xMH<|{Jk3}IN;;1)uV0pt|)cyAe6hZwRa`p-a^dFf_iqKHqeP5F+d^j zb+T4#;6%!NSqL&>^xQsJhAQ!t3>D`FYB$jyoS-Q#uhf0msX0N)FRaB;mcI=Q+_g40c*1Iz~ujdcZ~?!Azr zD~Q=74qh@OuxdbvjntlgpGw_J6_MKQ`*Z{?*g%s4w|A}7Z?k%sQunaAP~T3~!x9?a z&S02cI6S%TB}f}a(4Rt0I+2Eewy0u7Aef9z#Di-Bh5`kvXGm3GUv?a7VoHv0G^rtB zOi>lsogF!7Y8lf7%GA~>x^eoF3U#j*^&UuZEaOWBEhV3OUsQz$seeL!LRIMWKNq8+ zSfbC{z`_-Q>wh)E4p z=BsfEiDR;!LQr&6SOw|N9zip$rU-SXriiP-G-`?^`^BRU=PRxLK^lWlALkFf#t;KJ zAPcPKuY~MEwLDhJ zQHAUpD@Q`z`*Nzhjs2Om40bFRUd8GQOq^^5xD|3-XjGfctm?M%Z4Mi8eW?49Sxc*nhFQj>)ICH|7=&1-Y$-Z?rDlVd zBBuX?jSD58G%j|sq6|KVct0sZEZF4<4Opmq4Y)W~wps&r29K{ZnIxY=4tROaY7lRv z9j51$0dR}Kry%a-Dzia6l6IA-EeblfLA?aq*f#SjsZh^)Bq@}M7Lf{9|3KSDsC%qK zBk07ovE=SG00r43qYan~Sqth`9PO~s6HiPq^1~3^-T`%7^A(R2)`?`kzpNg}9CVE5=POj$qOQVW1L~-FTFVtkiQR zGBA_pq)A${?~k*llzPsZ!U_#|SFtF8ue0||oYlLPx`X_e^gRAz-L{}t-a=OOB^SQvyI3_EK37Qi4OvEE>IRFxtNad5s3ma6o$)J>;_p?I;8 zB{})>K-L(_>R5quhXc)fjxh=KT!6+BoX!9U#l*)3E|h%Ea+vNqI^ zEGrMgq~1bJw^gUyR7bL`K6pVokmd^}g6ZOXqCSjWJVJfSfD`S3xjwm-Hpt4g>!Id5 zb##@whX?g89zMF1^01~z_E69Dr_>~+K0xZ&ZlNs5NvcBd-a^-hdULmFeNd=-6~7U0 zB?QKh4hl&&wH(r~PdWs|jCK+b9&dd&Bd*b8FC#9Y}i?n zw5Bc8jO7Oy(;dB1Li1kKXH8PBgYuH;`ad|v>nF@$vR02GQc zsuIFj;$ty}3UeXy3Kv{7QwC#fb~YvgZo`A_M)HF+#yDrp2sJHJ6$jtN7}b~&kqY2H z;}7+fIV)AD=d4su8D9}BJ~k;d^k%1(UZL*&E22AyOeK#bt5v0c=9Z$Mhe-fD03%=Z#s~+76heG#eSn|TLE$aO-Ki3 z&79XxsC&%h39lUsRRizDv|hV;^-#%A8gQL@2niure=63o@+8QeIV(emFPb_Q#mbO# zByeA1P6T0KV~PwosVOmG!3lL2wk{T&)RfR*2?dYAss;y5sy!NrUdUrXx2+^`qMbZSck0bMi zeHfQlaymp#?+c71mId>Mox^Tan9iZ?XJhkLr+J`KpR!gv9=KDG25sCfbvw-NuTq~f z97B70@s+L-nDu%*(l_RSLOpkQZDMpYTr<;#zvk6Yp*|J<>JVTX1%=SkbK!9|n^Mo& zY+E9moSZXKA-soLQK_da#mp?xCWb^l z>sJo7?HJ$->#jY-V)&M0g6Nb3)GC-HbXDc;OLNj4&3a&ade%4mEm(w(nUCh*dh_63Q>@XvR zH=vDYTRnT)a#HF(HY0O3mXpXe_+Twt{ICP8)N=>eV1~N0nAh%IW2^~)WytWAniP9g zk1AtL04xkh4OA|UTqJUUQw4$=JIs{0_0g4M)D=0TRD2JREn`~qdz=_j59$KswP-@Pb88u!}fO}^Jl6M#66bTD)@C{z7lCwEca-zJN!jXByE>T>1zwG6L!*VQZC+|E@F@&zlE+Nqj1gw51tJ7f?%0G*{0 z^m1C#`;5YH>`q1;7OP57=_pB^Sx=dLfb>z|>`2(i0K_QD39H|d@se#k|Jmb2ka=@fz%grO@hU_rWRB^@0t|qUK#Guuws^z zYZ8t5wXMDtX6IDu-Yl0nLwk8ieOWJY~5cSg- z=u%{S!a^5ny1=ER@IjGrGSR&u@ENFEZWV19Dr0Pvl%v^QL$^K;z=0ywWWLwD9u z;u)A8DNsNm^Etl?Xw;arF!NFSVTk_V0f(H*MQ-XAnqES?F!eds(+Q`6d_8KX5@AeTHxV2Z8G*yERjjgrU=WS=9J_Si= zOpg!)A$sy{a+~<~J=MzxcvJa z9_SunBqT`o2lXA3b{b;`kWh1arQY7sbWA#G2q2i^+2{(iE%?LEo+zcR@me)ww)Khf z)acBatkyd#0w_>G8*&LW6KR;9#shHrl%C{Jg4&c}>L^R9(py8a27x$PO#ny{RSaTyW51C90#g2C-ocz z)}`3pCi)wCR<_o$I1Lt1>QnBg1}xwlRSAbkS2h5(9wa(#!JDrbvys^+0}yizg((+A zJ;jzB!QV)Eq-1RHn60U`O~UMgmHL$LE7S`n<By0ke`G{bo@9v@@k@U zTkXwQCuj`S$3jj1l4IDd2E3JZ3(A%VR?A@Q>~s_Lag1$~M0I3@I|Jhq z`F+JCz{vJ=+O86}xi=cwma@ZILWYC@X7Xth0n(nN;m|nCQm9$J7cE)&zw{iEmU>(i z2%WDDl;6%WCMCXTN<1lFQg@VVbT+tc>-I<_h*D1?L0D%)AC`{?Y-uVysMM#ti%pVc zGF%fVGZb%D0gMp?=0gP9^w0`ma=I{T_mq_Wz~_im^Yh4RQ~t~CyGGQ*!U~@{ABN}w z9)Rvl6;js&O!_1HMMzUb&XfY2S$CvL#LPYy@&ixf@!F;~VSUkjzu__^Et88&PAp&d zp<7DHnKdbwFr{8jVi~)$V~Ue56W9+OzGzyk3-v`;QA^oydwZxAnnS-`XnphZo<^a5 zkf(9A@TAT)R@OX-K&alBOUxUU|@1_Z)GGRMLnbX&| zRJ0ZgOw^jAhiJ$el=@_xxq>0#1{;r;YDyEmmVzQ~>ddC%^HNQT+_wZccMcd5P)WJVN6?ENnZ2z_eahQp>f4$e3Aq3fCCO3_W5&f z45-d_HHS!sIqO`gC$n%Uf`x9l&_eY5>@t8^K-};vfIxnR0(nGnSQcwApR9Ql=lxtPdX%~-DpGpjAT|9B+%6D50 zPYzWXy0HU7iOHZj#34!h_sQ?R)jg? zT@FK|T!}jssX&f+n*;U4q;5~xe#?ui+i=Z0o-_@wj*=fZl&X?T_gd9ZWIqIf2a1Abi>2{! zca~Dmy0gd=kr`J$hmXsNDb%y>EL70Y@785pPG?prb*-QsL$HyaPbJeGR8a7%AWb*& zW=Uq%1n!2ZFPid+TXAMdS{36@Rzj{pnTfsNPssHl{NIkd$?5=PNvYT|rg%O?1dv&G zZmGIeCI!HbxD3gCCsm)u;6$Y+%ck^xE|7cn0c+V4(n#~JXT7JbK@w+Qtx}(I-?b@; z8v*VULaf)OKU*?nn^_5U>EN{67AWV%0};m9WgUP4>FU#} zfO1~E5P{Ll8=c`u?(zl`G3_%{;z}P*2l}uc;ho~TD+WoUlpa}YbkBs(P^d}dl=_Cn z-y)z0^ckjrHG7@Ipqi+})K6A8#8{UQ;?7Pk{bYqfa3crq7KGmN(D>S?{gg^fZ}s2= zANNyQ^!lx>uYKB2snoN6N)&OcNgx+nSIaakPN}D0amM1-n&?3mZ~o|?%Z0=jWsySdXZRH=KPoosIRLP<>m_qb@@5BFm!^^_kgYgNRNsON;-P}I8}YlUNv zs8U~4wFP&@-_c?Grqr+ro1S`=O;%aZ0fza*MlN8(tk(drSjzTB^g9Q)sB$-S7&3Y1>WS)k4!l;<6whOD zR4gb4hzWQ}2_nx+()N2}i&+Msn3yiu_~L#^g6ot{NmNaIMW0w~@euQ|8==0KDxH&7 zE*tDMc~4N-X1Y3^QeU*CKnf09d%SXs*PWZDV@Bm#D^1h*8YS+s6xGwz;%g`s9`ASw zWVlpUo*K7g_Dvw8xO|+b`;1-kjVm}SSfH-AcHFcpSg9w`euy$LU|E?xvTY<|eMd zVEhUE-Pl1ZHT z{Irlg>*YW}$q%}A5;q-fvXHY=S~uAkRiSp)+!FcKs6-PsPt-23lzOz;*)Wn)YNmcIjL`T-jx>` zb8=i=46kg;%1pj<#~WLYg}YEsIiu4?zNUad5%H>#WEZcR8@^Gc?yO0b>Vk4iwV7iR zVH=J)z$c2_Fm(^-JetDo!3&0F&I%!7X%4kg9qgc>p7E8D0f;-;;uBs=E$pDc9_gn} z?hteX`ZmZgjp|hDIaFt)`eHj}lQhVBGac7fY7(tS9C@aRY)5Ozn#^{GOH!HNMADqR zo8M*`04I)Bb?BlziSJ!@d7~N=i6UMNu7BFTQewiO9O@E18U!r>blArh3q9?TR_a-g zG$M-P1`3F4lj7%L^-6x==Q?mna{y^)fn)Nmk@{xD_!TKO_Ld4Y?yf2@h3_j;485gs zr~Zo$Qu}t#yopjFqaelngi^}nJyJ|<$tXxM&;DpnKom@}vrWd2ovl_~9;?DPefDx8dBZIaE zdX-(9P&*I*6Y8GvpQwI_i3`{O4(-^QK}=UaRO;T}f3*6c_nx$VXoUU#KtI8V9!crq!QEdJ{os z0|tP^h3QJ;bJBiBdXrGs?%{nYDSGUMcib!$^I*)jfri&r2b}l*DETB5I|c0V?mUM7 zHI`m?-u1)%RpQRi<@?sVKGsH+-@)IR+Fb+8TI=_n6CiUKISo zGPuFnY8ZLiQo{_V9eGOKM>qPK>a@;)4aWiqbh}#i2zWL%`0$3&LJK+Lbu}+f!@Q19 zFTUgRe6Q)oKz+YWiZ~bwa2N^Tn=x0?0XTrK0>_jXhmioj;ar#vyJLkISIw#2xu?CP zt&KxEg`CyWQa?iC>5g?_is@|JXb3W^U6fK$nK>`)>D7SSFwuzzAe&obSlq{PMw6ygYu8@50& zC^ez(=`fuVPlf4{q0YD-auXCTL0yg<^Wrf8QmHT6Z0*wF$T2r2@MDaOhJoT)Nx}Yx zIuEaGcz_dfXvp#aUGk?frTOs6)(81CGgrpYS>~vga6^v^ObYc>U=pjuV`bB%710IB zE9&tO$y=z|C$4jr3|o1(tgQutNhi?d-C=BH&f*d3J{;QD86&-EWmlJh&ZL5zNc+Mz z8oixuD14NjgQKQWirw&e3WPZFY~c-?qZe|PIt4l>nz(1{jvAx8m5M()a5DInWqVrdfqqK$3GPVWFvk zT?KGNua;IzY;B|x3px9pif$@z*D)hT7J2Td4ICDiwmvBohMEJde5i))Fbh2=!B$w9 z(jRE$gT>u2?M@mS22H`FY4VO*o_KgGa2{yZM7c=2Mx4i90vUiN4rR5e zWF+kxcP1EFitH?oR518oOW~O)uHrF{OsFr~(mti~OcXaUEBxV0#U}FidF;pm&oK38% z>bz*D>=Nft7Kd9l3r9$*?>h4EsU9=3Ckr`maFKfA;8Q(@Bftph-Bv6hBVCEXJ+~1Y zfiJ>n;xYgmce^qv_VvN>6d)$yrcIzOqybSpTY~|bPXH6*sf@n-MhKmbT@kHJiO1N@ zGO0q%09&0@vpQUh0CJQA;34&8PwaZ4=A4=+G}NM$x=R!)Ilq!9L`u|#Lcqm5j@K3- zlo_g?>Tv}TC1-|Q><$s_;>F|&A{L|1CPAc}i;q1Vx1rRtxD7l=2GJg-EyFmC+feG` zVc>(Vm1wL7kCpEvu;WSIsmeCIuS(7qfa=Cx9R{s99h^IRWWKNw;8FzOTkib$6x@$Bc8{%aKU*Tg;4his`7pt97Wowz#Ftg z^;-9xVEFUU7^Ut*S`vC_p)nq1Y)D&BSfrGlJhQVMA__VCok|Lrz*HoMTx#~=s||o0 zk$fyMEx~arQfnmeg#19GQ1n0BmZVW6D(f5&PAMpSziQU;J|Sfbb)Ga-{!=eLAOYmi zou%-8u+*1K*uO0r1%$yyoVbuPI7ZKK(86-;pq7&Qh}+KGWm~W+dd({0B&R6UJy+~q z#q1O(Z;S^>m=!=yVouCDDCT{jac9XG)>74II%K!&($;>{4>%L6cLEN+9SSr$%Wm7WzSive&Gv(|0^ z4e=-_l2T7Wk+9)0>@&h3Btv!QIxP~39tQ)Ip5L(7o!+%pi-e*#ak-)S?hvkJ+kV*7 z-9ME26bQ;StBnLPun=r4*_)W+u}!CVC^aSR6sMaeZf;GIhjrxXGnhS`B+H{z;GqD~ z$m=H5B=QQFqN~6oIh2;Xw*gL>wSs8oQ2!=Eekkz@y=aWOUJdncBIOl5h-b=S;r$#UdT~~(E=2)>xKXelx>{_4YBqtYCR*WEW~`aZ0DO1#D4S3!CtBfG zhShWOaYB1;ziLkV-m2$AjY`Sc>?*NgQK?itCpJmR2w6}Y@UuJ;y{Oc4=*75GDQyIR zw6u~!0`}_RLJ>AshX_G&w{A%ocT=3Iksw-YQ534Qg3M57J4~S z$|$1PKU-_t=JSV++!(-^2rYb(uk9GVsMI~kKyOe}7bvUps3sd~?OGw6H;%oh8HBTv zH?~MYIB$!9V7Y1y;NigR!hAA8K~eEhNkblIdqBo)2I9Lo%iQYuXLz3t>fml@X z6KZj!BtNH!MTFsrnM40NZADXVcy4l)A^6^;I_*+qRRtJYh|gwbd8d#2b1^3VGx0 zYxG5JL!)l5yTW0`0WL81==FLpn0EHTtx|RLag!;|YHb9D$q`M<}O1pQmZ70le zXjUqD6MAWEJ7J8J^X-TyTflipVw$1cU?Vt9J7gGT09vk2Yf5^s5uhf;tk09BE*1f5 z5A0I>nlRmBYmIZT~x+l+ucGhDr3P|%SNlp$W3<%c#zFBWNfavxwB}^LOqAp zq!4_7s?buYA*o|k3d9Z7awR`d%hjkE91V< z5C~9mBr8G^^C3OTPiKB8IcI*9vRa}?`8M;zaWW}{6q5E+eyC2Ny;!tRt7jR3B&KkmLN_0)Y$0o^h#8W5Cq0jA<>8++%Ky2BbM zV-gRP6x2eeF}QoPG0Gk&Uzfrdm%diw&b_BWe?hHK>Fcb)6UG^GslAw$h82okEXy%u zUI$>Et#s8is#EM@UM2xeqCYcY3ew&r2$<=pi&FQX$ztR+aTnvLf*9aCQ*zB=5&+|{ z_^MK0oG8R007l}&!BF@kLjHu?8s?-L>KOMWZkv5=vHphH3|PQgHQ~WfO(CC#YLX)}ZP*5`aVgr_%-KSH8mrl6&IT&x6$onI z1U%+Dh6r&Bz3Lp9sz#u`w1UUgBzBE##FQfM?mm|1LN2?jrp_jODf0I23(0FS^!Id#O*c zvi_ggyJ#sv43XJJycCFDoV~V%xC2ZIcCop$(t_7R-nbVec|=yR^9GN*MkzJtOsQ@f zRo?Bq!`wFt{S!N?w6Q5*<7TU`7HYb)haHX!NRw?VPesNNdbqXyN@i`VLVX-A(>I{8 zh=DQ@;dt5z*FP|vrR2TVBwBbI%`zBy_B-A)(M!oqa27bxd>cvELe4AI4OTBf;8gRC zTT~^=<%IZ5O1`MW5nsw&E>R&rp$>DoI48M8#-Xqa5h9JnSxg!3Dt5-ebs=ZXsjw&U z0jby_)=!DeY#K1TBuI~ zocDTClU6dgFo}8>zyabwmfvn$oqbbS4`W1{i)QFY(qATj9 z*%!4&oH#u!Ktld5-PWk6m#B%`aDSD$4QGX7>M$GLB%c%2Cusdpiga?`s&vsCJBpQ@ zWx72$!_q;I9K~^^;@duitX;@j4Y}Yz4O1-M5DUZu;BsRD8gJ?>rjUdqm>_xes9g#I z@x+hGQef5wDAc{=5h2jn0Et?+x|l%SlR7r8nR5&@R_Y!{;kro$y@3q_H*n%7tWeB5yOy$T(VU1I>{rCz zIZ-K6E89m)E#!Q8$`;G3RoPDO75b-x-UdK8BN_c0m(AoCJFM$c$VH_nHK4R|CcjxK z?BWa|oS}$@lm3^Kyp$y0a3U+3sd2IUk?f@;`G#c88al*~BIY#G5!V{lun$cvrKann z>?xK^Y^f1M=_YZbglOos62& z;l6JKF@U1Wo7m6BwOv(b@|a`*GH8Qp7pC;$(YC4#_X-qscd&HFE!q=h3Q+1V>#O5z zdl>*%ZA+nFTNQYh+E-3`(kE(uguqAFbf#1lV>EN2J_Y*~6@%uC)Z__ji1ZCW&9v)H zse9OO(H|S@m4Jc>H&FxLOuzEO&g{QyB#aONhnQ{N(E3cygy3bqt;7OsQ@b2@r5rn zfU1+V`n4DZ#KI?2)Rdf!0zFKcq9)=%z>Y2@rg;xCY=qXS5xKbdm0~(K;&j~gA zarHnQ0*z_buu~E^=H+N%ZeIh9hjy(JSN{3h^iiNOzE&G{QdJ>e#3gO6%}Ic(Ku3l( z*UJb3=dSu|YbxL>=#ibX-f_JEJjhbYO)hzhxS4T&O4U#)h1@B(8MQt!T$He$7J82l%ks zqLq+~^LDq)TkT5mRlHkYKb0EZB!eMEiC7}-nN}~G~uUHiFnJ8W%=arVC zCu#?X^}e%7i?*df$f5M85tG(VZg3&zlXS$Swe<#PHH)0{05(ZpJYRHGji^o|pIag4 z)fO+gTva2=QzVW^?ionGDMgLxI0d}#xoq!!C^WJa#;h59r7Fl9@}lJ7?)Bz zdKItGFegn%;BAhjw*6Y_NAm?TkrhTX;}QF7(%M=8W>&lx@&in28;~dv9qI=J&B0w^ z#_?fE7)sqkbmR_oNf;>aoUe;_?rmn;I4CUSY+IJstG1=!g6cAl)*-|{w(NgCJ6WiE zP_?lC1|{RxjXFy~wmkI0BL0MuT|@8Vdb>hRhDTvg8YtDUJKY|@)@NP;)zqwArG7I9 zN?E=ReKUnzq>g&sHjS0CfFufi?F@BywX1sj#vPJn0Lrh_Z8oLBE1@17Wj!E!TnX-rDApsb8Rp==LS0{;1FOAY zG%+~5BF0h+KCTUlWN6?O@)JR|f+CT$WKW?1@2JJ{BOysbJ_|{r9AV_*0x~`T!H#ie zLS1{0kAYxGed4Sh2gMrwE+uWe*wEq`83qT+2$J`q?85kBM~invg98{FfZa7~<1Y8J zQRzZm#|9b76JB9k1g}M zR6=_detsC*E9A^3b+H;O7W};93K^)RL%A@gMGg97fuZ@O+?fGUu7 zlftxS6Sl#)62A`bk&eKIU#aeCw!$~05b(;445-6;LTs&8vhxo_(F=8_E-TEVMbSrW zjpq#_KTQS9+8$*433+4t)p-h??MIC<0wh&Qd8!h661??LPgn9jBd~;?1aEElEEC?E zS`9UNx|vRXRO%kju8hhw>5pl}IGYPl96HIxrPvSO9u!F<4k_d`t*Wji@Z+SR8Kp|c zK-w#mwQ^B>x^VSL2UTdwXkwu!2WwT}Sw+4eI0=pb9viGlvSLPu$b3G@+pKD()IEe> zPO^9#xeYAEegdVYiaQMPz|$T$CGN2Fn!eR};86bL!wk(x_V7r>Rmo=+*FaTfphRKs zMRv2BtHd3uz4e+a8jM>7CCpuso^70L!@D~+HkJBRvW=7`q(ej*o;ITBNKJ6SPCFZw zx=$IX46o+0`arD{RuCOdq%6Bi7V+MVd=^4|JjX}-aB$Pkjg?i*MNUAcyO?-R=(}%O6*Nc~Vv~{)czxn5aHdcbNVPOO(W?_1;0%>Wiiq;j4hH;Q1wAr!yeT=G(TAed z2!4cXH_%cIc)Lw(bYbZ{IL0w5HEwV?yf$ajcaW2}s4kyR5TSC?)@v7F1#@CEtPxuV z;N^yr-&3#^%!~~eW2XjCe%qnmgcXDz`}=t6G}OeET$BmDx0|~Bc;dt;Fv^eKL!J4; z#;l}Uj%z{*`9+^Gtj4S)Tyly89xLOsxH2)d^*qgNxuimVkg#@;BEddCOjfWKGj(dT z^|qW%>rP7DMfLPpHM$e_Q3bo*060SCjANCsf| zV!7}5X6>p@nTZ}rJOHPw6;Q{nOvA3~n4vXCOqBB$LA~0ovPpyGx005VdcXx^+V|uo5$el698$%~H3n#^j=}FWbIr zqeg|v%`MbDq+NtLu@n-ECG3%W+X56FlE$IpI%a)!>^fF*zOx0(sIFrv{Kz%| zbwBhNPH$Z@1=l{b36%T**DeQ3O?a{iq9q6=Chogd1PKOgY)&hAla11t)8bsjYZNTC z%L^84KfSsXj)3eP)-HxeN(Z2eRN6;d4M?0(HjtyTiv*@YHGNwF@1ivsJM(MYK}g8? zTzcu8985XvkKuU&@2&rL+eY)4>AbU`VzrMro7(?SF%C4z@`?OyG&+vDRpgA zH^AJb%IZoHrJe`3f-B9a_EyFZ;~+|YAmi12&?ZYjSv1h%b_^DUqMlcPma%%S)x;LFGVe9cbC9Jl_Kpkn#ffsF@RO%i?U(~1ulIylWRal^@29(sr zSvQ<@XK6RCudLLK-IKUG1qFGefdVJ#c@%em@peg=Fd@MNl{?OuR_cqk>SOVMu>+a1 zrEMZE93j!bNlDLL`kL_`o1p?#24J;3sEd9tt<9uqgA{ABv&697wqk@m);6VI}Wjvc-4NykSF~Z7}Q1$5w}$WmHPtC55O0Rr4vkQ#8+d z)K5cwlH+uX8Kown7Y@$xne^}xS3Mc=yT@$xtr0=fegmZ@2~_;Z$NdI7dZYXXIh*R4 z5f@3Cb&)7Jhx63%DJ~M8R$L_1&A=f(!NfzuX9}34&(R2Emm^L9n;GrPDT@(E%qpE1H>{-a;ZH~g0dSLT1w7_ zRyaIRg0SOU35>z4fcg^*B{@hmQ(_#05o*emD0-?oNHkMIijxrZ3t|6W>UuV{M8`>E zO5I~BTvtrgahe<=IebWfOP8f`@I`8DrXg5V$;E4}8?3<>sj!)7gCQ~m{K){iRg_e= zWTi&=I5wc<92+Q&L`9jA8s!`tu!JqoJCqOF))s*`v$6j|emWnd3I7`^vSu;OP4kSl zrd-F+z*A~=^&N;hDc8a67g1eAqtFX@k?INgb@DJ3a`puEslywC7c~blAfVktyAm zEjq)sp%uoRhK0EESo_}6LcjU>#&ZT_4Pjp zWQ3$Z9i0;<_t~~vH~S36X-!JqgP}xyVxNJR)@>+bAv@H>)K=`C$A$`ZpA90?u5Ei_ z9rXf1akRB~)OjwU>qTcFLNN>c2i=0{dF2;Wg}QXl^Ju8`+u!#!5=e%iy7CdSNA(QXH@h^WDL%1lrLV5lZ4`N_-#H2@exLQsR?LFbZJ z>r<1Rw~Y>RA!kiogO*-4S(5WM>9$B!1`sP?+B^(9>$)xE2Oun6ZR@&qT)&8-BprWB zv(qYhW9~HkDK*pjL^YnlPnTS0u!qT$T*w>5Ok=Z$`XqDd`2dLpF|Lw1M(!BLCcxP9 zRR$o5SBkq44v8e5V>3WpUvZ-vH*H@_lD6xt=C(C`EvwK+k+c%W!;KD>RtzTEE@@N{ z_+rc_5s!O9=>QCzFJ&3`Qm{!PmzH}%ZJsKJQ%cpQol>K>>s_cqpZk|yK9n`)g1g2aMA z^5e#>d&&T<3ztxG!j$<6ar2%;nWk>rp){O?BLca~C!^qnm^|h3RzvZVFLew&V8XO@ zm?zr0_arNCc#xF1ow5r0ZHDr9(h1%10g>FB;2~v1}5yJyCn>)ww0yb zY{|YtF1VEg9-*aB#Kc2@sznsK>TVB>LM!=c5PK7awku)@JwOWWY9&E|tdB5T$)S)l zpD2!Tu|Gmv%fTnA?}>>(QsO{zT4yhhQeSj+k2RyUxjbnnkBrACTw8)z%6^Sq21?HM zY%%ZDWgw+YIl+c{YVMdgA~0*}Rj06^p`=slF5s@c>I4;phbfw!1Z+%{T}GHmD%(n& zm~oFI0V@NLi%Lmp@2ny0EBHcQJ5HvuVnTS_%d@Yp}xk zUR#!Ny2Y1L6MVk-pGuBc+v3Y%dpU*?3B*urNV<`Cvo2O65Fcz}}u;+@2!M4-RmaZ%0CtN`l0GA!cj*9hR z%-opchUGAhrsRB%U3ZQv!;&>|3f}?XB`IUf@zS6j$A8gN+8%{1wxDWd1gXE|9V zS=LeSDV;*eo2Yk<^=e_{X+xllHwd}+e3YfECr>+0j8pO+*;dMW^0b^7M>eI8XcZc< zuu?&3PIrJb^NbxU18p9nowkd|I z$xP$ID?;5TGbvU^lbI+b!WvFHhc5k*zr@VM5DkRPBlRaKQYj4mPPsi2PwSQ5_HN@JSEITvb@d|4oE-tb z0`&H<5E`S4yRs4DqiApAWKS7E?ry1`w5lQEqv&v?#3e&aG6MQUS}<;6X0pMThIXdX ziwUIsYAc2&n|z5aO|(YxwFhrUh|SrW1soLWtEFFbz@ntH6=!dZQqzqo?5MP&iuIM@=Ak}8 zC(cqzEl^eG|tHxOH(pyB^ zYtf|2ZINc&7E0cPLJr*)Qmi&_5HTyr4BDk|1y379BOk6<$r+zi>LJRsK{RrP6jB5x zVWwGEEM0x8LmsK*7j?nB#uL^QOE=Kx0itUF&4{+e?3>v%szTn|ABXldr_u&;T>zeT z_jO`8K^7=R9LKH;8Gu6nML(9baCjO?(5B*1P*wpULr{UnXm%-!BR}mAQ*t(L3j|HB zv2Xoh=wY?sKQXZ_ORpuw$KY6@zUWGbiz+1&5cN0jEu|JYxPDX)F><*ZC?-!_XQ(wQ zIs1p`P{pd&4VR{OSXBTnk+o#RXEn^O;!fs%fg5X7ZfJBVc@KNmxYNcumD`D7QHh<1 zzIN^X;yFPg2(V))8p;UbQ7&ad6h%XT1lVkn5O$?Z(}*<&waXi_Y0cyv3MHkcgoPt= zSTlK9E}My_C>w{_T{S4UuuwN?&Dt&=M_=xrqz zM-&ZNYbbb+k`O=b!BFyE{uU@g>%rJ*i=nDl)>b4)LTwL3;~4tVm6~$b3MQbmJrHe! z9b$n3ssP$!Y*z6l%tE0Hc@t1=d#whZ697|srfTeFyagrWpqbXJ__zfk1`W-DM z_Gd(78B(ZZ8_ulM>_pL96t%XIR4LhLtGQ0rM&6ee&*P@UBuah&co&_{bzu_j9g;W1 zMnSIv_=Vn-u*hLqzcK>PTrx7bU_F}D!X`b#g^^EU3YZ@e%4fS;;KR}hL>M9w0U74HlGicDS^~BSSBX+&9Ok%aI@{W$4UX+yB|n`a z(>PL+LvzR_tN`NJ{pz{)+ahs?k*8UxFSN6Gkx3eN0p(GKRe48;5WK9>j(# zoklZ(c;o>%ZBPLqT=tF(65eI{b!LymF`%!YH4=Msq%cdzt}!G+$=SDFs(g#WEFHT% z_c285$&Lw@vSgl>JIjOE?7E2a7pepAGw9^?6ZMJ2ze3zpQ!xXo8I7BgUjN1(BD?f%Bu z{Z;bDzHRom$w0z3un-Z$%f2`2v6)qm3pFWGN7Q4}sKQ{KnmEgf+s2KfgdwM~HY4;hub!z*TSo~?PNZ9)LA|Y%_D6|js2}f= z&M>TUr_{upRN@8Ij(16D;1YLeSvtFF`m}=#vkU3Xez>{P)%nUPaYUI3R zSMnb3*Bc(pngTU>OKVA`E=)qi+_?Y1T2iUo(jm$u+V;c-Yj1k20=Swsn7T>w-jFvb zIp^b)I#~+WmE=8kG@_u(!UuTTYFqw4Z@UZmZ1P@0+^i3X$kCdg>aUe02ni5#5%x5 z-_ategT%5GU<|<$sPTb~m<#8cz=WL*5EN=kk(6sa3Rg-qMV z0Vg5mNoCHUSx9`Q@b;cNN@)%T8p%W{+iqp8iCukp3&+?>9)Z(ex5B5&dK0_*yy0*c zi35lECUukI3N1F_t`PEmqYLhXWi5$=Ev=L~p4Cj}R}E!`g}v^Y5i#fPe>Qj=aDe9NPN`3=Ov6M=yT|(+mqfzP}jeU@jN(zmm zW;D) zKzbbWDyYaYx<4`iN1cl6t%CG8W>{3=;~XV|OIWx;I;nH6v0z%qEf<8kR$5b)Yb=;n zhVSC5UA@r)d#c#jS)hF(zvwICh+?DNn5A?UIt~nG3kTCEHq(wbrM{?YXVq#=<9M@) z(g&T}s?v#!KHT}vhH(Ogkc+%kR-x#_oiA-5UP104zmZ3$trO;EYqS({5kY#8)#2Ay zX+f7zz+?o|6+4ZymsZJnxrcEd%?)*=#}O_Y0tD8rO)HHQCf{tKrik8QRWy$1$-8wF z(euFBY|s)sBIyOh3(0>YU0FsDmaGdlMbZn1my!w3ZJ=(wP{G-*$<+FCm`>GHYJ%M# zHYPihzFAUr2+Qy|tf{$c*Ic(R?CGbc9tMlc02Cuwm17tuE)$XTsWgEjU>v05*;Nwv zS$U085^h}hTF7a)O9v5EUZa$RW7ib*#)NL<0=+2izc9(J3i&~@fx7?XcoDlY=*7l# zYqRZZD|cr_Q6WDqce_$_oSTX{TiSnNZ#2lUM@-2N@(o(#lB9ekGKU;gnQ>9Py4zNJ z9shsMuIxy5UCI5A741OZ5O>Om8aKv&52kWKl1X(1S?BA$I5$vgNfen2fZQ8a8rqk2 z>u}}K?Ml5WD^F<2kraUaRtC}cWjMfJtGN5`GF)rIZlNCYdoh9y&*z_=^;^#2fXi7w z44zE#YzMs%4qK8w^*i=RC1bw|oE%hG*6*Dh4KID_L8%E=+pTb{7ca*s$3pCE72Dm+ zA!D{|b6rF8{igfzlz)xcqH^ad{bCk9UT#FPaU8dafuTP%p9aZMWpz@G&+)*- zhkY^5;9w0s&U#FIKr2(uy)4E>b#BO?4&)qQVK^??t+vXig(N05RH1rrr3=yUd>kj> z5Ap5ax_JyvY%JZfYG?O5@m>WB_-FAgc48fkDVA(x;$UOj<@utnyKS!-SU%Oq^F>ux z9fNN^amZyb_2$PA7{y|Hz8d_YRq+R%`B3*LQb}Hb6_<@hM?UHN4D`GS_n)C19}|_d z^P~0pcP^j${r9A-gL*ySpO06spGY!_jOm|o8E|wTuHXUxEW2ICUUT+SD7<^9){m#u z5BO`9HY2l>?WAXqXry3;XLd0f%n(v@vbyrP^p8 ztDE%}vU;hfx@6MrXG}iWcTE9zUDLTpVv`Tx+9ktESl$^t8M&XHtcL!i9`Ghhw|D|% z(jDG5Dqj8ZPbm%q{#vZ(hC{w1IdmBgnL0aQAG%fWiF zPS||;n`iZH@6_OH;F6492Uefb>#__gAwGP)eFy#v7c0O&pK{K{icRKuW(bSXz;fv7 z;?Z>x*DY;k`~oyMll`?hd30UKRcJF&N>Q1{IRzcaY+a|)4^M#s*LZCNiFnopU0W&7 zi1a5mmcd~lW#aD^`{MQx7-*5g*cp(l%7}eY)tOB`p?H%mgE2eAT=ou!wY~w@Qu*M! z!5`q(h%IYp z4q49bxHE7dt)$!0DQG@qJ6cW#*H8D!Px5pUb%Kk5rSE1s)EtX`+dDP%%A!X%Vkz}; zZ<=zlib3XIHw6rSD1GfUOF5O~Sbd$JuFrR$up8X9w_L)m&sS~Hx>Qq39Mcl*yvwJO z`2p7l{G3>oy=uNy;T_Oq;R2t0lC`7BEP40dCBS|G96O6EL?rKA0_6YvSF22bCXPl* zh#6^0jdm7HN3*LJ;0NZO9#;u%jFdDgl1O|cg5%m3r4aAK#4oR7d7`0TC+-tbY@Kq7 z#QXFNO421_Yu&9az_q$KJ|klw*!ANVx;6kmSa7zLDe6Sr)&qG*sw{>`qG158g3YN7cZ8| zM!z+;)2-RiuVtJqwr0evYURsi&2+uje+>1S55IQG8ye_U1!}g%&GUvLPb3I5Ehg0d zN0sD=5@zs+)aW6Mgh{`+pfd9_EY4{6;oT0nVtCX;slc&M$%R>f#aAj8-oR)_g-|ahJq*7sWAJK0*ZLkfvmN%bW z9~9{^C_toDVeqqt+$f(0kOu$2-E()C1B(*=4x^d#-Hp>Vf`K z(JB^YG132NYQ&%H_I;}u@YhFWaht!}l!{DurHjSpXeAv)v~5UZ=($xq*Gqmoh-hjC zB&A&Hp2lQEG^LqCE3tKK8F;+cVM1p_bEqZ6uO&5}1y@KCGa9zk6qK)43sZUP0X}{K z(d*bE+ihR2mZ!29fyXF*!kvAHtLxZev)YF111;6$L2|VC5j&NH>shjdRNiqQ}5(17A$@3GwN1>b zy%68I!#n0^{vbL&b`8E(&z}lkSywbDl|e zv8bB|EAA3XW7RvpZcAeZf1Cx?-Ry0xE@?T5e~_DeoeytyfF)Lb-f5n1G^8X_0^Yzb zZ+LVrB>-A;5qqb&O)n*gMQrRzZdbdv-}{2o5BQnB_8oI^ft9QR-_ek%POI-q@7+0p zmrcUXfe@_uKf2OtxFAEU*vJm@DyhNUr*GB3FRv9JCAfQjt?d?`Y-_ZSA(m;$+y?Ih zcjkfi-OD!ljmt&Fnz>b;c$BDvl1kIHbaTv@^q>t}I`V+eimt9>8)X;PlQt+9StqVi z!*+~5g|_NA+cWrQZI#RRg2>krdqUXkp?g+N?=xFNzx>2_>#n)9Hp$4-o2`jpVv$vY z^Mg|VuD}WO%llSlQ{c!oMXcR(7Vm48cn6G#xtwx&Z+#8)TC6t*c}SNzj44qD%hLRw zXme?3{9{#5^;^Q3T^gKuzW-q1I)N`tg}=@DJ3lx~9^Z&3#meQy91FRr zz(G;Ae)9y~hY<$X`r=T*U>Rc-YZxKJj!MkIs+w@;8iMJ47anj|si_(nkw3Pk;H>^f*r; z)F!!*-mN$1b?}8;&fte~IUyZHvXuxe`Zma^(c3_;LKHMXoXuM(^6gN4Zt_;wy`r8* zG6vV`#FG?d2CK4H+RvQKUN4L4NMpH z6pBCjzEDsD{)nUgR#4Z>?>Es#o}w8vCq9F^ZjdMKCgAyD*AXTsE2(zfAkl5=7ssoa zCvasiRmi7b?||zL`TTmb`+B1=mLjoC;}!cH#bpqXw`D#kL_=r`0&;__~r7-VP>pl_pO4#4t+s-2^#lJB;$v_G>k~6x=5Aj7`Mpu*px- zP}AxR%VIAGi*8p+-H(Je_}UA%0{~H!TFXTa%|m9**D{3di-81yf0m3bQf(F%6}5J;(Skptc?15)YahaN3Eo68cC$YN_}1C2#eY*J?oa5KPOKSY?cRq0FUUUd@~GY0PMF z`D&*zY*zisZaGD9(8!%zQXqdRA^6lPcfcR~eIo-qtK5{h{gL7u9%CuMvH4 zO47Lp{*DzX{l1*_Og)Ve4J;xx+YhZLTjvNd1Rm}b-a*g%W#{BS*JI(9!9T?RkAbII zOm-S^KU!-3b3I*31O8eC!}htlrNo7NYRTp-3asg1$H3FQ3f|DNfLDD)9Rp8cg`$~z zqZ~M4K=Rj_JK(FJ>2u~T>O&Sn!9^9B`)OBpz#kFCwR|^d;K{J!&R)$`FI&ZF;0JBE zUGNXEZ!Xp0Ga#32N@eHrQ%r0;k*693t)|m&)zFKs$Ou7BrB-ik%0_yXpwCksOcGJ! z@9uhrz(1O@Ci1TcoU+Ce{Ke8}pisM)&mxl8_q~B$%cyQ<;+S!u z4<)b1`1Y=?4`zkiWN}V&j=!6M=Cw2qxsm4h?_6+Oom!y)-Dxm z&OVwhs=Va`8CudTJA1M*I2xvHtIEF!r;euc6qvI&amvty^4?o`11;Mz9&#Hd8Jbbv zvOmd~kVNj=seqPxckA^lBVza60xqk{?)4u2xYnOlHs2+B5Teo6ywG9KM~egg(1Uz9 zX{)$~SGMUiVTN2b9oM@I?)tOyWs|FSW%4Yh1D=At_W_7To{luPo?72Fr0o|VFdB#a z7;A2QwT^*?T=$}XkKw{OFXiKo`Cxn33cz)f97zb0+MZo7C5!_e3^cV7ZznR^5-SY7 z6uvA@b*{iUWhLPjk_6(KS5O79)vdRs1N#L?T*vKR_<+TChc{>$;-oe6$Vy7cTv1>I z>0rNM0sc@MS%DFx11*-Q-%Oaz<>r*&hy!f!hltFl1gj@;VR019FfmR2cv%_zakp`~ ztS+m>QR_Rfr#^4APDSN=zT1FZI0{whd zsV>R|5*-AakfMt#pBCc=T#xoXp@Wzwtv(Rz%g6sBHKS z%k&}NduMv2&~wz?4e1%0*CwB}+vM~T?6s(!&-(`f83dF!eY_G-lDymiSkw9x)612yuh zyygTKYED{tD0cYaAX=m7w1`O$Vc+b`%>H1-bB%1M}$ks@ikLO$S&%|M`q5jnLn zcK5TofL^N%CZ+~sS4VZp;C1qOOe0fSIN1C0GT;xz?Sq5OyGE9wf|+KI#EvwS2=~(2 zK|*-#2Rh*wG{BmM3N|xCxRDgH`1Ze4nK_jM89ioH%!&#ba3XF;I1W5QS=*+IX&G=P z>I}ysF?41BtGqbdg4(lPUIy2rc-<|lvTUqT6L*5--b@d!p8tyynIPYOK4JF&m>6b(N{R~X`V9RD&BkMDcR*IMI(-1B? zERl$jVSz*`Cc)S$trRb>b(&LY)j3vw^jkfooPXJk?A{&vwypmy77~wfTzCxzU8d9m~bl zF`Ur^ijavltCwY+Uiq|Vp9B6lcTi^bMaU3UH_kDE6(OVdx7e5E0DrCi7Pgw4dLtyE zoDeY%GK%j#CI;ZMcFWM7nx61Ne+vfS3k3@oD1v8s$1 z2a=`G!G*FFDm4$y9Jx62g>6`2=+|PtF#6|?PgI+D)>9;s(q%SU*KC!4zydV9G_&ox zAr9MM*jOc$)PtN2)EM&m-vd=6e z_$(xMF+gRrqTt=sPnk>ut)H$PKd5~=9#gu+r6s(d{5v((WO{l1;}LK0(<44h%EfL1A-ioEm6HQ%5#X=YWCGhVDkr*8UF?8R8VOwj zR#d)(HW0HeWg73ZSyc85T67(A;po>ixy`zq>GwoiClj9fptbgy6mr5?9_X2xJ@-s- z>`Hx1=-`RM$XKvxNRrvwVKZ!?CCMBd3Cn;QgsC#1v-5K1T_&dLVhrd~_Z&n+^V{vu zPKl|jHN?omrJ|PeJNQE_(2soBmzE9w2r<@?54t-xZr&HJh7YldUbY-=7z2)4oNZHf zS@e{pq8*daeOMix{AiqWakar+AR2U;kXb`oS; zPziH7)xKE9>R#;4gci2g7lR~Swmn@#&wQ#r`4{UVE<$|i!n!BP2OASg@gU9|xxGLJ zV4sAvL8Fy-+N9pt#bUOQN0HISiVVZi?`B)c9%$)A8QG?cVL1BTNEJI3QNjkYd`wLr zZU*T^58CZy+kw}m6z$Nn@mT>!t<1LViHWT_uxCVp`-3O?Z|Qjhz83tfm<+m&kn>uR zO_2;w5^28pF?Y^IKzg~i?hl6cl%{S3Q}A851NL8wOjSojM1j?-y&a!aKHo+YIi(Tsowt&u&i z2=EUz)rr@toFXaM6Ja`D&2NhE%-U<54K536qQ9G`I}Aak4|EA9ys}Fk&O7;n!tthP zXz2sx$Jg^4{HCY_Ckm^DZAfPJ&v>tE0Q~Wc^ZJaTMrDIcN`l@YACk;(T|Er`L7lU@ zdc3m->C?Z1u4GfQNNz9HJ5w_4z8~P_=&^#i3io+!YlIxs6QN$BAK}VfM(;QdcHW6v zX23x@u^Yx=kWgFI^oR9>JO)0H)y%BqGYR`%$_My^&-)loE!{;iYbGDw4}GFVQ)KZ2LG&^MEzQIgskUFEXcDiX7tW2dzBmD50#shEl~T@l6{mj zh=yHO7$|nFhD9Z6-`oAd@Q{+&k=v~n7L}@fE73EF!v|3rn$0Jx{y^B*SOI@LX1gv9 z1j#Y0a4@bwJ1e5Nl;zZoICk^4OFn)961%aQGfv)!qc>leYQ;_C!tMq!`fc*uuNm;q z+vH+0B{eY``Ndv=uELuR7uSG0wwkN(rg?G2aOtQ&iY#t_*-}r>B7@6=F6D9A0v?l` zMYql?NTky6wD^2li5qaoo^st=SBdL2it`@pr7<}SeIRTb`?@3Gx}KlIt!&$n&nU3r zU%JJgP@6%e&jrA`t(h2l*&z$U4E=_xm-r=G50^iIzOX+994XlI;Pb1v2hz$Pu0K{jj@>uDOWbv}YWqD)9B#3>(8er)c z*d?(cV+@2?6%?5OPCi`mhSvJN%=F^q=o@IsasTk>^amfC5)!+F)q!_+Cw)5YX%6^n z^^38-m+NWPBKP_Z<5G-fBgq>DTx!DJJ=pM)_l+=lWF+vZ2^!c4g*O)d?i!qYJ2c2g zfun)>ArDHpU9|eJk-c%=xgSSEc*M>5itL#lK(C5Ml%`zqIwld7Q$r)%)hAx{w2nOB zj!82oUe!;)6L;oFa=S5bRoh*d5^}{9&@*V~IGL6AMpRia=Ql?4VABgm=g*!T@S=f}tLH2B{t-Owt3!Z4jvVU`Ab8T&I9EC8*o_gciXx_fQ_a3cW9XN6pBPdK z_|#yst;jYrI~;^X`V8Xe-Y^F6NA&a{j*5O#W@{vJ28sI7HeFC4qU{B_hL&=@9CmFk z`+!`a2#vQ3%g{ol8BRo_ijB}%zg=EhC9(uDEv`$ahx~v)sx%*Tb+@D-A<%fJh67jl zXwX3Iz32>%19vr}t3MDx$(PjbAj&$f%)mZIVh~O9+BQBm@ci+1j*0M$btS`hNop0u zavCMSZ+({x{yOtrdZ+t(@X`9S5$EXcVMXmHzygnx?>RXo*qYKo7c#>nGX=ExVOr^Q zJkEe?IclgxO;7K};{-C2Ai@%hcq8bti{sO_;An6?az{4(aD0+_MQvJtqZ}aAXApN1 zunxE*AUuOOgsk;u)7eBK-jvXvP#$*dXvplXA%K?+WB8#C9(L3nQYdP~Sz?oFYB+~- zdoka+PQ>6JiX{)7h)!+EB!q9xIh_oh$bN_=;I7{$9l|-H0)>@TT14R?0(Zt`g*Mc% zKW<3@hUP`po-}?DN^2?v;(?pN@00m-pES7cllkYdPeNs;Wlj;dHL@HS zb9u7=ez&`o!5`}?uir0k8?6eTlqOK7f;TKP_;guqU2FzeK3?3Z4d4642p3*dO{bQT zKYYsY3c5Kb!HrUUvfD8L7djg5^ETovZd78O|6;2$C6wfjm(l(>xyJO_ZOw0>MYu5t zf9C6p$+J@PW5-J};^XiuxiJamW40gB2DGF?&*szcG1D_h6~}BrV=DUm<#%iF58e6o z!_^QY2DYp+^Qqfuf48xtp|w(D7qywQdQC}6M21RthmR&}As69!+2*%~*TXiBblyt2 z2+)h<^Hl;?8XZ0zx8cj<*5Hno{H*16qqZnTIFr3}@tVwjJSD;4T7k2?z&0mKt>tc2 zub)_OZ$?{QdAl!|8~i~sS(Uf)@t72pWF`f+7vD=k0Y8+2=H9eUALw+@hfH;0jvS%f z$lL1b_yuSvY%%A6%`ri}k)_63B^BacRSL-p${fi>3`O0~B{KZWo2i9hw8N^F+kL`7gY=H8nq~ywFJ>@_ zqK;`#%N*9@)7IcCU3bi3b*F7FO-3-0aMq+b&_Cg_TT+d|AD6A`Wu?HYHP6U;dq_7j z>NYz?w%?P_?miUGef}E$j3psx(K=H zw6@ZHk%ob;r?R!^F|;%c#y&9`2D+Y#I?P{k(z6T?UE8$+xXtGc{#re~9u+_>*A&tG zmOPur#G%kUYI_;{wR(ElWt|WC`_E(@L!`D!T_=#A7vcbaof%x2#+W3Q1%cf6X77N1 zKIxs=`#aI(Ivi<9;|;Hgeou9{`@q#w!Mu#^0e7R`X+7-Lt}QR8Sj58?p%gRk(%}Ix zz%MT!H=!cruWIDcg#f^Ig%|v>RXu)4pc&}tHs|Ua_=U21b5iDaoQsX|OB*kPYZ5); zR0}0s{T| zJ)-GYttjCsslUy02yVZqylo4~27d%k=Jkup8}I)m3af;=k+&Iw|%5^6ifo4Rm z3Ary()l2uYFuo|A1AdrSw_EjlVgv07f4Y|Iz7YiU!X7fRpRQzXgZ-B@o2G3p1`Ih7 zHZ<(Aw?;<;E%mqOh;_5e7Nesmdvm-ms2TLzo7CW+u^DvXL{jnUTePq>BK0SXS=qw z7bV?eR}Q9!(e8?XH7M^qz*TB*i7e`WVcS-9VR_+JrG5^2Wnxc*=Bq>LJ`QsL z*LLc-Srb6vZe?`|yOP}NdX9tiAp!b*(kM5uZ%+*Qt>y#`LqkPU&5jWmcQs3@k5UnX ze=b|NR3wYNMk;|upH*D0ZZx+l5oJ08-glSm^~WVE!zbyp+Cp+n+0b0e3||R~d5R6m>CvhkcQJh%p2t4>5N? z(a{-PqehEW&GxS2Zh5arsmo>OEl>c+^%0eQ12LFsbHu`wrr6=@F#& zzcjnDj)};KA%3)eE;42w?7;Tg} zEs3|t3$8{^b=lW;?|v9i4Y&r$qkxXf-YB382fgdYL8D=^xjAaN2=$_axuwA4DO<)l z3Pz|H>EzPH#m{oFtTQe<<$W053^?jV&z%x|R1I8t%PO3fE9v9ua=33)0PZ-nu4CZ2 zCh1o72veLF7ca!idkrk$uhr$yO1+4eC76>IR3x!*g+oF1qbBoyiZtM>gm3UZv`mz> zMJ}DxOaV0bm>7H2VcDZ5MmY)q=THz`IwUv{=N`pIsa-Ps2O+{WJJ_ z5PkCflL0Sm1Np}N(X>92U>V#=u%1n8NU*AG&54*N$@a*gloQM-4BJ%K@CzqA7~KRD z3WI#SfvJ}72)YX0>rn|j3hE602x~dB7Hn{0`b?0f{jg!!iI0-<% zCNcRONiKF9oFkM#ei_Xd6h=C+k+tf60v*PxYoI}%+TR>b7@TpMd5ysvOPRu~vukG^3v z^)Rs1gI*@1lWac}v-0}Z^v~d*_b8ui*-|_Zk6TMI5QGACL4JwX}Ov zzmDw0v~r@Y`ik1gUK@lTSeMi=h>LJgzVtyy8C^%^tq3A`?n=5xRW5IDdi;V0H$&`} z%@!}AGMDAX^DXnr$vigJJ{d|Dq4u>0pO12AxTHu4EaROQq8kk_nWsgTN!TZNDn}1zp@@h(VgH zM&Og$grWD21nC4O-e3m#%>m~drVl@${o1Gt(#0STXT#xr1|@q zasW^53&&SOk}o$Z6On1Q;T1h=tjE(6$>7R<9Pu1Zq>j$6hLJpC`yI1)3nPac;Bgpf z@P`)5;wn!|uSLAQ$PuNXkBy3NKMipV{`h|L`u&P#=2k5~*}4`egsN9p>?blAd{tM} zRb8Po8>$dnGk4HTRo|wz-`?Ziz`m$%sxxN`-m`X0*ytuA$&T(6+*eQx{#uM7vacw> zqQQ9R!Z`CYAiuC$1YC=OLw07uO=q=Oo9xP@fQ$uW;;(zAolqXN+mwNSO%|!VsUpp` zQEFN(Qco4OXoS@JYflxR7gogIo+>5qH4B^ZC%92inoJjcZ|*2TZaaVW3wqdBD`nIR zqet=ug`L=3r5I%9RVJ~pjWFlI=Q_|}FZ-@PW zA0GCh$vniuGGgRI@(qE@wB`30_~l%N?fdx!mr06Lg*(_WadiX!x4JE!4r&FT4{BxX+ zmnz>+6MkG^8`+@e9dSa?n3WK2o70b9P-*NCKBwX6qA^9##9n7FCbpotuKDw^I`7`W z#^9^;Y>-_v#m+kAiw*J0#RdRi5r6H#@Yml4 z9CazCqab%@RtVz_hv;O$C&vMP08O|NC>x~-gI4rFh%6ZmnQZ(%22=ZaTY!HMZ`NfP zhc%_xvJj>1Qk}-{peY6Ts`0ZJ+4R<;25vIn@)9F;Oy{ev;M(@1L;+um8P-5Y!L_Nf zy^7&TVa0&w%AGe$4DOmGZdtizNy}Xt_w3&eVr_TRarcS?L$AAJU&iB#7;bSoQWF*Y{R|zT=aTmQGX`q<$(HJ~ z70D>8wlFKPtZlHDCK-Gs`Ir{V&oBsj4CVAk4=kQ;QU-T>g)0Qcc{O2D#7!BZ+0W{1 zSg3*b38uj{cC=!VO@@UUSW`?>d4S?bPR6k*fICcO zBuNV3>c3}#*e~EA+czskDM<|A?6206D)ET?L7U<3B=I_kNKX>`c@?#QP_Fm z{v%{PWiJo-=aAL0mrIw`Od^0p!;<9es~FRV!*5$J8NYxtXk`SWdiorZob22_Zue$Agx?irOD>g_b!H=5&4AJl39U%AsZb_LvN`II1O z>>^6cbAiY{ru}6NzJ5$rB*MoemsO2I8>Oyrgt>97Y%rf9@e?KcMVSTh(C6A zi+GIP?95W)T(+^ed7q*fe5GX!!ysrp)Hao8Ex!*k3T@F56aQ)x%Wg$9hJJZ>P4llF zVp*6nv9P2N$*;!0L)UE`(BOx4z!1eJg1X5u`uRm>yR@+p_EohF=J5lyV zU+C2w*d+k2)$AwV2Avvpr>Np6L%qjXikmDAADaUwD4=Je_}u$59~(G9iI|@V8=;uC zvV57}8~l-!JPh{XC?oV`whV?Fq1s#`=iEEW0R8fgGG=q>%=z9YG{09eF%4#RvieBx zg${sgW$c-8CYN#c${mW5i1z&FVc$>cQwD$R6aKJ=)Gw1oF((I^76f)hWyN1$QXM1* ziU&D;?2E>WzrdvuQd0^-jHd^6+suYn*)5BQpQX4@h4y4lsXiHH>orlp7A z^w?CP-o0h~z-zG+5EApO$d-Edf2r&GqG?)G36^DjE&h-D^#we{hQpcA)|dG|x;70} z(o#XBQN8zZ-K#DDU+J!O^**l3pjH|tg+>j}8YRj5@Vp=J$9LS=N>gnB(SpUw$z*ErbLeYX% zwr}a$K5F{~u*PkxE>^V4_B~zl9T&-hJ6rLjJj6uuSsVtF24Ab88AlU_MM*H30yiO%g>}F` z6xJt$8Le4ydjH;0X+EhW>=n0m-Xc7a1dqxe4HzIkEr zwNh5rK48&XmEoJ6CG&F#TYrY9_P!(uIM&qT%N?TkpIL=KHPm%*`WMdDfWLIm+9UJy z&eqyT$QOGx7c-@g?$D!dz*bVDKd_#9&~}bvPkIYB`Z=*>SV42jZ&v&983td!pt5dO zQqHKc>Ll4>T|g;RYO_{bwc88Z56Gh)Y=vNRN^bBm)sWh%$Iqg2q1`suM%j1e48FEenw`H|Wst6%w#VKvRwQp< zJskS&KI6W(2myTkjLnk^pK))xQ3m0Wv5djO#G}5b+LG)CFc&On3W}o6$sZHf=IfB+mWG_wTut%$Y$xvw_#*{d=k@C39k}W7?40IxrC_h^d6+=Iyqg~O zMNrqYq>yE{1KW6EItr4_aQJiw{ByDy<_G*f9{5hlSSs|YHQ&NtEUvn3r4RH%$}eVC zh^wNNuA&+)nq@DsjK>m7gKJFnlvtYozVw%6YR7$(t30T#t?Nux_}Wn~XY-Wp7qmon zTTiTYo2v?EyHcg(%$=#2*!kR~%4s&~IG8mD^h%U4Hx$i?WCmuHA={a(TN*4R((TvO z_V6+I$86P(@V8Te9uUDR8h6b z)hW>Tgh+$0m5gj2EGSWBNe%)he}%TSXx?8%#ad{cgzcD;@e3$150j8$axFAZf{rPX z>4|~(g_8)deVN=F{Iyt*Sy$QR_NW9l>h=r^39ka&*8&Z`_B^c`2o)flu8U3?Vu4p1 zpK#?k?2HsL;HwJI+~tZh*zQI2C4nu0K#5$>-R+5B@W;Y>oV$D)(7XaN4axhyGa_FFIufzQUKXNCchC&S%bG|w?v}k$o7g=@3nS!uX|C8!PoPk_T^qh)Y7xK zN8D@}gG3Vx>U0X|fPV<$rf*j{wp?Ehl?|ioBJ;=Qyl-a%j;7T3Zr9COB|Mi7kD|=C zdoOVeF+3>T0In&})6^S743*5BvrzV^Hym*$FriCXSw=bEyi}C~D>)p$ zfb}&kFfbRAk@uSN^rb~aouZ^3*gThY?z!$cbOzToX186;(gAUY6f-in)!)YnWf%cG zf-qBz_wKodetADKn@a=TvXtinYXfp(M z!>X}gPJh4GlN$WBSkKr1E9md##j5*S4s4)?e$6dCe6$j_u2BQNW+*p$_-G@jYgAMx zYWA#2p6!eEv^^LG{IQ!VmM?vAPC-#Ib*m)vZDE6Y7wr8_dXC zPKFHWf7&(y$1mt}zAW01iEm6&g#15c)fLGYgv9O_mT`N&#Qx+r_~YbX*%ET{o5qIB zkcKhyx3eY;{yLsDp*r|BTb}A6d@Q&$_`0%&D%%S#Wp-o^tSi8-LE{~@yk@)m?n}ZC zXy!XusL_-OAQ_7oy*70XrcQ+Q10mpQ-~essR*oM~_R$z*Yzc4!14!pqLU}@NOr?F8 z54tCH1O8ekY&?q1nj%TNmu3TEW=ppuDIG@c1HKY~Mv|1~$h{_UKc(rUDcXeH*7Qq) zU-7-&rR^6WEE;{t*6eG7XYnmZu-JH%iya!^9-@wScGJ6;Jm8PdIIlM?4gKqu`8Xt9 z=_$G__x~ zENLI_-!1hls-{FL##n5Ei>lQwRGs&ZS-_)}KZ=B=SG!Pp))ZJw;0k*rq$S~pfO+?v z2mG;Z*wFw9vrhiw?q{H6B2ZVr70=Em6afCYc;=c^>`qH`V=`nP0|$ps*L_4c2Ku$k z4s$+T7+@JYTgbT>E6iB>eW{#vdCa+zF@!Pai;vs$w!3Wbby1ZyZqLeL=c()O zXn_bV#+?7QF=p^b(*Jj3OozSmH=GJ&kj?7^wta;GU-xD6v4>7TdJ2i^x5Q<8|D`e3 zI1{^J^s}w+4>aFwAJ!c<+ZQ%JI;XnaqE6tNN38Q9R8E;r1HG)~(ef;g>D0w5GO{;A zaE208ia9*y4gT1qEHeTvQX)ABK)9D@o%HBTiw}HC00;eax!Yk{tTddeu`5ZQGm1!E z&Y+~p_SSKHz};oLdfag}MU!py9M>cvu=w~g*DAG@&^>uSZP4&qyc+w3S(9bmly%r( zmdfN!CJohw{5Jn~_rC6cuUWn^aO~~MS)ekINZ$7?`J^b_$8induXWyqxzM-)d{skM z5)PzvLyw_)u~D8YF0{kDqMTc6o{piY=Sdpxgasxzh?Udz4{nu z8EvX$M1dpRY6~h`7OB18S<=J}HM^{RjAP)5XFQmp;29&nVY^4JPQEwwZpz*?L?~ws zE5J1k{9_b__p9vOJ4!bVVkWaoFQ-a)$=iSqc#t&4OtB%TN_fTmHN`GfNwWW_aGFKa zN^_Gvlg{9dve?Z66<<>alTJp1mrh#bY-8ilmc;gv_G)JP1th-1>S44cv4bRyVlN3e z5-rMt{*g|e!cM*Ihz|IA1l#N>?9|c?Z83#l^`;WnQ_lzIVm2C?wnAE7lpC+igy^#1adniQRLyGtE-@5D$ z`1-KR>gBHw(SOr=#I|_uQhy()1mRVr%$5CuW zBrrIHz$YnErk9fv^e5B^2ccEDwEGET_ytW?>`)5#m|=}WNlL-BvRQSZJ>`8|!oyLU z8`N3TBGh*0vR}}hYuKO{YjEU@+@Wa{!Uh3sHyv6)A)0qCP&u~DAOlM;826m9YyE=6 zAM1HZQbkI653*k z!oA`VN2W(9=8bcrM;U01@+|7G6A9-LUsIH??|ePZeB)*c2_azY6cRwcCb{}d-GB&1 z9Cjr~N;L80y&xusZ0<81#v6uy`Qh0nk^eR63x7PZG6Obt>i*nC8yb~gDttt?eZhei zTIk?1*x&+qh)7>B#LS6)V~1;8^=lJ+U;4fYx_o zY^=+{U?znt0qGez-%GDbRBM^XNG(H7`f0pw@U_#tbjYTIkDE56zM4ko=;qW92}lF( zVj8zOnJ>01WTsmcsbkjW?-tp~-oqboCwp;s>s-pJ1aO@quw>8pMkhh9OJUyb48SiS z!WgyCdvp^p5Vz~*D4MFqz8IJ1$ehoUG5C58j5dawCljhD1QXkh-CoL-(&@r7xPC={ zOm<20!pdU1o~TR!c|5F3Y+S;&N@r*h^bTR5ZOb+;L8`x<^P%@9L$#P(P#e@5lBqwp zGYQ8ppu#?=e3#XcOaU6S{L8JI+zP9)G@L7%jrG$M)ZqFt4H>g#V|`9RgUHvyby0Ub zHXk-0N9zW6!k1@HVN8@MBJv?QMe%g@a9SiB@Yn1*G_R}RiiACjGd6K}D;gPy;jmwA zsS^fY_p1@ZVZV|SFl$$VkM|gm@XETXdIa8kA`tM;d>4zV>KS+o6G#lmGc~zWLd=RO zz_+Q3_Cwn711{awbo(Umcp8VnKPQ218pk{RW+r{)p)dh9 z6VYg1Le|>Rynud9&N%&N3`y5*Lp1|gQX!feoN9Apt;ed`lj#6=A8wyin6|3Kt?ZVf zB&9Ja8Cm02HDXRk|MsE~{DShzhw$_^L1Iow|3p2Yb9p5`m8N7q2snDv-&dAcv0lPFBeO;{fu0| z*HiEY;~BAJ1GSA~$;y5W(fr8e@YR6*VBjU-E2FOBvf#xQ{f1O(#6_RD*mj=J?*aUE zIKM|~bFq=^Tb-W7#DkouAZ6Jx7XX$r_v+!HedpA5a9z9j%q=%H;>jOeuBrZ+G?7hj zcCT;3FFZ=l#r!j6!W-YPc;JymAQf;(e_bHKtW(QM>Uz8C4d76u*!%S@E3P*3O>-rq z(2UGfENa)%4ebMR)7N&(vR^>Ycj7(aC=~B|y6H>39i^K=g_menv?)1D$^Fh@@YiA~ zX4W*k2ZKx#MDs+BU2L#)k6CgfW>(ja+X(TrHXEXj>Wt zeEo!Nv>LjSQZ;H9mtgbViMwfCI`GTD1R{#>E+xb-fRi&sID=mXHc+T4K^49xDQ5o84)Eg#^h=t&A8D6BU(le(E*@;^w$M1~_mhtO>>_L9 zK@fGBBZ1Q0Ue*St5oLiI0W7^d3sV9 zWSMWB{tfO@hx_M~(|^o53#)L`8qpSq0*HDJin2iSRY!rxgHg+%a${wEdq046>ENyKaL-96(M^y?kXPzwP>6RdZ} zao#N#r#fd%4f($kC^5}p8)F(??|QPCG!7-kIY@Zhi_9vfFR)-qQ}hXrfWde40{p^C z=#LS{qEHUfG{u5Jh?jI4R_K7aCHd*-u`X@ zf6XRtU7c~oSw=4_cPnCs+_(Y=Ptl;14#*h}SjoVvq;AMHjne@=gGSRbfFO4YSTd+2 zL4Bc!)ok!xq=jFQ7u-f?$!wv7B&|2bJ!vg{u(K0JlFoJ!NA+ogzh=9LSx(^xp{j8~ zp&82WFF~_mUD38#?tKXXUpGrz(Y9GuO&-LBkr`a5#w+Wf=t;a?S_7_|r8T6DaZvOm z#?q3bf&6sd=?=O}@VYd%!`2*s{DLm7aTE``OCvj6XngR78CaYU`#(k>20x5G`c*}P zOr5v_F)(J`ws?9#82)iU*s$9c-2rh+UQ8=}xXc8dcH4E6-WKx){t@-qz}v37v=;M9 z6=SZ{`rH# zFrK;VQfL5Is+aP3Zk5;9(+|qvy0|Q;zD-#p z4ai_tLGax@;}As=?&}`Ow>Q(2^?cc9)IEu2BZp?PCoChS4c}WUCA^>2Wp+{+799 z@I&TOyl!>ZNi@OF^J#3px0MZ!&cl{uY4~S@c<{l|dk|_^<)s{n zdJ9QXhw~^T*jtYZL-Tb9W!Sj8a>>L27Cd`9QGR>UuSb{`0qVZ(axyeO;z4LJo`qPs zCycQS?2{NXlV4HxSIH^{&hOsqKW2 zmM2+7a^49IY)&DO!oF_%Rt?OncMOm;8%mhhVWy&J2U$-Oz3&J7MGrDwz*pMa*qNMV zddhsKiHv??KyOlbLg==aEoH{gFK^U7EH}|WkYJht&fGfSlxXz=|22u23!jY_v52UxBF;v6O9$mVMO;vnNYfVw-ew7TC)LM z)Ob+3c4hioOqbYB5~{bUx88>7|G_vkz+bbl`<}vx3R@zXAl1cenz%AC<%MJpI?{nQ z6L=8L(qjqRxI2Bwp>btB@?Zwr5Wn^5Gx&#?c=hQ^NvwJAL_Hta*Fd5YPK#6n@5QKd zm1@kL({O@m!QtllLQs zg2GoWxg7vD0!Dl_#I`e1ojp>AWa0{DG;+7Ov!VGJ54Nu{1!Yc2 zy2TO*Wwv*&#VZ2kiRPE_-ck~9R444!wsjecd|SpCrJD*?ckzjAKP@~B_~V;JBHMlC zDKSwm2A(@n!2-R_`ap_SJ5m$SuVrclx=x5EK(l2B>%gLKpFDqKCJ8vCuFp@_F;8Q! zV(eIm0s$>m=R+2Bgu1;|L-Pa9cCvRnWI;!$>QEZ^W()gmgZuIIWCMdE|9I>a>tqA5 zV=dfkUPe@*1hjYG0b2KB+^h}CKnY0Jk{mlZv4}BMf3P2)b_RFtad)u0(=G_ZHdYzo z1&*9-iqL%QhZq4ZB{sWL?1&J2NJLzt>`Y|(d_(0TZDKg!ZD~XU&F^&d@vKSw3kN)% zN+shHLSp*>`)X1AMn?gHuD#cwDN8iU)an8{#tB0hum_h6R?$VW82nU$+e_FeG-r4HK{~eahUyN^EJ3 z-r3|ba8m6W=+`n##<>ij))mENAd-1Z=;*RHj!e;Z-YN_RTF%!odDu+P&~~m!Cb_Yb z*=PgAk*^OsgC8DtnHC?7h<*P?%zj3DInL`0EsdSgVz-^5xV$b#>9Jpd_UPhm>?`uR z{hVdMwKzVu3Ulc|UZ-tBnbMx6lD~}htfv8+!C#9a`e~S~eHP|^F|P($Y}d=4&S)QC zezB{Y(9~#=O;JdNnZ7r!Ke^DfpKgi6HfcX+0DM_pipyQar8wVNC``7yuG z_!#7!NOigS>w9foYK%UTcjiPslz!?Cn}zL*!>~|KJmKhsB3iuTL`&S+(TyWYby3+SU9FFk0=mBxJM^rg|7!C#AA;pjm-qcv+jP)uFo zGIpsQ-tB<9=7YOiXQdZHm+5Jw(H6#vvpp@p>qi}wu`;MHMfKu^#^sj zUGfez-|R3+G9jw2CM^W<8T(!i+@Qw;?qAYC4Zd<223_9A_=_3*b?7e^ISY7i+=&j2Ww^vSM-lKtjv`wa zQmud$=jgM;Desu&1@z3H=s%NB-p|bPx>%~lGqgejhpvXn9(_MM%fM0;!EILSu)qdM zUTTryeu?(b3N!k->u^RV0Q@1!^IeBQCy)^q7qz}xx!ulRP@mXphzzcK;bd}!y%6;Y z^Z+=&BARSos5oEbSAZY0Y?0pz)ZBI zwD*NmIpCk;VV7P-n%zl_Q7XIMRrmi}_Wx5E>p;J}mDN2?0H6F#HGgroj)@o3V3CHud+L zf5(kbA*i3y@eEyqYmQ|Pc{nQR>7&D5TH|woW<`Z+j)rp9CY%FXA%ekQi&2N2wF&2d zEMv8;F2vETev1n5_}Nzq437|M%_(WKaJ2%mWuYDq_x!piTNzVv-{S%Nvx3KsgU+;l zQ;+Ap)MDu_)jI745AdHop7sN+66&X{D~y2!1QChA?a3Q^gD$|=oc*@v>jLt~=Q}$u zh72p^mCmpiQ3C#13E=o$sok=kBE3wT_5xa2JiP9}gGMn9fk7;b^OfI`9=ANI$OAFQ zw$9?h?c|k#o|$ERnmC5Gw^ZL0t^(`I?%o^*mE4S9Iy znA7~aNhGyhO@>}YQV;?|BqfWfH*q4TKd?ggR^+Yf3A-J{G0kc-1K!k&m1} zll{VIcz?@JH28vFQuF2ghD$x=cy;iNnbgApH7Nvqgr`+DdgKnTTJhh7&v)3JSwaK_#DlpXO z$%5&0e;DwG%EJ68{qBG!R&=U24T?`CN(27LvMeNa5~UFMZr?`$)yV2(K=Bo&*x;YF z2mZ)G6N@Qu*CMt%rg$0rR6)a=;l&K|3($bf%V(0IOxbdv%xDzlGXq?>d`-2?nV-Lv=V z8yztTHS%U$nm5HS_F{uS-t6D81Y$L^ju<0VAn!P>6%6=?5OEAfKsPB#6N~;!sh%8T zVwU}UX~18LDUrQe6SHXH_7=Bo7Q$m5L*>G)emvWv;s8rJi94+*+Ul316~!$5tCUA$ z|3)ERx5R@&e0F_(+Yznar5mDFyRvNmnalSk0sB_6WAH=CPR>G~i@gZtTUe1&+S3Gf z%f%mPNt-Qb%A>TW32fHg|CR;|G23(fWA5(}SJ2>xT*0W`%NKR|bRxY~#WPC9+qn-0 z*9AQCW*hW~VzDfzA{K~=Swr{Y7K4i7mdj@Fk1`9Rr>M?O%<*p`UT0K)zUFNk{FJvX zdiEHZQ;(T3%CNH2ZcniSd{HPF#mWvlttbk+_s%rc=f*UzFuV`X0!6?zWE&nTP#;5) ztAS!y*#qUE)!IAFIXxaUl>pa*{NUo4b&GE*$y{_Ex%l2VE}u-E#)<>}_WrzhzH34y40L#Gre!DCfO-qY@N3KZiDM;vZy#= zr+}+0p-)}b2dDl^Z059n*jyX`ZM)-NZiUP=AX}bpM3zXH~fi0XLb;k=NqSs zj!P=4Ohsx@vLGZHk4o+Hn-qB`8J(e71C9u{pkw5Q=1%PYuX`BF7%0&Jw#DcqU zADA9cR5xQQDxU7c27V18urDe4J(!ygp%bk=w?9($GbS704?eMvig8()7?r3x7n83O z7x1jMnX{oK%^IvdJYC5}Qiq#Kk*T0b%q=gUQy$BO4E|u9T2ATZLhTm1$W8Ty;N~_W z-PyMZ4ZX1O&8^JX_^Lp@C49OHwHHy^3l}FII9%_2FBWjQ>~KuJ%rOS1>#fBC)?~ex z6?@^{?u*3-yRQ`kt%Tyo_lnO|t;+ZbzhlcV@5WR7e@0LQ{IQ6A{BI55AasI6s@kG) zMAMnrKPaf|&K;or=h|!_wp_6ap)5)L|9WT8@k02|V~hCZAOzXHRKSIwGDZhoSY*8N)p6+_FWXph)D-G9xx zU$y&9ihKNSP>uHrusvPS&~wvyE>C#6pf*`340%Tb>6z&q6~zs%@AXrrGm7GzJZCa; z1Nn3ip3WI`fIlQVmQOAWx-KmMj-`VavBYD7uferE{iG8_NAN{3K^?bP>QwKVtK!>L zZ1C4=@np^-&8=c>jFJ*Q4ljts;%Wc!0RGTeJS?90vhNgt3nQUYWD6f4nImJfWcNA% zp!wBiTTnJd=GSJ)N{ylx8E^Iul4F1;+bymPDirElmX)F9s+Kq3!{O!YH0izg3jQJ}ZZc`kSzc=73E8}q9Q4E*=+Ubwvzx^dAmgl45B7a5z#rTHW9os*lq7hHOfRh7|2p<#J`Ujei0@@FHMvXc zvBWI<|3wP;jt#2UnNila4Ov5bB4)<{tBkTPM@~{|BGsxo;_xK3+N!a{c9`XWYwv7q zPAJz_jU{xFWiQf=C0sQR6&)#g9Y*2{9B)(m^f|$GyyzoQR4{aT2NB z3m)i|(17^KwMKK}-6Ewz);hRbVHSWexTT#A^g zS?H3xd`m?plL5QU%aTYYo*wK5o@zjI6ocMFLZ6V!n3Yb*d@p6p(fM6LbiX zv7g#b4ESe#lDD0JN|m|vmST0!P}!?g0so*2vIdOq_vUy0OKySW&;%g5s&z88WrKc%LQvcJ@g-;1BX?TfZG)3tnP< zN(A|#$EtZI0oCm`Vd#YfRE;bs*Q^pJ2AKszUa4csTT)X7{c`sCq`|eeHz*rs%Antl z`e#)c)Eih9Vnl}GZB+J@4ZvT^px!~*aMssR2WbQr=V97HZ*%*sZ_Cq$o>NIenw6p4 zYL{L|RmR@?Wygr&^?70JZFP17@0pSFp<|3a5!t#|;vy5}$DB-TS62;EP&y5TEqZxwVnTm5Q912w{_rzSb)NeyCTH zk%g&UaT*Czf{Ts!7E=b-5Xv60O;tr~EP}A8uJxCw$aFt$UP{yU9BROq$gQnPnkI=r z4ni8Fv8btoZ#B42!gAU1V}OtLRF+u0!(w1Wh~VZSetJ>;Rak2 zfgyfCbp+PtMae+Y_lPtTF9i(y;mcw<_3ch!=!L!4%{vUssq3^+Wl_+~sfe_azBxHB zK}*AC)i3w{#pCnS;av^T=$) z+kR4#H?Sx0Wna976GYHq1et0ZWbQA~adb(~egcBQS2>vN#TupBxK9>Hbyhef&uIH% zCK%wS+P5x&Dz(2uMW00-O%n3i{U}$!^}JgI4t*x$f*6Xg$=sN#wB4W#{%B`eS?0!ACCPkLJz7~z5I?Bj_Oo08Ka5dR z5Gfi}h2oVj>=n25+_gfu+bn>eRbkz%fwc9bWlK)<#NV)sizx~--acSIN8I3RWoC5` zPznc4SmB9Tq}GG`Uh$5v`}vy&UxMSZ8om}C`NmDHMD*KtFyf~E{5HL6-9BQ2zh=*Z zK282ij`;fi^Vii~BwV;P`B9OSUF7>WkWlkZFDwD<|;z%wrn+QL_i|2WQ=n zX@qxWyn;^Z<#BPvRfKTax)0p|UoUGlAzZdX&ccL z=IoME0&e=d%Oa27H-!QJtmJfq$>1VTNqTC|iZWYCW?{CI$im?3XKT}yWEN&aY|(-+ zNO-hZ_eDk~wRZZ(9{4q_DIN@}#fnGv^s zLRLlI61olkTFh1K6S69@n|9h*3KZirmOA5B1MYfUe=3Q@!A5SjvY-vK!gN3YCgSWH zmj>6Qz#g*A2*5;~0^O|YTxhh}1t+}QRdctj$pP1D?w~m%fI~G`c#{|wPjgx0b!+*W zJk|^6w7eeoOcH}@^zf_(x?PAY z`n^kWJ&NipF~bt6@H5s(YF{cbuxCRR;~HojRkX#G#1Vt|tQG!$`dag`Wsku%3mI)h zvm9}jJv_gSHb(NQ4Oz=V)W?w|#`+4ojS={Ta;&qvsv1d3w}Xi!(jum=eIOU7|DB8k zVC=H>k{oc&ex6xE7h@ru~U;z3-%sg247`>YgV9znkqWLz;jS+ zbeBrh?!z2tz+bZy)cl;y2}*JxWv50an8FG0_95K9LtyY#&3dmPoVE!1tyBKuWIU_v zj)eZ&Hmf$csz8Q!j}7`jhfR}ttt2xC9%RPuC)@6md4sQ{5_8BvoGi(_POE=MoYY6b zj#1TqR==UW7r4P+i*rLY16uut#0xy#SprsaE|2*}RVvP^Y^p==ZWs8M_xBwV>4*)vPgCQbCcXk>4WF=GblsCr->adgYZA~l zu%NtNh}>?8+^P=clu^2sg-GkPrQ@L7;E(P2 zFxXz+dwqxZ7&iRZiG(vrXcPPRYMHo~*^(ZCqjSwfOd|=7M|7 zb)mv-laYm(J0Vk&M z26K&&SQTE%6dUaJ3jDxp@v|9Cakwc3i6^2oebBcQSFKsohfJr`YA zeS5nG*Oc0Bw_-gPU0D5^^DbhfM_bRjRiQUtwi~m-*E8O>D)h#S_!TLavIrZ}H$_T5 z?Ts5;AF?I4))gt*rPh>B4crn>Vu1@*S8H(13ikRUgTEG+Nt@(?F(bDc?@H;MR#>P= zZmVjk%4zA`;QIBBx`k<}G?mxVxw3aym=wK%^ttZd;IBj7y`2YC+`g3fRwR5Y=sfK+ zFTj-(JW5gs-wHZUlJM!Uobt{{V~}I0!BYo>mc5UI!8PHN%eKi@2ZR>&anNZwg`F6{ zsBDr|H;v!+Mh*sd1$#+R_4LySuDfwLU@$V1=iU0Sh_LuN6` z`wb8B+c^D>t@RE5`Y8JMcBxTjjR#g9N3SzF?|2#fA-#FH`KZASd%4BTI_vU5XS8Qr z0KTfKozV>ZcPuKYkp1^gB&0=7#g+z>gDe{rCS8?% zK@9LmqW~KfCS4UZSe8#WvYrv!atp3hv!}ore67?pTU8pRH$4o3OzUAmE@)wEWoj>9 z1N?)0?U4!<83ITH$U+HqWMFLwQ?>=M0e6g=k%0|iiWbC__nm~d9Z?XAZr0U7mDPSg zk9uR@A)O!7uC&eyr?t$p$l6pRYGXX=0p;BAN+Y!=ZAP)hB4#;wRqjLuxzNElZ^c!K z_Wra6*DBHAIhu|^&jc~3RS(rfWWo0yg3DINnc5pI7+g1wF{jQVNciF^RqGOCX(m#e z2(xqEY?lU+9{XrA{^c*Z;VM! zK#^iLelhZ-_Spg8dfs+UQRR@A1bvJ|a;()_gbeRaya?bvx5V!TL!qoS=hc>sOrV_%JmTQG7 zh!G}E?RMV0dycZfwH0OeYojgU&FeYJNl3=JtnTU>eg_p^!>=E&*{)@4y-8_V&E7H( z#cbIvtO{F;y+1GDuh|!7URV{z7V1VXt(kZa?(WlOXfKll{Bh(zY=$JjQBDGpMcz9) zy7UrhWR$eGZ`a_usK)qeL>d`IZHY8$7Y-9e`2{W$I+G-wM(YEv=g{z?H?MRbtw$LR zd$F$H+Vo!%qzC*%T=gJG-$l-$PWg92xZcNMe?%rSxC?JODs*<(4-z`}-C|+xQ-%Fn z_NVSvvTpFlscV%CJY`Vl>t~+g=U@1wNqq`80^b6RE9C-o+M`QHRH5U8OD@K z5^L(|&2AiJ=|@2mv^Nq2eC7X*eiT$e(vRX#Hu}j_*_&|g^(uZcRUEwCyxc3+QxZM` zl|Bl1czOz0t!NuI8hrg^?G&(Dk&^2_jM~@Z48ERu#@j_0rS-TZ6LB*aOY>BHobL9Z`Uv=Xw@-C}^r3<{oz}p#HtdVq z{(@X(@4^hY#>m4V#@b)dtEg@6#b+KF%)g%!sNl_;MDFK*0j?`~7<=1S3%)%Jky+k$ z)1RAeT(*1{y$$&5q8z|3Tvur6`|^8A){Ct ziy=Celow0xYbFMNL~pBD5*Djcj3bgHVpaQq5(=$*c^lws*UdhlghH#-cQ2iuL5Wy} zuSX3oov(YE3*g$i9uL_DEkIPKT>~+9O}wc_Z;NkBYMXT#{GkfE)+MEbXN1jqQzB7{ z-!9OpKbYGGxbDfripT2ruoTSG-R8;>Jtio9?KffYM`ZrNZz9RKC~mFf=t5O9GThtj z0si`E!T=*f*z9o{!b9+Ki2i0#%-*vw0AJN@pN1YsF&({FL<_e4w-!JH{*Y<@Z2_dt z$SJa7D#I9ztrbLw4#BZ#VN>8C=O_)8>?jF)u9(5s52#rA04IU= zk2!*466$;BDE^c`w{8Ud^C|DsuA=ssthBr#)SS3AXC!67o#3lar6HRd)uv1&U93~K zzNRG9As=QU1FjEw_)Z|94%uZQy@|IJbqLGtg9~tL4k}WBKazs(mX!Gv*GssTtlhn) z=zMy&+sh94no?Us2JaU3$l^gt<>!#E#diWrY8y%!{IMtZbxE~x?y<8-$S7LC1L8O* zF!*DWvIEHH1edrmWa>Fr9JfW;_S)jxo5dJ>Ev=gO9a?-kJzRL;LoE!Y{kUs?H;@y&?OvU&Ru5Jk~26s{NpW&+Z_SlyvW)5@1 zA6cgCaJ%Xd;Olm=WSM4y-PIPFqzO72%xuH(koTLT!PmsgY{T%7u{kn}D2Bo>XE8xN zCjbKe*c|`1ya-)X&N)q#I1MfE{p>v}4X)ph#pV`T;QJBJO4eRbl}5T%$VB`}uy<25 z_~X^CCxLqX39%)&*~?v(wX4zG@g4>lA{1uFdT-~!5{C|vMxW)$JRUy=g+(a8K;=Ny{s$n7GpW%%@Kj)|3gkYfVA zat$rVjGpz7#4x6EM;(%eb^PbP$O-soVI6GY^s+qbE@v(Uhx_knbz2ED_-nO3dPJ)_ zAwcvSiT$jLPz`hO2f@BH1h@z(G}&wB5Ir3P>T1PlSLS(($%-Y(E8Mov*x(O^o89cf zwUF6l+!IWA#ETWszJUt3K4Mc=Kdpd}b;%G0W`;oQHD_J&oOf9l;A^vZ$-26*cu;K2 zH{lYf$=@o12K-PFq~j@5B>q5wE>+!Ppqbo{Ffq73@_3tFrXRm4_(`7KUNQWnZKEn?(-YY*_(Y`o`ATg1rPqZX-1qEkA}<5uS-wGYh! z|G162=JIL7?YI2m~I3e`PW1MgMTK#`Mpu2)th+>1=Bq=wZ-s>ZM16ewV{|S zwZ-rWdB{4|mM5T8Kh@So!Rl$Y?9V~hA-f2BsGd9 za2}UEs);#hp^ipD9uIR+rBv>x)f;>*gbj00rBv#)da0Gv7HnLl^=xso`-w{if81FS3rZ#+3k$`n>F}aMb1V8=@{}o8ewZpK9Jf+s|NoNtxlaiCAbIn<++$FQ9SA43$ha6 z53a?B_^oJ4z(kmeB^7){cR%L|@HMr~)|fy=S4p~copn@O&A0axoD$q!iWYZwEiOfa z6bViU?(SBKTWJeLi+d==-6>F{c%e|-ibJ`1-gn)#?&UteoPTB|C!e!t&UeoqIcFv# zxt#;j22ni=qWDI3kFT<*szg_euYvcMvN-Pfu?a=|-8DAi0q1^?ku)-OMXr|TjWRX+ zo}u@lAtkmqz%vbEhGoGo(+iZP(LaORc&>j~HOTQ%#D6jCV?L!+lq(l{e7m$OFLb^6 z_KLXt^sQgv%Z>$1GAdl2f^XW(`~^S@2cHPcr07DW3O>~1l4D8P&Xaah;dNYwAL!iB zCUm9|s(JB8pJw!=m{P>j%*_eP&ehdLE$ZeF=CNPY#1YXIclE8^w8~-aU~I#cz!cB( zzQpMj%*fnX*&MVJ!4mTH%mXg4t4^{iELQ;`h&yN0GH6s z>(DoQ@6bX7%0JzO4&XtdaeaOH_g>3-63bNRft>HS>(X7`P^hKYvEy`nOC9vC!*&E! zAA6J4&V7KiY3n48{bi<|yBh6I{qoS=;^T)DnBkLjECfFm!VHP2sBif&=S&h4@E2#j zT6ObUyjJAZm1?W=HlNyge*yOwvruWc@iyZ@o0+OGu9Y(~nw*zdrWevssx3vg~X@hzx zo84ox$4$ji^cx5pw(hS<>0e1uvj-wyc`!Mz@f;BB!tJPr+@0qt5rC; zbh)Fi0QjlRL`g*q1G)FzJ9VuK2UjbY;kxGs`jfmLfAdZm$Q!Jf6B~2hd4EH(u*1+|#uj)k~q*SrdSlS3a?Fsk8DZLI1Ngdfe$<`tK>T>VO;KgO6= z<|Ni0#3X%i2O%(Z50RvhAI9DCv-I#gS(u)|*#a5f7$1wjZMjq}4}JeeL3AK5MJT!= zy_nT|6pcOdt3(lgWa&*3sAXH2W+75g*5>*9^A^rI*HPH6|Ai~K#8s_%R&+Z`hkz|E zp`Fuf!q3u-`J6rtP6vL5a|6ga%#OKtkF*-4=P~7~fOp!yx8520T?bkk*BxLpc5Dk-kz^k(YRV@#3IzGOCt-&jjp@xtCI5tUd8ed^m>TRAVn9SH)C*vybEgTpJ{VU@&eUlBfkGpRt}0`2JX;|wT_ zUfcQ6FfccNfBKEO9W8}Yry*ERxf|bvA-u!zTf)`rajd}dqBMM!h{1d^VbHVc1Mc}-I-^Tnh~*}YJxi2dI% zwe+ce8=DA{+7ZoI_Fh~tW~2DAsN$T+PO^R^QWsL~_XDg8GL)q=KJUvU(qxU|VLh+# z`BVmKQPLqCAa-hjSuBNWZKylRX~a~p_iv1e7BClRty2|EX6&w@Iaw^>e3-^78LKU? z;Y^3Tu7HiaUV}y^H?4=-0pQSfN{=us^zG+`wim}G%(B!3WpWj=2TN;Ol zR*d=lYFs}Y{Hg4lr7f0k|JDitx$UGg{k7a^#Tdyup48V2ZlDMae%(uOUi8MkDQ@8b zrB=kBz3)zFZ7Lb+bf;K5DxSMLq@dk67)Y-=onA`z#Ow1QZ$7WL zQM{LC&;E+egkmmav*QN0yOYpN<*rOSHEGb^)bty_MsI|MhOM!2GRM#G;sb<(*lPOO^a< zank|JFU|R-U1+c?IY7z?&eTdRLvNL(;yVH2S`gRdRkmZ*B?)#nQ|Zz%?{^dY*7(iO zY8yK{+UfQ`(K${*Hbd@JihEdnx4J9J9IqvZ4lviqUgXK zWQ7kbT2d3sdmYm1?i(G!@?Wm)59QeIJiDqFZkOl? zjV^Pv(e}{%@scos=`PrqqBkgzcc+Fzexq=Xfw>#iAnVza!&f>j~Q zG|i(;*paMbNcQ&xC%GUQi%1P$WN2Yt>(-%$?X?^-wy8UoR^vAsJd2NCYegCa0t6>d zqP%!v!#1;_>K&Ss=CVG&99jY<6V_ko?WMN4xCw#CNVkl)$v)@9Utcrmsp6Be7N;T` z2#uwY8J)UVmw^m-?N!%=bob<*wdG!fDQ~9VFdwryhu5S5e=}!oywwBnEp+OfH&1bP zv$z#}55!$jI@sOVgcbjEet%p{)LZ;BVOpXT`XIv1%&;lDDA3?#In{z<=oK;jg^r6{ zDLf{Z6KJeAlTj~({`*8QOF|gk{_xgmk}j5}6T9%J)h3)<#Z0h+-7485b|X@h_6HTx z9!$~WtTbO_f@l6hn}s4omqnfi+kU zdRB&Z4t2s@WL%rhswO<-(Go0EpL93^j0J(c8O~df8i&PDuYJKx0oLUyFc0KC2%%ZEl#7LnY%^x(Y%Z<$djD6_9M!|edZlw#+yL_R1KQdX-rMNJo9 zf7nFRt)HIsPqGO{I^pb%X9g=wa^>5*#xd*($7UlS(HOM$e_7V(Y}o8`0qCvrr)$zQ zkO_(rSYvgEVtWKpn)2>=T&*7gh>Hxn#f$5d6>4%Zm7{B{>80o^@7@Y zVM41ooZ`Nqw$D@+r?Y8y!ERil(kTeIrjC(J<|cmyaHO@2(e`GjZ#(~XGQUL0F%6~l zYIJ^|wZcvpUIA$^^*-35d=6WK!miMep&@DH)$hQ~MH9QsF@#vH-6N7~3)>|=qp%C8 z-O^Wfso5495n1RxXLhG#yDH3UDE`JN@{>Gz*>pYqr*_ZntjZCwgQt_cm{3|HA$K-(7=iUKhJLbZy9&jqw&E=fYb)*!+Q05k`FC{u7u2jETzO$>*`b_bXgElB5e~r)SbT_Eo_STmsEq&^w}y z|H$0f&+Rr|Ds)zF`Xu1VqRp^Ka>4+Av6`poj_XS=y2Xx4?W-!2)4o)dZUui9&toRH z>e4p60NMQ`v_Mfs#-ooNWOF8;-q#Xt7>-MwsMOCGSuBmJ#OYqz+6^*KG?Iv-T<|i^Tz}0=079 zTot<2Tw-+K0LBT(XL`)%tSz;Q)>s=7t>E>X@qtZ;N@45-PPzgM)j z%RHite?q&yl;mFU*fo)1NEnFRmEwgf-ad2J^h<0Z*4$;b)G_pqtMxYuk zGOC!JBkJee*?d>`KL0(6RKG_T#A;!^87{mbOGkt#tO;(wWxa1`-5jap)iij@inb~0 zx1|%>*p~R*tNXO!HOS_2kL$kSVwkulc#>&|R{F@m!Yw{PGFP)IR9%3j7gF7(Et9{k z?lR#*k(1zb`RnRgEaLW<{akTJS5{Gf)3vNvPdTHWeV~Vj$nF51C0}MkF>-br&z9ZF zPX{vSoA}qkbEtDo>Lt8)0ie#o>H#roptn?OPU!`rbxB=+fG__UzzGLMTloICezS3T zf>II%l+Nw@EqRV?1$XEF)#WkQQkCOM)35lxzkgMP1ukY|TYUD%rS4GMQ|6TtVmG1a z(^X9o<^OVz2Dn1bmN^~ z$(*9TZm^g6?ZVc7A{fJ2L`0BJo=EQ~L_bq|^#`vzW3za=cK9?L-IE!%pwPG9XwDX0 z<9a4)#>Uu7pkDH8wRAL7uVD@{j5Nac`O743dt+N`JU*#0~H)me4`JBsO$HPiLVU z^0sqCp1dDck?5GgU|4+gqaHU~IvSiKO(jM19Aj7u)K5P3T^o^ zk-Qo@yO&rOMlwc!B)nH$`x~gW%!sE;8R6F>OL)Bpx^_(it7->Z{`3mIOjgeOU z51CM+vi2XlJpu3a_*v;Ffy#&`LIV;74mpw*PgKR+nR=U`G&q{wp}@wvZAd_>^+k1W zyAKq5GmX-8kz}N`*apB+Ry`IW{qPms(D)iLU7QNH*E{(MKR{H(F6d&>HMDq#-kza9 z@jrKL-KVzwKh1~?E*O?BjG`#-L&Z&lmgIw%tfvCL0ngu(w5=rAgx9Q9(M|B)h~IWN zvlNfDL9TPtQ`bnMtVM6$?)W${AbOb9vurg)ha@f(9|6m5+;X>TP)?!DC&E z%We%@_zknQl{5(djO{{R>WGT3mxb*+?#+}ic@o75VcLFM`ydYf@)(Y#5cXK{na)<0 z5!S9)V7>)GKXT7!@QD^g&xc>D_oN?rT0&!AHE7`UZSvye@=@l7lRh1k&p@)fh?#aK zaA+GLZ)WwrdXY(d6Q6m8*cPgA%h}fvHH7M0^wvkn*QIVB4PDu!qPcNyl79AnL%eP{ zaB}jN94ciK*g`|4m_uqSWfQ%GOHS3%FcJ1gLj2%}o_{%T2v|%6cb={JbqOVhuDW!+ zus+d>fVqw%O7G{=-ilmS0!me8J82MKnpX?RLXY%iAb9F*oi$n>yhEZfwc)7WZ>oOz zVr=K6TT;S0I&V^>hg{y;n|Ae@K?o;oeS4*u3$iY@Q96FLhTGeDH#-*b#d)=Z7PmT0 z`p+FN`5VMM_IDb+%&r(WMGG5nQSQ3q;td0C9T+}5g}WLcJIlC_C|>t4#DsA#)EY29 zJnoTrXhYUJKl+Sstci;>ln~P5jku024zRov%ajFb7C5%%&CP{TU3o4a3??8w3Dx~v zxZLjcOdZjbY6w_jRX(wN7rXK!A1Qn(-)}7DGOF`Xko?V}`w+;2ijSPMb1V1NKMXExT2)eN0-|zhp_XO{vsxO{i6{|Hi${) zhA^$RDDdip*#{ofQbl>G<7R0-cW}aM8U!{s5D6>``<#5;bF;Y7@HrgELOf887|`i& zUbD7YeYU!`Bn=L)5oVXF>IJ%dFY}o{4Q>eVQakCt`{w;z;)f%+ZB$aw023-?02Y*Vl9;X=|RD$B0n?VbOd+-P6xYA9GuowP~g z<0NJitu2R)JLtjZyceQkQoiF$PLxSi8gAE+{6oK z{js69bvFpzT`HWYejlpy*~xQtYFNVv_GmE_6kcI7MXFd_*l@WdOwy6(Zu$oHkL}IG@w4+%XvD7MFi?w0 zlJC%|=S9Z0{-zx+W7R-w2F zw&Z7ZpuI@q<3$V$j=n$=#~JNVzr8)Wm%pp(J#16dLYZx3$Hiug26Iw`Smt?X&uGpz zC^pb5!ZNVBMwRL~Zf8Go|H5Fn%V0oAP-JJfm|KnQ*d^gGiJ{TtRSt>Ub^WP-PzD1# z+W1x6)Mb8Q%*_uN`66OCHhjufaj68-;i=4aRN&9j7^I^f9Po16of@}^qhMT>#EH3j z{>QKQGFX!(z2)-eC3xvuRMX|h zm>NElE7dU7O!3)O==UxhuishKFIx{Gw9)TQabQvcXVFM?r`TPzvsG2 zla{fU*5gSF9xC`t<`v*nIwrT}LwDcJ<{)jz-Qzh}KyodNkHPTXG7v}+xI zZ^<7wq=N6HJMU&nrGxIx#2)`f-8^tVp8o3mz9yl1D8ES;GkvN2=<}$&srD%nLu=+z z_)+Uo zcM0op{y60Repk5jX1-?a@mJ}jg~j7#vPJOqg|zhJ{o#j>`}@PJkn8oeKf8}WZ8c;R zA^-q@0YGdns4mQEY4Hjf0AK_G09c4`tzDs>5U3}YuZwe&A=q_>hbZ{Ch9_kzb!@yT zzqy(c_Y;r9=WM(mC^{y^GqS}kKkv0{w$9#x6jBw6KHR# ze2Ps*)4@py(u$QexhFdCU;*i)EJ$6iTm~55RcDa|ZhVLjy^jz=j97p9>KG9zrb;_i zlEsCaFVSeNveUb55*VKF-gIzm~vf^>W}&RyHMPQ%IpiFfKVP*Qu%1jA-Ow1BJc$`h6+E@ zZiIKu9VDPoZ7rIG+!`kw)?p=-l^n7N;Xc9w-JaC$(fKUA9Bx8-VZUxYOScdb^u0%6 zUTNB5yz0|sb+>S_^mTBt zF01^&QDTfI5|E4Gz{wE6MiOcT;#Q96MPbvExPbnr= z|B3SUBdgOcDF6Trc}l^Se@f9-{5OgcqFfXY(Xv<&Im)toO5p%MrI@JwC(8a@fUhsY zmR0YklsLDi6oY@YMH^uYN`qq?2_XP*ZS<5P9QS`HHveXe27>bT&-Xb>1clM~DJA0F zQ;MzYzfp7%6m(t5xI%<{BrKj%W^0~O6qWyt@(MxOY04Z)bO!*co*_L^U1i@>ikk1g zQS=cMNg0V0E^+{X2~n2+Tf0zU;1kvPyZjr)5J5R3$TR@u0stCxPi>jjeoAro`8SFY zf+FwPnY?oc0QlJ*5qB?(Xisz{0-w|NZbJ zPx2&lom^*TlKC)al5_nsYKn+R1aNS0sBk)68%q8DuXIp+IJiqaIJi&$^_qWo@^E%D zas2LW>-e2jiHo0ykB`mL#l73m&v{QE2`2PH@IwGe&gD!hWnahKI!JzYbi$E~oaSV6 z1uHnrjJc(Se4KUEr}wWHxRRPt{SWQ9inV78c~s>{{E%6LT;l3m-T2vJ-N3P^%~upY z|DG<<5)6BMc^JD;#=k9qj zOGoLKC0|Zl001)SyAzJ=xVXY})#;WKSZ;k^vpn?Z8H{@ z+)I=1=c*C7qWMiUF(Erac$|6Rj7t5sa8o-R~R|8>sdaAa93 zJunmbhKCbi9+I$7JhO_@;y8ZmgE#mbfIjr1en@{Mu-(?y~74<31zf=OCAHh#c7e!r zMfQmP@Q=Dnxc);|qU=okL+Qt_AZ%)o01E@f)GR238GH5ivBLY8Y7pbSr1#im_zav; zs5<*AdMZM`Cnk>h!Y@Ek8D(r6_a6Co4X@?q2ggnq{tPL3F+5$8iUABnk%uF0!e17j zemaY1tLfMSP?ujNc6x~}0tyY?R;$4U5r(}I{eB^@xSfB_>FX23{`E8K4vrUZ)qDJY z^wPD#XK93D5b3@ByEWIP5hsbiMA=_COpZ`O6An#|dbSx_p}_v z*fE%ux_~m3{NAx29Pu)Srfe62J$=0EFZEsE2Z-hZTzSetOntjcFWRPQ!Fc%tVhr6_ zK;7xR`qTiahx`g!`Kxk>dibt&kiaH^)cDTk>s-yv10GRvybxnEn%ByCkeCHV%Sssxlcufe~#V~>jxshKn?F{5|aGDYQLr9`#tb8b+ zVTVdX+v36^QSBH7)~6kGjy)oWS0@G2XU)t!5h(=cjuSCTIXMLvmR56mM(X#{q{@7B zz>i5xvKAO+NDUrmI=>RTptvuGe$=2Ohy-!`qfmv?prN>^FyiogBlxN6)i*yiTmgW| z{^I$T90ENNVX>@s)*k}fd+CT8#c;zo(8)%VFn-V~8gI*|b>*|V?sExRHXEh6Zj(rh z6!*ERzG)z0W+UOelNp2vC%GB@o=&k3bVtJQm|hdg7tG7HFW|RHRAeJg7_xpiHU=^^ zI*Ju=aIc2*d6DwuG#E)K^ELknpq#B%5~P8l^OK-yf6~TPz-;X&jS_i;B4yF}XE2yqXf?7>k+1+S)A% zs{bh%C3jhqd|T{iRJc0WUs@J&zWSFzC&Y@4+p&}xFFqXDsB>FyJHRiJzaR25W~czH zpA?eg@i=yq^{odZ=9XZ~2ciK2yUKf(F&w`e1U(w$Mlce{MQcr`{-&v-!eyuJ6~3M` zm0;4wPGasgf{&N?nP8npgfB_w)jEXxs@?HC%o7}(v|v)n0T=gR?q@UI|(klS6caW31IKRvr20&>FVJg?U0i~z4LcSUE?h^x7lt<(n^(7OXU>#v@sCpl>$h+ z`0j{G2hFhRn$7PivWgQP3mL0($`D!>lAW#bmCI%CTb2%-w5y)VZ~4@vqq8p`$5z*x zw6!4=Vjn)`U}fEkXk9vKA3T+xIu=F~utu$k>47vXE1#T7lr$qE59HK!8gb4V%m&0X zOV0L4lpF|pQMWpq96$9lA>5%LtTS9ckTNk>mScMnqGs)Z(UG6={-E%j?`72b2Ei3$ z7^{UF6Si3HRy);@|Hc_PSn$voc!+P0|BA-`t$^=tM!hiiB+4)?HH#lx?&F67`w`#C zb#4o}suaRvO)ow(?Z02g^@fZ#K58$T*L2zG)YW68sv&ACR6kBEpq`YX&Dup6I*QsK z1-w+EtopV)l;~q<;Z%{zv3cD5_)$S&#NQzIP~WciW-l|yB%mCyzN%MI-!tV{S-*_N zr0KM(P8f+yUTx*QDt0gPuED+SP~_IBro~Njl5afZXLiP~_WW!H(PGbq;`=pW+6Lwn}=fxW9T!EFHQ z@VZ>*J5Y4?fpGTEmd-KscOY1S`)h#m4^YpX&QAebgxxY9C=>4fB_U;t=TmU5R*!Lk z%jgnw_F;;@{^~;BI$-e8dnH}bDn7a(}`sS-TDhAwGgRAcm>1Cqp5+>}C8x@PCW~4IWV>;L- zqaud;A2sRzlsTQ)F4m-yjn;Uc9$?A@X(WZkg>+Rt0@*itZpV5UpE~qb*p>)|yw}D_ zH-0K5ezLLo9AECH*%5l00gcqKWKw{!WmHdCF!?6(Xi1y##7Y=cH*u*(%P_61P|$sB z+1h4o@+5k8{~T=ligFX+S0rO4E;aid&tpBTxv|D(wPFCb^IAm#?HeI@ZbZ&q%}DR zC;0cOu|CPKZS5*}vfb-t4RvE z(bwDA-)Ea+mwfA+-yiwC@8<;k`+!@BmV9w4)PT3ZLWNU83VP!Et_aZ7P2NP4F?Ka_ z`W>5L=<)jM3FE^z&bM2kH;rYQ2N!Ohqu4XT7 z3t&P09E=@doxHRH0mukdjZyxlwnO7hHjoc6ESx+liFPK`DZnIB3Ut4haA($?{>bRL zD9Pp~kE=>)eRm(5vyl;%{$7SO+Nk$Iyig@Uw8h1hNfj;0G)h6G%QlTImGuwasW;gc z<7B#opz=vZrqtiYp}~|NJ}M&nTqv^6Y=h##ej@IhMDb+n6%JuXt%IeWAB{d!lIND& z$C5KfP;iuFCy_?r5qB(&&z~}lsGyv1SCk(|sDExZZg83J?`1%tM#M$CqfZ1{G!Xl6 zm|c2eE7Zf^p<6z<-x;(+^ZOHKa%!q;KJzP96w=~7tGQXy^O6%v6C)ees$bII#wb!4 z#qK43)0K7{4IKg}t#>hdDu2kbPnr#dsv&dr&`ExFRfb>5x|A$va>2XX)s)w~(0Dvd z`cjm-IltmH7jZ|owV9kwIt;-6wNWQ*aUxhAGL~BA+;p{LIk956P!XHl{%7zQ>a*+O z+AL#zShm_Po&H>*8^=FXX!vfv4ZTr4Jf!sQM0pjHJ@eL5X0vOrZw2Y>PLE$!eeL3k z7;6{@V&IAqtBX6vzjn0I`Q zCJv1hq$-K%+EieVzDF^Kbf=@!3^i$o_YWvdoiGQm0)CetP8uqZj7+`R16> zk=Ko{D6U{KH>N)wh$=j}^=q^k=Ugh!(GKNwYbKj0Bpx!yN~X`Sw03UNOx)g}1SI+r zcjH*}Ld*$_Qsz1r9OC+9uBayuW;=_$FnxX7J_LMTY`;-a1J}mB9d)J2q-s?!2L5J$ zR}{@;JoKO4z`Wee8b_z{x1fM=3l{yz(CJs-+8sU1R~*}|9$?|s7xST(EAbsx>I(th z7K@%Xb^496bAE`NEz90t^M1x6Q4BPp1L;`;mc7|QUw_p9aUJ~@XLj-C%;AGR>#}`y z#29gXPS`Ha!!vU(e)?8ZbHtf# zWgk47dux$b7Y2>68jI9Dn|kAhmt6^UWHB7aJ&S3p}0#c)~x zM!QE=^uNuHjSmL?#K&48*m!zfCfJJ4rolwtdAr%VgFFA|SBi0Z&3sF$*MlOgVVVj* z)c`)DM&a7D%BT@oO0rC9o4y>UO!Uf)g`0Lc_HKVV;YBQBAPqioKpcLk@8n1L|6d#t zk$F8xJL-xZP?7x(`D_@x?80Tf@kuwPVw`ow7m?FBJJm&)I`IBskH_w~4Dr1*jeBPsuV3Qofk=bnN_0RJx8jUg~+`!5MG&ze)Xn8U~)YX=oof`Ef0e6))j293voVWVeKKxtXRG&|kSGsnLY;1Y1 zB!IpCXr(dmbQnS7;1?2VSU6>G)~`up@oRw{ofpFP1bWb3&6do7IYwkV%FceTTw|p> z)-CB9Q%^E|EWeUL8z@sV0n=by#F0DC0UvZ56!}kL8`gZkMgEn!4zC;a9g6dHWQE7? zq@cy(4>b-@BF4$e55B{`4-Y1wy*6I>dkWLBTq5p%7xrz#v0hOZ9-p0ZK)JTwQ&npK z0RIioIQ#(sK~}Y4Frjs`maubBW-QLGU$JD^_H_&K=(vr{Nt( zRYYgp#@3BBt8_1_&e*a!2%1Gbix29PQ;02kuPulCO29S3UluZ1Jpn6z_H(w3SUnGn z^;rhAk!i3~+rPaY$qCBAudhF2cWKaMZSc*o|Cpt4 zAPnR0F0BduB%&$CVC-%MV#$E5cie}I?U1@6%Vw65$dDO71@gh47)q#!VW^o>WZKX# z^ZTQjWhJ;b`RMKja>O2{H_UvdHKI7Yqfwe`94MNjeBP+;Pzu%)#KAi*Y@{6Tw@Axe zn5MGfwdL_z`on?-k{c*4XZWuE#<`Mo#dIIQF-;?WP<%lYpwgv~uG9bFRkYM=#&P&% zJ3vYV*^k9H#uWqd*~&qK+SlRti%U7_eKXCK19%@?p3Dhh-e^YV+JyJiWA}=7-Vba{;9+vQa3Tv@%-8o%w0m}%Qft<9`_E!U%@p2RRj+j>rga6zx z8Jf&``}q4Bu|;lx<@b8bbmK(knjvauY^g@0orKhZn~9T;@k*Qu;Ln0~-eo5J;{E@g^1 zVTPZIW8yytoQYK2ST_};LVlzkV~})TImNPDI|SX@B$(w*Ct&5t5=b4$(Ou`jhf`_I zrB;`Yr>01LB4#=zi5uI8HuXLl8EO11;)|im=zgRzgt3w=$!I#QiOOlou%bv;P~aZq zZ)#JZwbw%U@6pElE$3qWXXk?h?e|$ALA=L(+h+U6fIy5I4SzIEj)IDc zzt7t>{+5MRkBaW$g#!_B0f8P?TK|c-&L7v(-5h> zzfL*(=)Evrb3Cqqv)yU9zXDoVt=GP_sPTl?`*Ztem<4wY%RTW!0x84uF@^LvRT)cG?9L}*tUMVsX3Z0?3-IWBMuHQn|8@j@(Ea|+n3>~a~ z^aw;IeRPuMY5k847k6@pf-Q;{_;)F8Y^FPv>~%@FMSfGWuIM^qn(||@9=1st=;PfH zHg&U_-|PPUP?D}Zv*yckq78-+oyj45UEeZH>o%_1q#o0gB|ygunFwpoy4S|`|0O}o z+r`^?%c@LKy|mvNdAsy6EI4hshRUI>mV?)qA8$BIa?q{V#(pItR=3BB(k|)2m3(*! z-L!lwtGMQKKgoY=$ke92P3lRYO*BJxNy2kp3-b|RYDpjupA-FeVn^VD?7hQ%J>A)# zrj)JK&`Nu^Q{0i|q|gT0qxzX0%2y$lsn?uWDcGGb-ssjynPH)B*5OuL_D^I9(eahe#|G`+Anr+{)C*Ohf^twm!lA2Y7@W@oOSicU%#&1~?7v*R zfM9YrLcF9A6g9xrK!J>WTh2G?cjD6cz+Ano)9Y0C2QhN9c4f4BH{QXRj* z#K)JWTOTD#(k>%EPXWcE^Dvd;3#t==?BCWw^Lugu^>7W?yC;FJ(Wt*h4t9M`I6lH3 z%QnjTo%x-Ms^n_s1GryKqI;%}%P=|?4|J1Q@-pCF#g!LAt#9rR{(37EN0Uge)srbR zh4(P4oN3i9Kr~Ov{E>(6Vy#^>jbf5ebD~xB+)F1Hz7_RdP;dz+yOYvmPJKpc9OY38 zx>h7n>YqCQ-Ca+QT#)wRymgC*HR-XXH5Uf$4>X;FFe)wcbWL2>-(p_w8F=CY_rCU$ zwriq}{CvAV66$4}6xs@#*=N)Et2QMzh!aE5yBE5Ln@LdGOYMhV;9P&h_)+vJcaIKi0G;tZkQozt_c)zG7-9}ei>B+j1}8;hI5Nre#$U{5dRfQ-BBCP+t0h0hkpRofS{w|}JLba3)W z+u4Myc}Hs5lu#`X-^bHvl=k0WrA!-2Xv|==SI|)x*b)evm4tmw;x!%Z^Aw6LfXT$G zJKL+zkK@LS0240Hm_4~TB?#ixdR>XTYn1i&XpBW!`P4> zz31DbZMc6V`k$&R$t&1DuFk#am__-TO9E_@F9nA2`#$zmCKUdTtYe4;W|S7$9s>uM zJ|bK3jI)^>Qq|8Cr9@{_Y4czivVKn|A9WFe~;%p zi@_^+;`pr4MGynNR{~2{cNZ-86gj~0(-Yt$5wvr37D!h&w(G87QAQ0uk~1z|(JXFg zR_8AY9xRRxBWkv6oGyDhyVJ6KE1dVVMXw-XoSDE2!AiYWkJTWMN!$Kb)^qR2@O3|? zD~lEy8_-kN6`P`_Qqc8N^Gm0PhM6uy0U{9vIMwSFA5~R4rU(Lm%HZq%D*Z8%=-Z5n zU2DSXMX?IL?M>Wg>b5!$*L$9o$@z=nd7p)@PL78TPI84(WB$?*C#8T5d(B?T8tj142Hhj7^kbjE|=p4_vr) zfsRV9bL^nzq#EDXs{V6RN2`U_wlQd&5PziuiKD@U)sHXnv@)`RRck&DJ<$2YDhHPC z%A&s@viSHi_Pb6n>031kq78b*)Ph1S(QAINQMDqW5xExHFi~h=J1oYYxusX9_^;j* zs>PQt`eKuSKRRxn=CsDos+>tzR;izE_+(z1!{)v`r%`gH>5qo-*UpyIOJny1$=;Cf z`O_BfCB@YzhWWRCin^szt%z7Z%s*BZ%b>BD$3M_|P7Se7t(kry8l7h>beEJD$N0fI zlk8s~%yE#k?#<|0Alt1}Gl{WrBmI)ijQTQQ6SH2Yi`vY|!AOt@kNW$=oWLjiwK?if zADayrhDLu%hul7{NUJ*m%Q-ACkBm2$iuqk_`=tr=7%Oi1dBdU$F(i%b)OYA_$xx8UJv<4k}E~W@VJgMi-stRr2eQ zeXhQ*+zj9kXgj{05bb$1T{IPxa5EM4i}14VnfWuaTvH*+y=CNcX%Jo#tJnKL|? zNi1{%f=vIgL{@*N6k3e^2+L}_hbL;8dx1|=jYQRhf~oebgkJDjAd7rc0Y%=aMrJ`jdU?yg04@PeDwDKncx*$FdSs4wKKZwgHIHkJbKoABk{ctUvu zBlXb?-5(zqVIG}aJry{18T|S6<83KT)SnomP~s8<ZsCTa`_XvQnzl>_HbM`xFJF-_34MX#oyZa&~l@-NtCr4^j|F- zp4m@aN_3~?y|~NARoO^0rkU@qM?S@LcNcz?2>4ZI6B4eu^6+>&Z_`(aAs%{4$c>Ei z@;CXVeD3k_v&i6njE?95P2TXh^Ys1xlVx;-)?)1k%V)(3N%p*S-!XMxAsDd=V1R|> zLtb=Bh>*5&t@_(?LYS!InYF5B;YreEelCS&@RH66b_P`N~ z;DaV1Q?6Jl&b62xWEp(wSA6y}F}hL!lBBF=>UA5p>16NS;dxWPn^r=Wg9xowVHoP@u zbVAS?wP!gHYpt~~USCYopms?M@{u<>x6Ee_YA(s{b^32?reS~d8@8d|SWwr0S&{+c z0^T((fm3p_OQ$9t>kljj^0sQ_O~WTqhJ_A&ku1HsaZ54q=Ik4nh1hPU-PtuPtJ!m) z?k;DcGLGvqooY++;wfL!uSP#;wa5A7AQCbuxb}WHVA{Ak(bjEmsLvdjnUO=o!@N9M z!l&je_;Df0OUgD&wDVsN7DMwKbk!%QyJJ2Z%#-gikzT2n&eZ;cVWQoD_n~SOWexvt zAD4nL$$UXdqb~U4asvI{kfCVg*lizQI?m8(&yVMA2%z5IB@OrN^J5+?-D{;{Tag*7 zqNRP-C6qrwF;=uSeAdaOtONb>oXm=GS?zZZa9&rkz?ntspepd>wKja2r0^M2lm7uF zbE{zqQN*5+;zB;p7>~jpb(kuc<|eIe19U=d-aK zRAwjP=}w_&4J6JGHL7vaPzbXVu1`MIbF5CsM@8H&*E45aJ^uC!8PcFNTGY+R7t-$% z5WG08N<6waEfAu>s>%RUxU=@B$iOwi>n1dmR9~Yj9Q`m)nF$1#<0NT~9ktQGb4enxw|}dhq}( z7|AnMKG7}q0_zLUwJ!aFqh^a=?z((Kyu!+sIlLs6ZtWrlTZZRD@R^^1ouhWA6R?Su z@16ARL1ZxyM+k{-|Ft3Jg#PLyU^V2p^=Q4tetFX8b6IUmREww!vEtq85B@sIiuR_0 z{U3#z^a>2kKMtkm;j0)t(R4M&)a}@Oax^O46&O^|bbH!p3A`#)lyTW27BGkt)^kZT z(Knbs`q2&>qX}>*6l#v0%@45`Kw^mt6bFWXnF@ky!6Xk|7fcx{ucUQj+lE)^2^LcU-hc6@3e8 zbuORvMNKx3m;>dsb$vREn?%0(A%smf$ND%M8eADVw ztWxy2G_L==JP!O@Fz#obQ;~w1rzT4HyVc7!XQR`L+`rlvhvR=Q31ng4etm7Z3K2|O zCDJ@q1MAx(kvp;G>Dp^aFT3%3H?xJdr*U0ocBEkAw46$0oE`TsHvh7BFU$Jh0NdH> z5Gm%HQwQ#$en<5M$JTLE`EmI`D^Q~{;UUOMP&URY3ndvB7O+MWS^E7Cv~Kb+XXX{> z{|0Yx)!M4mf7s1ViSYlpBJ1>jz`Lv4&z+n1N6!2kSVu$SAj zJCJYS-Nr(D0GBEZda#t&51iZt!Pu9c*z4YTM7m)&4|CS(b(hXgu%-BPurbWr=Y6a; zP%qc8yXTk5E9CK%>-|!7?w1a*JJ81+7)I~u8{h*wk4V=6nsjHgfR0`c7wFTU5_ij5 zm*!xvb5*04$v;4D@2Y{n&mCGIL#j@>Z})o(Rj;bf#v5C2wl9={u!TFEJ$BKK=aYrI zGoAk>52_j&JFxEG^!$j=puh*{UKZdxneeo%4tuRhfREqZ?cvbM97JuZE^kAXj|KmI z?|I?L8oJ|kJ<<3ywVC&RJFsy7HZh*g4<7tl`nr}^n;QsvzGVx9+};jt-0vMY-;B@w zx7KUb(VQ1p8EDw!D{2G+RBRY+8H<3DMbFM+;3Z>M%I2QSZWIQaf&Ll+0mUQ=u) z#>%c|#)iu5Y#`{3o3E$4pWg%KBU02zyOU|Sb>cNfvDf4MUR$t%Kau}&8KAq%{}J${ z1Kw1|@w3i4(iYMt4tFY~Atr`0H!cnvU0V-5y4e zQIRr+>Y-2R6sV)KW5I-AtA7g=?q{1@Tn8fHKOSNgCcD_kat~>W25;_q?Y+PIKMg!Q zJ*&KQi zy0vYh0vuPJa?Tz460EwBO9=7E+&xbefhIWJ#Pb79Hnz4cY^p5P zmHL^+F5MIlqh0P=ZLDvqg5Ji-gyWPv%qbkT+Q!tvSv>^NLSv11Y>BW6GFr*bk*e);FV zSnq;J3MYA>ZNGGP_)@9f$chY(#0NyW|7v~0*@^`Re(er=zE0{F>SOkMIODb`^hmzh z1N@2KOBM7^o$F&(ZS=>xlHToD5zmnm?GAbfxMSrKFdVr1`)@OM<_Ma{c3B{Puqqne zSgOqWn_9$}j0TX?O`kn|&HnD?&zuY;u%t;)Ery-&*m^62BkoPuk7Eh4NlnDRCU?a= zZLeAR`lx1^xu{ad7jsUTjPcJQndJIDZr#jZjw0v5K56C4al8|*oR6@xUtQMbDHG@4 zZexJ6L?L<^7trrruK*arJ(e&JXGlCaYxCbt?Bs2qT_vKu2qKvw^ueUpZJ!VnX2!k;}BckEwZW`j)->^!+%oFN_K;7j++`v;Wp7k``l zf*z>CU+^EAQ%LpgzqyJ$V!A*3QrgtJ9@ewwqii+LORfH2YzbS6drp?Xajkb*&hEJ~ z>3ry@Jd+D}EIjY8 z>Iv!f-B$F~yYfT*J;6Odn1^QmFtz5(>`KLMWHKP9R?cCEUYp z5bc)`DAhzPa6c=7LV8hE!vY6_2=l#Uh3>84V}KxNfpTuCfZZVS9h7G#(!tl8w27KC zu&3%zAG2y3*n^X-fo;Lo?Z^B)tLNX~3KM^C^PV1XOowIjr zp6BV{I_y}4DQ`FV<|%CHXdg32_A4O3fC21I0RtDdSKb+{RQH!>YE>#^(B2MB>Gkad%Hg7mAF|MVrfI_K#rL8NB@U>tUGX z;_dF<*_!osv_SW6Q^*Xq$>GWE<7Z&t@KeHY)Dhc=l@L}YMTOi11^ozIS7|`5e{VyW zyn~?m)aJO;6sD%>qZ{+&=4-omi}~J~s8y*z{K{qk+f$p?TW$r^yfirK{N*w^%*)5% zcIV0`f0r{&wr6asasR|65DzmZ@QtcZ{Cj-Cj+g`{33ZfXJDAe=O1_;--cFhO#(d914qKMZ4RDs zJgMqd7rw< zOhH!sBJf51k0^w``=F^PJum;tq%hkK7NN|g5PwlWI)V?nW7Fs%t@0J4;nV=~J|_SE zqGspwl7Dz8EPc2Mp>Dh>71|UQ*z_D(LmBD3^nTj*-XgyOkO4aO2154IFChngH}+o8 zmu*OmP@ta+bdwwm^bdSNnf6fG?)~Tw!OVQ8;=#$2m;;6%?zr2$pv(yS<0-=!G9#vT z9}a-9yqmv-Y!~rPfg+q2z}eEh(jPIU% ztx_5U3JiFD%BzLUpYh=Nvj!9<@8WW;MaI9wAhHy1_r(wGK+Yq8&t<$-xFoFC4F-_} z?NW(;_K5_Z4+2Dx$e!?VZYD>%Gmeg{^D^qcp3!4Zl)047{YLq4J7{~99Pn^@`SQ*$ zbu1EAFjZ%Kpqoz+XJHEOf3}yE4q%K%4TM%hZ>kWKLIK+VC5p!^7*^fXw)|`zh;Ii_ zWCFA42g>wJPThXSvi*qf3fpx)Wrf}z9ysS&sTbaV0fjx)@6#>F!18UnU#>ENT37Nk z9NVPeuJ%sY%gO~W8IzP=7UPbc>&(san+Hxt_LZ{}eeY+J9^aeWQ#Neq*~Y=IDxfl0 z1*{BKN?cG$p98-$$A=YIUxA;_KrfCj>~rH;Cbdpw={j3mh`P^O(5H!~IWK-N0`|2K z7h!Ggh%@XqFEDaTyXy`|XNf(qP1Ph0oVQB=v+PHK6WF<{YAdell-qqzuYx$4-gpUI zFWrrs)LofM`4_^tCRDLR->b69z(dZ$o!#x7LNIuj1GtHQxfxHelk_}el`SP9p}`(y zXHwDJGGd)42>UM>H70R3D&*f^XQKy$_QfddSQR-D@`M0WX8oJ(!3J5#5x?{EsOqM2 ze@715*aKW2seb+%l7VZw2v*z8w!w=g6s`K^@~ZX8wo2^nl?+UDZ6D5M4>!QtoU6ikR%9t z!-%-G&ab_)tX* zos<2!@{Am}&gZzLq6&NX?;m&RW=jj0E-)U)ALJHz!5`40KUwBcw>hfV>gGdLm&H5TiPr$6oi9tp~$vDPrp@ zM_b>_Pw#^n?}&39UfGZ9Wg?NVHnCjOz4+n7x}6}~w@y{XI;zRgxm>?YPtr`juCpd0 zowM#&piXvtACn1XRbXS=p!6s zIEnax873I<}Vp8XS?|bAM7KF$H|G z15lh&d^)9|I90`3AmfHec>e;(6~PI8sPetmhynQ|c}gqG{|LyUlzSqDe`-9o4WC zREGqKHUPY!?_&t-Q565_*J+Vt>Nqi3hjML<=mZ-~`gz?2yv-&PK}uKpT2HtQ{OL$G z=ITJNH=SAO|83~y0k1dm?9`2AkMH~2M3o=h=F}X1V>LdVp8v0E^uUl)hcV81Bt5xk zN~OLzRoFrD$>~*63qAmeKv8})>a0D6$l}{{LO)@R=pU_YLG1p)4jWe!;4j(7JWv?Y z7TEC37iVnS+Uu|1XD!v3wmiPHa@X6XkOAKn6T*ggfO7TZF4IW>Ust)Cy|?pkB~W7C z3_tS8!_u=}E|f{cX(Rx8H;;Wpij53GG zW0^#=Hn*2xw=;F72FlKq(&#v68qmM+R6LX>Fb^0Jj-OSO4lEs2-AP;gudr0)9FZt2 z4P1BM&3+H|OHt)Y%K~p*`gV)6Dm#F2ag?^$m(A?5p-dNRd3Q`?69OP#WGYg3G za(PT$3Ci>KLWIVRZDQ2(b6J#`FYv*(7TayTq?PeW1UT?Aw)IBS%6@qJe0Te@K>cee z0WVe6YU_IC7tEiMpWo<|g*#nzlnu;;od;U@tue`X<>F)UK5hLBX_!iig8~m--ygPI zc)0qUMKeURDVwpo?e^#0=1>5E2C=5CuQ#YB@p6LNMo5&Wme%H9w>$8uMbq6YA{zU)g!C0G0*7 zo~pJ2+uH*IiM^B~OPJW^P|7OXwsnBdcO$Udp)yeJEONFq`OdlHr3X~7qB|b}gcgHx|v8(T-#!55D}r7b7wTh z<;3||5g7HZjY{C!_bJAYR_0q}^B_7-+xh353#onOXt=)glQz-Uom(PF@#_&UT$Rz( zxGnvQlFe|*i-V^VQQJ%HoeHn3f_6X^TgeQbW|0D8Q$Q-&%k5$FrBFz5Vj%QOu5_Cb zF3uoI9LNF?U|i)jGT^|6Y4(wL-?!{)?fmt6+zS%;rc11+lrYfTnhri@YNVw%o;doJ z1LMJFktUZNVI?(^VN=EJOL>NX&$)6%7NnOof5|TO=FRU<=0@AyTUBC-LsD3+Oeu8t z83}**!rs_9BW>w4Qr!w|gctI^7QJwhRA=V>yRm-3*NWgyRJ1B`E4RZHBpmwoBCg|$?Yd)& z+4J69NG&zi;XNL*;Xw!zUV09|cSz%Vn{a_3!QU1R7Fj{V)kyE)6aBvWD@CTI`@P1z zx`U!6{BIFSDgw-gaJ66VC<6Dc7WflbB*ofPx}^YTHR%ki z7dSqwD9)87Ts1%Q=&e%gfi0P2TG)d9^MVMr$Az=){ThD{giu)q92~@jh;7Tex(C*X zD((`Un5g>8%GL*VA8x^NInbLNTI1LBMA{FXQEi}>6F=R0KY$g55TSjQAjr$2KU2ye zA^Qa4Yb44FhTX&a3$m`2&4G>*()(x+<8-U&csppTRdj8kBQ$>vzO zR5dXK!gx8C|B?cKfuGCJfQUvEJrHh^P93oER#BP+;x$eXWp@sBp8tgOrtzRjcR?cI zR{?_+S!5vPNPi!H5tYnC*JSRdu?Xz>mi8ybe|qK5(P@^VETR+Ln;=Tc;fVM;OEV@7U46fATt8g38bOCae^U0Xg(uZ?~NcEVYvZ z_ema8c7QXj)c7QVxiTmZBz$M+ul=a!w=|<1S>N*i50yY_zi;O0iHrX?Jy{m?*MFOw z-0(QxkkasEhcA4~!|=(z!AeKdlQ8ca|B4>+8!U=c4to8gdyX2(^d?s#fbS;>aCP<` zSDwng0^3X?Uq3T?7WJOJ)p@jJBNX7FpHKpW6PM(Y-sE_BKg3VzMz(hp@E}oZ`S{Nl zfBx%N)6aKLrq90mr++!qqXCFhYCKwZ^Isf$LHa^BBzB(+NN1C*5%~Luo zqQGRQO6-Q5-yN6hi((itmPa$dUO)SE&Dg1^ZO=Xp^~cXXHTh>}k9h33g#)c>kjRRWW zOyA_Dg#q;*b#W9j_{ThbaPB|+_Uv1zNcto$5uI_rV}A{FRD-wKz)H66 zN&=qvecojy*#HLzYz=mNC4cBUad5tt)eWu$?yFfhbGVY-?9*cX_)7lJo8tYxg6$2D z22$2_n1os4#RmNS=V$Tj=lSv*RlXxHOssVz8Aa3S7NPS4%V_58{bP<$EC{jhu)SN>j-QKuG5B0j$^OHiEM2np$><>Rw%bt}oBtpRn%+hMuSY+q81SMWxR#`}i(BySe-K4}Sai5C5OL>sSB&!LR@R zVdv4nyNV9r31cT5S2^|D_a}he^5Z_4S3A9!97(JAlwV9sv;+fKgLXP!qQV+2qjUJ+ zht9N00owRMXL_Lk(_2}6puuT&TD_a- zqbJ6B-2A8@M5#Nc&EH}1CQS~zw|Cbr6xyxd)6z|voF;&kFM+n+f)%sit9NPX2DUGx z>7&us+j=HZZN1AD4=P7U4-hHB>X!|-KFR{SMExjRy}Wv$5Z`NW@0mnezCpvcT)({f zxW?Vl26#OCoAL4K?aF6A&<61C_fMV>NYih6?gKBL_dXr_B`PyD-y@;01a2W+@-Q&ijsQkH5Ze9&7wQ)rGJ46cqIee`6uj<`;k zqn5JrtB=P5m#|H8Z+hpR38cyO*y9mHjsL7G$l zw)6OO+x3lmQ!+ZFj+<`ixEo+oF68eUk2`OB|BVX?Ui#9$b2#q2_4L-GAx29Fu-3ZS z#Oro9$(^Ai*XK1tf_YtffW)cNp)(@q60h+)K7hy9v4m{z4f8tK!2bG~K>O;wE}uAE zoPbup$4!GX51!85@?{6tW^vi$2fahj6xz#f=jO8GN0HT7ym8>3i3;{oo%?N=(+Gk3 z#${)IEBK7F0T;e*esb{@R0|goXU*Qda!f+@-5)GnL>y3r*SiIhZ^uW^iJCIe9#-VOYor310mk4jzC$RUzZ%8CSnV z+r{qt#&3R||YeMo1i-xJ;$oSAGEGHO2>&v3t~qtS@y+yfvfJ zT?jPyZO`u8T*~*IY$+eL`uOiHDRn4hiu=}|UP!P~w=bg9v5?8{TY7-afky3T*t;zV zr`=0V+hy}gpjNAhtreV>n7rF8t{vhc&YG>7S|t2{j1dy8gwLiI37;Ndw#exNZp*%t zfIsK?)1B+Hc^O~oHlQoi;_aMRJO)=`)8Vo%R#v_gN3Jj4lt6vqh?$i~js@IGinNbU z?BF=yvT5>kZ1B(w=#)Z&^%}fd!k<~M!GpL2(J4urjwdF5V$*$-ZD+lvzwbhz5wF=R zXRRjfyn`r7oZJSG4O=B#&+R-e--JY(9>%uvjXqWRHroY_s5Nd?+?brvTVl0gM5UAA z^^0dFZ<*1Cq|ljl!_#g-BMNS=v`KvHL)xSe5H7nOXp{8LMVnknt$?#)H&y0m-gZAM zV}!)Pw$HO}yDy}S1MM56Ogt{mY!#Ew-g}?V3W8Rn4N{q;q9kWKa*bJ z2F|<;uedCq_<2g&44-%MRe1v@(B@Z?FU(_EwD)ycB|y?89k@{NR}t+=lQni-kY z4CDR|@S0;GB9s zFS08ik00@z$aqm$rMtIQJZC`A3W=oKG0zE^DU

Bxs|ALY8mP-R690R0z}UvwR^S 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 C!N29;Nwyz!Lzk|^zQQJfwL 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 c``g}a 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 z%0DO3wmvV#6 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 Q1b!QWXFoM&NbtA+2T;J|BLDyZ literal 0 HcmV?d00001 diff --git a/examples/octave/octave_examples_3d_plots.cws b/examples/octave/octave_examples_3d_plots.cws new file mode 100644 index 0000000000000000000000000000000000000000..121b4d92989c7c0083a983e847088a5502b3169e GIT binary patch literal 753930 zcmZsAWl$YH^koYacXuyd+}+)a+e3;|+}+*XDek-i#ogWA_2KUDc(A|SPrI}KFPY5E z$vG!8NhUW}RRJ0X`^%Rv@L$@X<`g@qLu=w&zI<`FhyH^0U)1b}gXs@ly^ zE}dP!9jHg@Y2I|-aopMHj#4^O^@ zyk7HAF&so)*jTtG{JPHP;<9tsGB=l!9-hEb>HPfkeSN%op0V%QxPAxmzVA%{MM?t< zIzK;TT7UrI4*%Ep;*Ej;osHYXTUuB=c{|` zqyjTlcbk9f+NZte-OWHXZHo$-d%(x*bHV4w!33lld^eJC{iKc7;?YBt-{T88J9;va z&G7ehd%SrVn)(=lOznaMR$5p@+PvvjUf&)k_5xBr+pO_NcD$ZDT9N%-U0(P9;{<&E z4S2mdy_|>u@1T&SUibJunY<2=83}`5p5WfFw(g4|_vaaa?XB%i;T})*EAYkJ>A>z! z(igIsryam(#LgTK%XW`vz{}B)|I5eI(a}@+-Ri)=);T2Q8fbqt5y7K9a~(le=T8qH zeVVBwdzuNq_9rkh=T4GO%kQOyA6RhSJNE60p(V?pZ9QnaDJk%Eb$NWa zMgtd+g}d3j@2#}(tjw&V3AeSg*n;o8+ByItubq=cin~kQkoDt#?{#hb0qE;MUn%v! zBCRhYJS)KNw%>yX#tc9}SNq1!PQdF}Ily2G(gj)I@z7?u1{iLo@jQT*1_nN^Kz`uk zJ7KH2WiEw`1KzrVp6;EUQ!>=F%?*xF!7JLAS zIlm?gH=I77wKV^+ZGap?G%=L@{hx&+nrP=QUxC08(Q^m#R_EeJPFje9fh)^cmp|Z z-VPDhbral1JYzQ&d9vU=?SY(*1K>xgulM`bC;s**CNbLU&H#}h0Q@>KkOPJcY~5ey zC+oBXypr+|boX?(S${s{!X@2Vi$E?uhAve=EFfAI9o@m_2o|kNt%ubQuyeiTfYMxz z$H0HvIB0R-Eosp?1l*w0;(<0$(DUlbb6@@Za21nIL65n2LrrpNSpf8?xqCi)dIJqO zemZ)9pCLC=Yv0_c{J9J|%ik`i?!nb$&miC<0_LN&N=^L2i4(_!y61PlCOI4 zH{VKdH+n6NJZwj>0(WhSj4*xZro6lu($?R1`h1>N-yX9>@VJU>mpmwYPFw}}j}y9X zjlJK-933>2l6s{LPysu)K`9L^RpY;5+;nEjcpiLrKH_kQMFtv+Cbx}h3MM`u_G-i; zW}ejAYz-GBN?VnI$o(>S*J4=wuLGa-4(7cMAm5US6@}040Bdih9?*Qihp!(MTy_qi zZ!hnLeY@D9WADhs5PQUSf0+Mh4W(Px;l|wIs>ft`&$($cg|su8T=N(x0VG56+5&ZLHD4} z#e};>`lGKw<->ZV_eTPJ7Tccb7ZM=Ua|_d{Fw` zZe~TXOxM|}(Nb*zUKDe)3Z00M-%u0a_FS7dAWSLnQK1{6uG5qHs^H2c!VBT?6Z!{8 zxa3*^5=oc|aMns3>}jim(+q&qE=TgCSig~zN);2xDEl6#`VIrMx zHGt3di)n|?<+Fco3+d3}?!UpuCQFdZx~#R&%N1Y|wYrfG@FRg7&Bf*O1>1^=px5_i!9={p^C8jq zmoosxm*zADfb5K(=w&U)&Nzzqxc#os0q@4(`SFN51p^o@82O3zacg+ocS+D$aa^U? zuY-{_sy#)no6xdvYxwzE0@JE+Yyxr6_Bm$0f78YYdThbync#VhdFuCtIBMF3cn4r6 zG^oGb2}8JIo@@adHne7?{LdfSz_~ppVZKkl+o#j*y+IB4<8GGh1wO`mmQ1BacBwRi zlov~e`lB+yl}}Y`H|p{zs0s~xfn251H>?gkq#EBmhUU?N_GY36_5f>xtKrmLb8sS# z>@{h_T4GanTedPtU3`puef^$O#W5hXb&NXiH-f0z9xCQ5?F_&&ErjXu)th+7axdgg8Lt+9QAz|M!^mB!V<5g-6~W3Te4 zZ;!JB(sHE|fxP9E0`8k{_8hWi`#A3ey2p3!Mi)AS?i|{d-kDp9h)4{tNbH+C&!^6= zAeuZbemG7w^fk2Lj7y#8_~;4`V89lV%XLYwm4DBv{dGk@fAlMWx6eb}cOr{Npi>I4 zAm&Mo^EI3)1Zz*ZO@4-_Z*0KUHf#i#htyqy>}ka+0DR> z09QG_wJzf43izanC$71B!V{^<;B7q_Ys~-QF_DC+aBm>o~}-ROD3ee74FCK2)hTvLVWx+p9xQ%lK#75g!*{UOwT>gM+c# zIpPB4c$K3UUuR$L5f$2z|GKY-FKfg-xx_uIcP@Hgwh#~mC18FNxR!^_uBo3W#}qb# zX7g|*EftCcend~F51m(wyzfMfl7#*fX@|7AYy_BF^+aJ3p+SHNB|L0vE=RX4G3Y!L zYs}A8YS~SJl$WJ_f5(E6UtKN(RJzyjQ{~hPnnz=S z7qT6)Pah!2;{Z$StdF=v!6l$s=TCM#w((cL^Mj3?1Z*kE9)I_jb8R?d%8$T+QIK^P zXy@ULSRvUT(ijww3w}(1{cxIIF=sBQm59f{GKY)x>y zxNl)akIkQ3XXR5q{RoOL!z>QhWZnMW9!lav*LS2i5rK3sY?}b$DYL}1o~?l zAU$BmU&Pk~%(3^SN8d0E(s*}S@Nph<_j`!HXB8k4aI4y5@FAS4|Gv?SMb5j|=;u`e z@oO6#PyyfBpX^(o zv;co^E?)sAOmwim-^Rl&ui%czO^@KG?T}-V}}$ zO@n~y^_V&>vLx8%7;$vQHeCZ2!|o>g=4%K039!%G!Q+sR!^3qoBFzh29C$+Cd(4;O zP5uao-RI|WyAAB(q;S*u(!IM!b=8Nzx960mFL_ordUD<%uv`^dV03Z)gj48wlX169 zyp8-Lg3O+DoHPIZ*4zsSym~^@H-PvI966v2eq5SSod+z}gK*L(uok_*L#&IRH7j24 zjF)+5H4!a%?4NPWmEQ=Uto4U(2`GYrm5O`$=~2LQv?l;x8PMVBer8C4iRk{n*9A{c z=X%D(C^HDKCA!n@|7ze5j${?sNgkaVcyHMo3-E{h4bc3690Jcp#zU9RUkbpGYDAW; zT&aN;=bS=fGZ7<^t$@chnSf%FdMHeQq0sN9;{dROMBc^FU*)HXj*W80ap0B|PO^Nm zUKx+?^g>BM0%*s1)#&~CQ~2HS(a{6q@;bBg?6#&Oz$XOxh-xV@#8_+n(=!9=DaiPY zd*75_T=*?XKVI{!t zp|gT^$*D$U-1Y2*`&}K*)2yN;0@lpxZ^ZDnYAs7KOG(Rn0o_Q6-<<2V)Pa866Cd8x zv7xIjOZH61$$z2a$D$NJHEc#h)l15?2^nc2spEo6B9{yY@Da~OiXQFbFp|Q9h}Z`Zl8!U(ea~p> zfcS&wt8reAtiJ6m&%F0p{yoX}g-oFBY;9kBJZw#INx`07gUq{qpCFeLa8TO`1EmuS zy;8UVW|~p~CN9m(_%=>VI8rs4!L$V*w<#u{XsMT}QHdr|$+>re+Cw2Vu!I1U9$`PV zYTtAANTl=V5kJVk$O|(6vbQaVClQfEwwE=bb0e`OVDyXYnod_Xc0ksEvSz?<=BHZ$ zfSvx3n`hU|w134wX;M?#M6Unn%(6qSSJ%SKtFHdL>yhS41V}xP|NVI;-_QMiq8jhB z+H2;~WPIf;!@bViIl&)%Fx9feQhPv3yr}sUG_E z>~TOJ_h}ew=e@_fu!;M8SA4oXG4+SF!gy+5r`kJ{T(f1v3h3HhO-gF6ETo22GnMWK#n*x6wS^u(0{(l3L#+@jBYuy1a)oAmV8l z3CjHRBS;l!p~pyX=Y;+hHWh2rc%CbQ4&CzC9S>=b3FmYgHg8o@JDdw3T6I2MTLX;_ zZcx(s5Wk9og6GT5sfMZlt#y~F zpNPKoHoUWLX-m^nSDJ|*sK+Qd0Wi7LXc@8L;PY#YV^JJr{}?xF^jfZ#qtD~^GpoaY z-p-$kxclX7P>7Q zrDX~pp+iKN(q2Y`$W{SL^`ZfZy*%c}Bf{zZ{(cbe;YS8I0)keZ9q@PoCOZKK{CD{; zC^Y-YrJS>o2RMufcC7)ngf{PvsVhKst-GU#-qlNoZ|T9UlU3}#H}KWt5f8_v9iIiJ zmS|+~Kt#xHkH#<#WFp-OG+-Kr`}}Xcd#2%o4m z-e`-wE{p`cC#ZaKE{=55rS}bOa4){Nak-D(K(3ySAsox`1NJWi12NSZ1OJ^wR}T-! z4XbZgfKBq(k^qEX3SJ2W?qyJAVrf&uLkTJK&Ixu{0u-GQ81H(~p?2 zu^P%(vc;$d(~#w^?8xtAqB>F7&&h2Bf&A^3Q&w~uJ9PMek?5|B z3$BNK#-OH#J-djIW#kV0mVy$Flq-#=smd(;@(h_u07smcYm-$K?v31HAel|Da3(9l zjq%<(_{!e(jPLLT>6Z8lTph^ENq)8*)=xSR-yOd8WcwYtnE07obM*9|cNF2+KMh?1 zXFd)istXuz#p@mfKR+G;@7e`^8tK|Iwv_0YBY7ev0UAi>zuTUc7VtbkvJ48n82L!* zs;-4#no@v2L@i({gAoFA{$qN$woKnJin9N_yU1jR%n0NSc|1*6c{y3?)utt+?Pk3E zQkdYC&~uwG#q-h-{EqIO{I(S_<#8_3J>rqT5+HPwAo%V$k>1BzM>bn@J9O9pq)T`j zCV6j~j{DRTOnXuR-ju_U;>Uls$NPh6NZ+ly*4}6dBL!{}%_N>~Kea4M($kNg%+>I; zv6tJ>Gr|||;M+XG7Uo2SA^oT2iZITOl|3J~pN8LR4d`k__wzb(hjHWwpeL^FHR9>t z3Y5vUOsvBbGWe9IZf@sQx;X?-9T6wmLQE9K^GwjybQ4)V7&c0Uf81zHU5lxHgDY5K zyrp#*f`RNf^Z8YnyGE#hHU&-mtNZB)ZIs_i@8G1X?C`4F&Q8ju;94ilby4edhZnkz z@o#T$&u$54Cic!s(Jct5ECSlP1v0m(Y#B;Fh`)Sfvjfwxtsu{EQm!J{U&}SUeQs77 zT+aa$KhD`n{R=y*9+4jNNIse(58hT7GJetjWAA{lsJJO*?98j(+9@>4WdCiyP{{{~ z6lYiA(A*w1-ev5dy%S{p_ZdjGHnR2U3+c5O=MN0{;`QK8=Y5yv*dfFc;N2L%X%PRb z`gQac&Q@?Q$pQD%w)D2$)43(!>0k-Pgyg^c$hNzzr)h=%9TiYDS!p1;{jRSY4*4+e zy0Uz@w$K2B_XN>;R(jq%K<$tFWN8IcnMW&6^EnQWK;K$mx|BS?(qjqO%@{G{pAnw3 z^s-rV@KlLfuKr_zmYv9d;KB4pFFS3}%;C@}Z?WaTk*~d|pLt|g{FUHd-CzA`&pFpZ z+n?Dy0(Yx@FbIn%gE<~_Zm#&+p0g<~+NU5>8L0qZR`+jji@hnd3Q-{3<#7pu1OJ;<0ni+8Hr%LuYy!3KeTx&VB@cUkbz7Rgn)I1a zj8plE_V1rgg-c#jO>!WFBvdaBDYnQ_p(r>}f6bKf&hrK5QguzUEyTofI_jOMyTCuB ztk@Ms>}4dKe9ido>G$0Y&tG2=B-;_Z@-OrG;hNrioru#-25K)7*vy2|Wog8(r>=L< zX|$68_XiL2wbW}Jy>r#11P?Qkt=aC|Hm2TM->YRpRoYc;5UvnNgB)w0dW&n;s9 z5MqQMVH^bVd|M_7%3z;|r7zZPWP0G3yDPyy5r_(yl~4O_#F9$$!2#q46n-3@(|(9; zP?e72nVrTxzz7a$SSUSDSNqEbf!5&&`<_XxaVE-49%b$@XlIH( z5`7YMuC?g2CyIdfY@?B3{5?pt&)aQ*@aIB7521f&53w-#>^b1aLZR>I?aGA5j)O1_ zvoPUL`$q7?Q=Q^L^o$jaw4oVIJEw|P^_P4bGhuS^MZ)HUg?ik87`BImt)S(%)AFBY zJOd&DZ`SMn?+-s${M~Pve}0)Q7Qpk<1Q!74kxW9gDl&8iume8c_wOCL4*;+b3bEKX zZB(NZwD-q}m}fYe!z1{|8-Rh&Tmkd?T{u#akR9ncN%!lAC@W#xz#a)CETgi<3N!2W z#@A}(b*k0zsP!)a-V8Aw&%u1w!Mufmu#3TVY|b<>&+p+W%lI6ggLICOANo-QGsHUG ztpumjByDK~9(A*=wTrDTL&Lv8!+DIn_KbX226ImOYfi_A2^;bW0@}WtTK=1DP>0Q! zhtoI|Eol@1b;z%^$geKuqhzOfjW{z};qPtihb`=fGiek(|M#$i`Dg*7gg>LihXKKz zKEd7bc;e2uDzA2UzgBpE8#{J0JN9&1p`)vJo}ce;bGlqc2@^(%Jp%$neFDVean;rT zANx10(6bJCs1|w1#hlLGoGzbH!iiDh)_@>dhI@8RdR8lZ|3BUqcI=t7!q)#0dul)+ zuTLQVAN~5cD!+F4yjJ*p8+&Rqd+L8yTz|b)h#VGM=Krk-zvATx3rWO7_V3m%?XaA)Y{zshM%+C3r%7RvS znTxsA`uMDC9kP->LH2(x{!?CPW9KCCdbI3#{C`5f&8>vB!;fl_r~c#l&%l3b*)8mx z|4D;l>U{qNdn70L!_$xKiG*)mMC8%Vrx~J#%z(%^AocGnL8e6{=Xbo0`K9qnf{SR= zbE-TyO{8Rm!#d&NQ4#zMx(3(nsE^CDPTAHc>JiLt)H_|Vx$V$hXq>Ezr+2mMNf0;` zF9s? z_IhOQBWSlTyC-3vws<14xySI(tub9s%C-_Z61A{g)lBv=I} zG~C^~pvo@s2#DW+yvZ6vQm`}Zmu_UK*5Gd6!7zJm3m?waJYwQw(FLPqL5@&H)4$h1 zZin!13)A?5e~4`fa?f`wOodkZ3Vn_bU6?~Gy)@bOHJ2{`ad67GmhhFS!K(ak zY?}aYX@yS}$;HB0pOd^4!mok^YNqkwn=KLo`VM^O-s)gG8I0uF9ZfT88|sQq-u-E# zvfn4cP1Tj7?v3j%B*b73)PDtyIlov3IR^PJS67U^DC^~Cjbo6N6aRkvJ1twCks25- zHpBt%6O{iUDn@?FeDZX5%#}l#+eF*G@2h5a$Ehq7R2u1!Z~n#Vz9fsuU0VDcYlzdq z&qQA)Sf)CR6@c5+eQ^I2%EIMj+UChk=B;r~G$dQKN& zuF!5~zKdcmT9q+>q}i__JFNy=;$5!R{A<>bD=+=8BBCQ=v7&xj5HdG4Q{wjYYVwp= z#^E%CDxI7)$e3Rr!KHys{WFV-9wHbf@$E!PFz<)SgyKGZ2v!X%OZH$gEBjvANj&ak z41q;1ekeRbN=D;&<$Olm-dhMBKO6kHv!f*&yanagQ;~aF!$#||^Wok+ldrH6C`zvF zdyzxkH_q$46O;LJy}_IK8wAT{tT1-_eqSLGjfTX~6RepsTGR(~K@_M_6vj#1W|_&Y zIImW1xfFo-i(n~I-5)BG>*}3ZuC$X{OY8W#Z!8Rw>fgRr?aIdCr}Ouf^`}aK_bRef zgdJmD6_wD$rL%XVQzvVwahzs!Vl~D_br-~-VSyc!L(>BCz?#X7< zLn0peni0R)U!5sOKCiDKBRNpt?j2o*qBL>bZe;x(Y#1&l8IgsnqRT7d`IRO4laRSj zG2b4Qb@Gu{$P2q%5;v51$jB}uZ98pdzFUO#)zP?C3|A@^JR*PFWfjF0tVXs{OM53s z2&5f$((=Nr6!P5uaN<6K4y$Kyj?eAYzI5nv{`KN@>vn$GAjy{A{(98ilbI~i2|SUV z1BN>YCna%2>Fp?CLSRZkyhX}nn9VjpL}51twHGPmn#tC`rZk7&4nIj(Br z)Q=ZJ(7GF8MCoV_Fmqm${24_xZFVmI+%lIrx|Q{Z9k>2wQwKuB^VAehGsVX`m7;6k+1k@i!d zG+0H042_%dogY)fouCQ_5>>;F4v&#ob9mKXxvT2^d?a)J91aDb9I&71XV)*@W#`r> z#5if$?K7P>*$26CEdOW{7Q4RkZ7@C(Yj#fcdHyEw*Bs%%@%Yz1*Q$Bw?}>Ce0bP}J zHSPoT=OUNz84az;87gTRz@uokHdi9pY>XSpEYxaR=ZDvB8_S9lA8V3K!aGJuHz zf~1^qBc&)oJH0-SXQyqqCb~q9Za23)J*IHg;hiMDWH3xwrJ{(2ch*IF5U7XZWMvro z^E<5Rs;)iPV4>7*?a*0`ZXKLlh6l&5!7*ER6HK=qvi!A7=~kNvc=?*ALXZfy*xfzU zP+KH(=HKF)8&Uz#y)<6xrRo$7RkXsNN6NKK*VI6t8ng25*k5aP&_(!tBU?4+BX8G~;oY{l-b5E3bKO3?R%AZ>b!xraup;E&f<7*wn1z0!Tn z%dS;2{;5M&C3f2qZgh7xcggH=cf!XC(KC43c8tc`gFZ%S7>_#r{zxY;ccp>b)f1K9 z<($&)=!G2(blnEWn+deTS(^!}X*30F1oN6Z^Ybn7mg;SMm8JADlLkv=x9Js=VH0DL z&60wqUDv-t$wnJc3)QmuZE3-+EX(%PUB^p(p$nRT)WUZ5i19)wnzmbY31)}~F`l;y zwoSj0r1DQn0~f&SB*(WJ4yHf4aR%Bm!ymTOATF@AxHNWQf<_3QbfgW3dP*G z?ru5j^HK}@t@yD_E-BR|r;YEC+J+bY_#DcIt!jIz#N#@)2#qt4pIj-W zXO=?W2iILO>3I|ps_2oalPGgZ5q)Zqj%rTuzbO+J{plcBmW-z52|s}E(ZkaH=a(Mp z1L&pmio0R7*11J;7NV>9MaHK_z$c&gV8G+TP09TWr38l2tIvqE`Xl>IZ!qP@Zr4>M z`JOiI9HnJRB2?7zst%@^rX`0=5-<*BJb`SqjbExYHYBCb6?cKX^jDQ z*9krmmOK=ta{shKfXmA$8?h!_L+SVJEuQ!2xlFlECrM>q%AaZVl|Y65PAiN4rA-Vl zwW%?oSWrFxSi5uRCS4q;u=AFykKUj zNLf(H?6$KOe+ch|z!=Y4-oL9t3QVdJlz3REC&bvh5U4Zgy1?6-M!gM_^BwVbWK)ZC z?m*&2)i+x_Deg8*Gro=ddL9?)QId>o9Hn zuhPv^3;ZKAlGoHO*VH7YVKkIo2k3>c=u-W!Hj=;6B`b4EoTLf#r8o#>IDQ}gx#f>Q zPnGaph*Vbf@?g_tBd)}cz1k6ouNymQk8a#Q$=GaVSvvH1E1Am-Tp|UPusM%uw2?Hx zYVRq4s(4TiF{L&q!u6VC;&!b9nj)bGSZrKqxQeQ9S?$b=oZ*eIuv2V;ylX6>zeujd z4I|1skB`Qov^3>nV>1mxv)sjF1*e8zN(Y_DwG6GE*Ko*F>=b3mda@Aeo}u-FsW`Q z-msfR9Zm^U%cUR*jdzq&q7Ag77HPNwDx=2y@jXk~HJ1D{yQ(Oeznh~GB7?5aEeU{Q z3WdT(+CVw`Df_;mQ;Xi&jvXJd)Ylfz4MVLCV?CLTAx`X7cbsw#Ev}wfOv>Kv#BeC3 zG_12e>@+U{`(=d-b9%yIRJ+K4tO3%2{QJjEs>6=g?E>(xD_kww&@rE|-PiE2f%((?uH z<ZwhI7~bY~ zMJF|DUAZ>YEVf$wdG$ENPN7Z-Kv5`-F{sgr4?!l7QKJhpooFKQc8kS9irHGEU^ZCS zKnx@seu{MBvwv|boXOD5RyT;WVOBm82&#_4zl3)Fz))w{@1jQOly8kvlHR5oNH=st z1SKAO1w4WQ-02K#+dhkd;R1rRiV1&sRkIqtWpl&Cd)8gA>e7`vseK7tV2ywCt4qj> z=lF_8<7ph2uCcjig^!hV(%fHx2!EWDQjulSVm@qGU5ntrrTJ*qTgO3kMCA%!)bNu; z;PJYn6)dw5lzz?DCqH!G{5keH&Ae<(4M4DoOSvXl$SzR(1YIIWFTQJ(*-rSDkB` z^+71bSacymj6HP2G=3g^%Xx6NuNtYB-ryleG6xKX+Jz`IdHSI8&OVVGOztNB)k57c zHu8PgemR8=vp!Fe$fYtmpQ(O1ESeWa=~_zyf(C#TFD5KefNAqX=T5xS0`f0jRCEHC zIBkMi!(%rT{h;|eLbBl~CZQS(aG^5oe0UU;D=BESNX76<&qkr**0~7GD)K>;@2ho* zyV5OZ0~;yF;T`UL&sYSUP2xylc*n5gYL=b*u;1nW8ipln8S`0>Zb$(02QuJ^TM635 zrVnf)ZXb@Cd^Ju_VBPjBW;E}Qh(|=7li)f~y*%$a8P)%`NT`__m`MO!Q!8OAeo;`8 z5{uB8m(v<8u@W}k-&1^W*)u7m%PIP|goS~@w!b_$fZrhfJxL>-A4{T!s&o#osm-w$ z2IIW$5feAv8)zc+OJfk_lq|+1dtMAiM-8{=1kC@dC>Uwyg#w;Tg?+WEl^kUeCLkB; zN1*YAymr}r`GxtQT5};flD&{O)G+<77^K+%VrwRWaaYd^z`saf;+A+-6H6>0f`)ZO zu#=&(=5awDF%#)`!8)FprM%Z$j1*weM_Q3hcGlhJnc>%xr6>YM5QbT=;}n84uXP%+ydpJ9_qhXIQ9Ozqios~a z;5ZZ2pqi(Jx*+R5OT+Xqd!sgj6!1ic_GYyk0~5DF&FmoCHdqw9j$$!X=+0=4Q;yUN zvyfX|HE2PWVNpg?-)|WdnQJ2R0OJFWZXGhlkFG4N{9P+g>KR1MXCzv{>&) zcdppr{>Kji3+!-8ZW8BIQ>LdTQPPZ3^WIs)X!1J~e9T`wAl)v_tVS6(`_FF1rl6v5 zbY>v1HQ|w|OhLUPcj=q@YVzN6Gc&BErNjMI?pn&3z_ zGAPvNJO}g8>~q-5E=0LQ>WXo$Kr`TZzYqq=8a*d+soKxZE}Gt^8Hi$YlyckWT$B=3 zEzAw0&&nHqAX7vjjlxI=qet52V5ja)KKPQE;KxpuQkhFmEkvmH6*16H8-W+~i>+8t z#3l7|QK1-RZR!4b+LcvOjm@*yPh*wk4cRdV}URb6P-Kjv%~8T(Qq%-Yxq=_|4YL9^t;rg2UTQiAc96S6=;)`EpK7|>o9@$3aikkdC3OSl_;a`pF~F^8c=^yXHlDTsn0_(C`(vpXaRS0}%x`?gP{6SK? zHmrN{ogYe?jT^Y#B&~j4eKui1X(nv5R3#~j`=t@Nqr65d#8T5Yc+e=ePvh#WG5o}> z_G`mMot8y68m}+i=O$m`C&3&|G(`$L>UpyWgZob2Gy>|- z6rAR=cllEMalJ0C#Gjg`_}`<`ZsLM404JKXaitb(lbBN{9c@7`1Q4k8V_0dAY~KXF zd0+KKin~zpPcvetEKeNqMO|857LAbyyd0Z?z+D$5(Vs;izoOD!*9A4F&YNDCb~L44h^EF zEPB7HL+ka7?HP_6Q*?>MGA~Y)_`;ee*g#F$>!#tHtQW$W{h(yhR+VG#o-eE(~uX3Ink3)rOT#A4r$h08-6QC z4F-fDDF|J=%Zb4J=qF&Qx}gpU(dNuY#zkdQz>3u{NYS`1s?lZlZ~GkN;0u&vYvUyy zLOB-*G$|1;!*9`*pUZ6Ih=jUpC*gvNXIDhPB#h87Cem-g?)2?rcz})_@+zSs(U{vG z-z6c)(hQ!#CPRc#so+j=akG?s!(~>GUh9YF4AXiX98*GEH_F*=m-bF-WX|jZ}Cci6U(j}YsS{u;t#2SGZ0kh~& zJl`yL_U>VIpfLxU31!hIQXG+amxf63GLkH7e z3}3}%opQr`TcPqsjs6gxr&y?uW~ib$10b!eQJ)k{CWWLTTKCls?Osrwu`9S`KK?LM zfq%9AOrkBD5!I1AUvjU%Di_Xfc@a;QhHGacWmKkWJI7U?;Y85uYC2&-8j|p80AVoy z^*$Fa#?`L=R2E4ZZG3InMI8> z3<7P){|#+g237oX#2u;c7*86XkwM|85}`1$ny8^|sYl4OL{Y49X%4Q+oq^?Ls;bRA zWW6q^;s6mm45w`J#DJGp?z0TapexGW*3@t35~zLlJ?|$<2(k7lDn7d7h;UKKxk7yd z4XrcLY>1#r<9VM91XpS2LDs3 zxgf6&f0sVErqQa`m)yBi>i#zSDOLNoBS)()BQ$Z51+i-iXReqqb|&@9OQ8pR?xQ*9 zl!g#y5Z6y(ud$^k08T{rduYGks-N;WL!3Qx>;;;bZr~t3MuS64Yov_~ZfJ0)xHs~CR5--PUre(s+NSq>9{ zpACIPDX()_`(ni=%me2tUK0$gp$EgJ@#2fqNR>Bp3dKg~G&DP-{kt6W=)7?-f`WT; zzE{k*{Dp?&4o(@u%u&;D|Exf`C@e2SwY3Ei!VfD#$9yj$*e}Lqgvg?%bcX$b*ERfM ztz{7!;z~C04|T+0w;%?6W+Nxv~po6_|!_^aX!a`n4%g3laGfMq_A?p!@)> zWAZ4Nlg$uUhiE?;II4I!Dis&gD~BGNuO@TUx`EjLyv-$zzFFU0g55RoBFgC?)Ne|p z1}j|JUr|;(PGHdR(Or_xi}G5-juy!_ze8lAv}~ihoK*U|#HKQR>A37rrplRH7}e24h`y=AL`}kjt+`Q18#xG<)o2?j*S_EcjkVDg`%Dp4V4=pL?9{M(ZTKA&RYH%K5A{Pb|e-QoLJ$E`r5;*|Be0;n4f zIKqE_6_e7`)0bNwh4^5M-Gy&rL*1*c2{0bb>%G-T!sEs7ijW`h_cWrPBq#Ln>x9Rs z^k+ZA##Tx99#_2%g^;o04;CuYX6th3V6MpA6?Xxg<5a?VyPx3iS0l-p9{J9 zO|a|8-4wF&$6VS-g+KO@=$l2=5}i+j34F2={UQn^gw+G<;yHv_wx+6U9;u5Qt zC2wh^8a4L-2e*&*yiV<=&Zzpn+udbYGGU85aQpeoR?gaghqi=rX?Ly&Dz;E>-89rX z%6Gx`l^UJ6|GyHf^Dd#Z(pwcHeWt)b54jdbK{m2LE=+0;5nt#i*G}AjKZ@d}nfS(i ziiqvJZfAj1YDRH{(4_;z`0tccKsm*6)<>ZhSrn8d^6{=JLbgq;qgjm=0S6RHv*}H1 z3&~Z?OZwd8*XKC;kv@sv$#$}i=sB#Zv_WpF-LhmI6iS<9n)_m5Z-Wy%!ZJyOy@Xp6bp#W!0N%`Fo15Jp-o z6G&B6FtO855d-m$_3K4Q8PlYPd#I>*RIagGfdw(Rd@e13N~-9NT&>unQNM#x#-BAW zm;Dc&5gw|7M&{+Mdh6e`uv>^w^pHxdE#<}u7W-_M3FsMyEC-IC{l;Sy!{|{~9pFO5 zwbngn45l|(CxX97lXF;9WH=9_OqeV%qjR*tyGa~%-m`JlW(P`VNUF$BGYXnWFZL=B z*A)b#XfV!uhS7zjT0ifk7h9w&clkGc7<|DTq*S1mu(Q#LW=DqpdP{hv6kjqqyvSRk z!}a~0RhEDkA*6=q-RiLxIVF5L_O8E~M9sH$ngbHc`7_i&EMh#L3C5s0Z$9fOdn!@D zmQk6+4yJrm7~Uo-s6)dO2~4V7Mwv##_~)XS?&8z|jiCwJQYPmUhbhWr9%eeNQZ9r6 z3c-ia91n&OWtT_Pz%S@@btQkzWd?MRUmmP@62a(984jJ16HZg5D9IkTi1v-&7i(V( z36_@!0@^3dNA)vmA|YnyG0e(u1ypS}I~^$xA4upN2(asHG>2I9vI<6Ng9CH5Zol^O zKS^W=x6c+WNPTi837XOV)GwvXS}#_dd3Kcd@V1w&H0J*8=pJr)5anAP)yh2`b+X-7 zpaeSdDLzwPdhG|BoS@Gnxe;Gyvn59^*X_t~sIK%jtnYhUg4)u*w1h<;)46P8pIR4d zQSIehAVMK->H2l!Xa%90_E6IOMDSUgslfjl6dows?m}Y~j7B~$eknlw$Y^~zwUX-os|v>0k*<5sf>0pYaa`+gVAR#7OTF)T|r{ztwT9-peLdLNpgJUHE>Zbykn4NJM_*HCG& zixG7r8r;NULlFToHv*t zz0Y76o%+f(8@r@?4$trk5i_KQIZgs!Is6dU{YG9Ynf7OTh;pJVVj2Za6$`0)e6T_m zaWb5EvF6Jh@ow$b3RjYYsw=RQS+c@um{8wVFGPO*9$k)~e(TytYg2HWv5gniV~?0s zl$8puWEh26k&zPY58m$-zsuRo&vn!)ppbvTo{H+=X8uG*B&RayGf+Vx*3N7A(#Gvg z6l+wiT^X#9^}YATxI~4{4gqs%nP5q=&Rk?#SGNvzPr2MKId{y!{j7}<7oVQCm|h}s z)9jROw*^Ka*8e2sK!+ApUY1Av9HJ=gq%ho^lP|7_V{86$9kp(V*C%=k&l!~s=l6XQ z*~WaRFto1%d9xLi;w0W@8;(Jf)T${xT>x$s2!%?T!NG3`@{~u~>wMp2of`F)7)L(h zb&h|p$rV=C0A4Ut%}!pD5?Pp?sEGC9OLIJ{+Rw9O3jnJs3c`<+^@679>Z3U0>DX+F zzr-<8CUUA*yum-Wu&n17Ca|vTL6jrepOySX&qHk<&8K$RUOiN(c2dUb zRz(!#NW6)@3iF(s!~>vg@e@2_`)&g1 zR>_E}DekoR9a&tt$lp4Hj-R#CC1%*n#Q{%F=;>i!Oqhr(8kO=-lDpsW=O1Z=l>XAd zevI1R8rSOOWBZX5|56KuhMLaF@HjL}85h#aByt*u>C`9}$SWV$V9KatEj3cv*v+iT ze;S*tf0bXISyTBp|GxkwK-#}ej~OHtq)n9-H()~h(3Dzh1Ar?TG|(AG4m*oDa9NRt+Lm)+e<0Gshh?EsDN6 zRfQSk|04%Yqk=`nimJEmd+swu4Lp(v%3&gbw0>?cleO8l4{4J1(xuAaOqe2fE&=ui zBoUKX+D5BPBGC^CH6)1P?SiySF^aVF%$WdWtH8f|%H5ybTAT^{3w;t0oHn9x1i17d zfD58Ch5E!$xWyiz3D1vYYY^i#xIW1Z^i2hS-rm`;lP9i@MBYP-tOd+w@Yxglwoh58WrmM-rRtwQ6Em@%U&P~hCxv@p3~weH-Lv5gl7G{ShP=E3o`1|Wh0|**{G$D z<6(W00}Y&J1&vaSm=5bY8{b(_szyeVOEaT(>s4Ausa|n?jXlvR;uj#SkgT6zIvP;A z(H*qw)jjDYV9>|0WUk{-ZnEheoRi{BQ5~%oW~q=$Y`pJMMPe!q%6uR~M#~Ma%E;XW zZu#Ps8XqZO@w*L`z$krXF3xi68C7)M12S=Q!2p03z~2t)vtM+Wi4Pz+?YW?AloE*R z8;*qYY+@XUanEvM^iu*{Z3sr~8iZ%3NR+lwRZr1rpPD#Bql+ZfZ>Z44^U1CmTsd6D z7U{1R0ms1Xpvjf z8CIRhz8(pT`u0bZG0Gy|hdL$tQd6_+XXQUY%E^eL1@40qM^*gWY`cN-pU7!%nVu1n zR~o18iqk%COJCICmnd@|xg8S~9qNr$fx&6-Tj*r1`U$oHpb6k3=?COf7%4E0W_!V* zfLMB<>{f@k^QKp#L6J}p?JQ?7bdYofr-(SMfWtPE> z`lb{TCo*DS+7em$EhcW%Y?t^57D+YPim{=6SJEvn{Ktl&p9%8ggZ7V5_gR!t-;peP zl5~}8oD95g;k!59HW90Nc@5z>!TL~e^THl1Oc^3)*R zJ7*&pB{8n5z;49F&?(tFVB0^xM zqu@HIvip%OPxUjwDc%XTyUg0Ce5B}QY$yxWj?~Ooe{+Y0!g)=i59P>$N$E!%(n5I< z50pexT(;iW;7w&FVz2lgjStC-HY#$dbQ_42=D3yOg1+w_xFLd9#FLiAPU36yQ&#MX zdhNyl(`1%O_Y?Pld!%{jG8r0Gu)Crax#N$AWpb2yG0?U18tT>5OI<6$|MeB%l&SAU zg6*lzTqN7xH^WHx_*ska7A+taL*GceWS+7XWofl{opc}eGmRV>MyWTpLl%65Q5g`p zRY#MnNAzxoF7y4@lqLrL0Bi~3KM%;GRf3#owHNKqxTyB2%E#hSAWc0g(W25|39ijZ zbmfr?+#kc`=2I^#QE968O56;_3y)B1e><(P3VG4+$?_RFGJ;zA1aPXBCxIE)02vUK z-3Ut`0ZR#I8GA8Nb%7Uvf>X{x1rYZ0ppjcM#ZlFdQu3ZoolJxh_VWVs5yfPu!%~Sl zmH8R=ga>rS%_tKx=tU-`EDTyLE^4zrw1FgvYvYVYEQkdmc#n9RQk}7HY5>t_?>>n#z17AgxyR+@Cj9NEX9Vv03Uz3eR<)-zab^PLFI4 zQV;-@8Cg9Jg*E*!VQYfotgpZ*%m1j?x8zW1V|9fsx)NG3`*Dl zycSB#T{Z-p8xN{M;6WLIMl`;E%uE!vLqe~iwwz_9`vQ`Wv7?3ZBNP?v>sHt;h}Kmm-tYf~rwN2AUD^7%7jyk}Nr}ApQD{ zDXiV<(O4>N#~ReSGe__=U;tE@7@d9pZz9UEtW@a81?&Pq-xflYjJxvKx}lZjQ7Q}i zl0sC*-YfnPXb$iY^v~DGy@*58np>ytkoz@qk_$r&5JdDSX%&m651z@Me4?gz87OFA z^cwh=z}Q7}suk7UY%arUUDni%a*4_jE0lP~QO6ZC4f~*s)iyXrhM)S_B*euL>77p( zuH=!nMZ*}OrMSZUY}DdrPL-n>De8wKzl*xjk(I8R1V`LPMrJM3ONv@6bL2Aj1WG{snXD;`#A zjTF|Bw2(q0o%MX}%NBR11k};hx_k>2$O&2l9v}?Te=!L3ff8wCHjuyM=~p%p{Ma z0=$R5Z?%QA0RTcl2#g+8CKN7;eQaY&f9m~ zJ?A)h?*nk=sy`<&@{N%63|3ldmz5A*_A;>X z{jeYR*K`Q!Ajeacmr-{?EE7)qz$1or8sfx&z4CSuSP@?cZMZBfL}b>4wAEWE*fYYq z1cVKvlGXzdCVcmOcRO&{f0S3N#Afc~l+#3E*@h!W3;j-3(5D=m&?*Tej${DfjH=8; zw7gy$_rL`5lJ+$G?MRq09~x9ulouscdRB9kMBuxiJtjxl4OzW)qtKbf7XiOU0Z0J9 z-v%|3xx)9C0|qcSO~ko=NGH*H`zF=xw*iv=@l?F@d|>-2d#RYLlTjPa{YXL7u$z@k zNt!hEbr+!m5PNHoK2Tjo_Z|vo2S006r@6BfBKW@b7U}Jl9j%OGpTWJS8foTJOsqojkD@Zp)n^ zWPzLBIxq*KCn*|!TS-?=nkZAP+l)0@6VF62J~n)@TTs05mdS<*Gm=xY>M=103=)7y zJRm+dB;VRCPQubgVP@v$o`7{Z;3&Kn%JczFky|7*$p;5|HNhDfh{HsT(?PKi0goba6y`=*w1Nx9)T?3 z{W21QfwQl$SVa?^h8aaN@7siP7!mlBmLo=TERyE+8f`#~x5}r%BR~ng1&&}qt{TB% zgZqHO1yT9;W`x8S$*}i>@!T)hBLJqM28|c?quSZC!>?vG!qQkRgL8)N|M|t?xdLT$2um8P2v+ zpmg;|rWOM}D3ftkh>kEc8Z_M;o)~p7tT3s~=|@H~M@F=jY6HO#gr>nem-et!nA`DjB8-UsN$MA=>heLu!=-W`>%>pr{&;BzdAYG#K*8O92EQK zf_6Dqn}c}*BfH^UaadbD91vC1@`8fW+xEgK;Ex zEG#3!(pnRa7^?wb<8EgOQRU4R}+4hl32Mf4Ig#oRYC21BTWW@S72jjzlTx8-8uURH^A`L`fns zvHRd2iAW1~ih=W)s0T*dQ&nUeesjN!K5}p5aXRvw;n4JrY_i_MqC|2D!I>cFlYZ4& zB;n*5E_r0H8(MfY4X{q~4CB=7gZA|j*k9ivibTNMFxBkBs9U<8b8GCP6CYli_KF4A zylc4p{rGT7M2#_OX%e_+O=tLB(=k=9Qr)0se=jD1O^D&C>T zpSlUCZ!}`@GxeuwnybR~6{c;26^>I>i$Z{9wIpoXci8Eq@om~;!z^h5meSBbg}5}#%bhS9=Z<&dBX}EHh99w*lofhlL!_pWrNCXAy3W$ z{EHy1P~REBx4^yKJ@gNn>;?E!eP}@7mc0?+A`L?UYG`bxG*Jf9soQ)^_tMWmMo*EI z)c8bAj8_W4ywPQpiK7-ho;BMnt7Zh4xgGYnY{TM}uasB95EDumPq5)&FN1WY@5~kH za)-0V`C2zcUy0C`EiMs~``STBwsPo$lTu7j#|sEW@ojQEpkQ9 z34&Y#oe_ZcGiFS@dEP79PZ>4D8#Ai+6G^lmLzDLqd!RnC!9B-iSBt`BvQ|W{W3A$S z?vdBDbk@Bn05roF6Cm0PqEHP$-(^QMHwBUBC*W)Hq;4L9VzJP1B`NF!U6TTHEAMURr@j4 znR8nJWo~b4L{&UTskEa43RFCdWMeQP=e*8Ym5=O+J|6~?JvH$!SYE?}e zAhbpC=r%U&dRpcYDPPpO0zGD6O(wr~pb%Ayy(DL{!DYdroJEW40uWrtr;UBjld8G> z7~;|4g#Mg;#pPDAPz8Sljm=hvAoLB9MCmF&dewWVHI)!SKT1iRW7`@4<++#4XCI=N z*@c?421!G9QvGD$8x!{@nY9rX-ZN}-V^c(GDisU$7t9V>XBn`Y;)gVDFhhXN^&s{`dEI>>tztgA^QPjLO)IrW-20Z>cJxLD0qB> zav&1Ek$W_YT2WC$hZf%tndXJ-gCH*IcmvAO9XgWd9W^$SH8dk~YP@P{t5rM+z4mgPUNB(gpi#49hIP`j#a{|egc>KQU|d4I+WcC zv}))2wPTU^WxZFk1t2W#bs z2d+XwJfWXJiHTNx990X-QxB(HQEGPNwFY0?a)IZtyP;=p9;q$CkRy`_iBY;ij0G7K zObrf10%=A~5wplOQC3iG$trheJgvPWA=OF)Ck1C#&BnAQ*u)@`mkS<^zG!4R*p=5& zWK#5A-+OhOJVmcxgus+!%No3Rjm|a%m`bu`G=ZgFZRoDT#suyyP40}E?mThJji|vp zRoGIH)Q`bW3wd9Nh0AiKlg9+Hnfagw6l!{^*=aHdC*}wQWX~bisj+Ya_7=Gh_K4kp z)YeWU+Q1r8o+IdL`I^z=JMvSLLDh$#1&WiE<4?|sB#RwkhxCnB;>GqMt8WxE%5j=G zDbJjz0T>qG5rO*kt-hJj_=x|j4sd70mQ&z$Qk0>*=^*7PeLA$FEU6*O(vDHkof4^UXiG@{Rr`#p*rPA?zex)T!=7h z-Xm#zM_5v=QUW5yZi;o4a8F3og7MUD1;Q#a6zRZJZAOc=j`_f5Rlfk>qSnO_u(2(x z-XUjF{SphTll)3Hg~TiBs=b`-{lc$AymRGX*AgmK1Sj>MFYZ-|HsT=AfjEm7hs0~v3^%ehtJijwN{)@RZy#;VEk;J9_hCorwEK6?q-=cFDy|InIEi^0 zbOj>=3lO_Qm_TYxEE!>275GY3L2_L5t#r?Bm>!T#{g!ldFR5dVa%iEo*?7rd0twEZwgvR36 zvHfUDb{vY=t*9JV2!7@MxlDu%VFuhUc->B#BI~Pd>LXaxwnqHW^AYVXjT*l^b7U7) z)u_5apN;N~DP|X&{HgYMlUg}~Ia(Wo+Ko?WTYQge z^o}Aib%nGv1Y=6RGS+h=m}NSyZ7917n0tNWp>L2y#~@_zAZZzd6G87=RGEO!Uh{N2 zJ+r{oWkgyQhIA-9BUFPF3hoTXz|pk^J46Mo?Tx-^%q}r&?Jt5$RY?17J2DgdC_W1D zVUz^)6;h@U&8!S`h;)E&H1(ay$d3z9Kd3kYz-)#JrrHa}q}6p+zY4{qhNnOj>^`H@ z2+ED|l8n~j3t3_rbfsViQ+%fp@}&C01lD1#D?+O`qg;hhsnIKok|wxPzd)0_K6gS247UXNiMn-QJniphvbX)x2pKYxP8zHj zPIOVAl)*sLBh7zECmz$fiB$0Hw5h7%Bo=pC5m9A&@Ue+`h@3_NFdNmV6w&fIHh?9h zVg)d6xQ2P+9`~B{hZ`;twZ4oqP-0ee2>KiBBmin8pSh=M^lDCOBvJHOe`_YD##Jaz z(~3vKYTa8e1TE1%Q9{5{b=W%Cz+4hc!Yd5{l$p32R$B5PB8OJqJ21ERV-GPijt6Dd z=+(KCynqquW~#vQmKCD_M@LX?#(_ge-K6|ehy}teG@2$+Tx`+?0oqbQx*GHYm?2EA z?f;Df8dZD!yj~*a7c}N;QBTzln=4CYXGbzn6xdefg#`ZEz-vt>!Hj z&p1&ob<_e&m?hd=#z0(Aw~`s$LQRDw;`5=OFw3(KYge-M-g0Z<4>cm>%>S+hsmMvn zVjFeZfg*vk5^0Kfq1?sj@>FIPT{Ypx3LUIAKgg5}qlP7{X-SRL@lGl`4aDZeJjB{= zM4MlDNfTNimP{_Kx;i_xsH%AO^W{`I=cn9IY@g00Y10dHgxFm`x?z! zHWD+`f;jE5vXhh2V6TreWuhkqDQHVrkF>6_W`T)r7Zgq_!5+xXpG(6(P3OqNgN(P34=AKJCv%N z&=$-I_e?WmgTOw~hMu)w6Y9m$cEkv>dG-xaUf=lt0(me@_CO7`@}%y97L21*vdA-?f)uf{Zs%7lQkzq&E5kJTd)Ff6lZwgu&*3tr?i>^ht#+?ehGCOIvQ!$Gy7pWX} zQ45K8e$nWjm>5<%h)5KCYC5fItAnu`qQ-$ak#!T42ft~QAYN@B5uRs`oZ!F%NK6V4 zjjS^FeAfaCnMiPMXaId%qFGC4h;T?R90? z71sPj_r{qx;zr#WT0e-sB}P1udnF^5>A(;omCuGASvY16D72gv(x%j4>XSkxZq)4Ir=U@vZVBT}<&kTU zo6-q9uZCYG)fQXi-3+5JJqkwq^GFesY0_9dk}Hzo=%bS3%<<}~en(}4K`GA4dfSV%Q{E5W2KqsQ zCdp`J78fo+(nj^#O&1tF-!Fa&94nue?Nc{wAALhClMNW0=JAhAss5`bGch<=fIxbL zS>)RS22(TfCaoOc#!De!=!bs;35L%Z!5T3wfS)qZ=L@G6H20?k*eh&cwy>CaBFe`} zJ44j<61&3K(LCo#t5kt8fl*=zCsmEdRtZ9~{j5GKM(>h|9e95Pnx9ce**|KjVkv0h z&p5X;_GXebCSvT44Y2`|jZS$<4Uh`;n8>P$)MyvZwN*v*4DYbkJ=JZg_A3-wr4#G; z8ypMOOeuo=JMrNS`!#TZ8$uUe?>&l?Syl6tQ3|kM+a|AGjxBHWFPJ(1l@-a=pj~Rf z$BI6C=4H@8E<{bjxP6~=bY9yDb7EJ{tpE^gKQ)pPrM3g&&#HzUBC-7?=Qgcs^y7U6 zbb>MhlYy#88}~Bd#FPkGKZh3<0vdXh5NN*#__dZnnyE7o7TklcP7(D+Z}ZHasYkdU z*h)!6^*vK=x!@3TZ+I|}-Y^1OiRzRS`kL1n2Q(!z+%t+g`kYk2U_?uwiGCO$P-G1c z?1rNPXVcdqNR)%mG3$;7ajuo9r2rN1CJJ5x0A!x z#ll+kUodf5d+m7)T0od%1`2=}+d|WIv;n<|pJb$^Bb7GC1R$#7E&KxIYXl!CE8?Jg zwGk6K))=*}6BRu;)R<^(GU$=}u5=`*aSS-Jq>Pc2=xPd%6iV(}&ohNwqGp!0nPxR5 zEq;ecWqC1aGCv>NbbTOMq$&W$6UZxT$~7c8q8jGx zC>G+S4e6+z0v-M`cY~{j!kLXh3A`daCc{MFv6E|}v0Gs=%D862{CPx?cOIy$s*Fc7 zlAFoDZ5lhtnxkmW2w9OS*8{|qZZzHU1{RpJ6_q8R8UW4 z*W<{HB=EMHdW0tM-d9O^rH&Vs1RNWP=nSSV(m_%AwLKW{&{e<^(nQgh=wO(s+oSo0 zKD%w=KCsGy7xBJuY8!dt$lmR!`E?+h>R=A#H9zmSIxS?z>r}zN|eSI}VSx4_-Olo11WLtMeUzS*uO_X*t9Jx`9dfm=_S3FUR-!Q@9ag$nA z$T##&@J!$LS#J(iqSYq`Pd53}9%&No1rap9*ALQ7R0tBm$plG3Gii&Fi9?HCidVEk z2~7P)^dfNdVpe4$4yGjHj2?zF>5ZhMlqfSo;hx1qLiw2{)YL+ogn8MhA)#)pp#ijN zddG=jV@L|SN@3AT3biJ))G`=cYgCEg1Ay*LOIAR}`}#X@>!JiuR#Yh3a4O*t=Q8h@ zN8yliO)Z;bXe{(|pt6^u2~k9+_+y#45p5!$B?skSmKP?3(?)seDrODy%ciQ;U4EHY$M$S;WD6#E*{=gGNnR zqMSewfP7n<9{}>~KlK9eR0BZVNih6682!EdN@@0;z!f5S~c4g;!cJNM7o zoSVj-K<0hk&!lp_sHm@LHthkgi#(JiIlNv#?yf7kvueN zd8wjH$&dx{O^1!@KOZX-4x8B+rQM`1nhfmF|UZ1}=P{?IX}3YuXnK_-ga z4Q|fJw6#qH0Ou8=T$aa>s4y3Ck4dp}a=u%{#1uQv4Y%9WSSF$ZjV9oPHb+aw7W0CJ z?S1V_@U@0XL5cXpIqZ8Il4t5zc39dVlOMDPH;e-V zTF;G#17IVdVAvryZm?O6T!M^47EKbQQTwX*JLeP?BWM^^vC=CG9>s4BHkKIM1KKO; zn6!A_`Tnj-)ZQ{I4T&DWcS`kWF&9$FVb!beWiSuB1YMD1GOZy>@i27bF%k3d{fu~`IDCvzi(1i?0!SIdnwrYMu(-xILqc7e(-@~! zS?95h)$bG;FN_%m27>Zv0bvit7a}9q($+I3Ikl*Fg^*5 z6r04C*YaT}z#iYnif0!%LX?iyOKN3|xB>T>N$TPtE+&P`eW-VuIG`7gOOJO_$7>{j z2zoYZi4H980D5yP#zX9$O_ih;pP{nIDAHl>>HxwE6hooK>dpuoB_?2&PHI0EVv>giq}9Yy=npj zl<%0d0{jULw-ihRWKi3kM$&;#MH&a4HuZsemiaY79+EGbCPUpKvWw04~nHaR;^5 zML1PfueftK&+M21+K7!IM~2Z$l1wnb22irxW(5o_M3Cj8g)|+4^A!Txf9i!0%abzK zs=4kFb1=M7D#|Rc8nxCMG&ud#iEMSRN#Uc&zEKf6u}`OM1~uFuxu?DwTB!F^(pEWu zzQXS}Xd9@uT%R{U!cbt-Kbr%ES9}6Gd^gFP5(ch5eL~Efz0u~w9)l5C@&-%rNC=Il z+bHmA4lxI3L99JlC6jXN0g*4Zqs0ZlosHsg*#^p?41*|Trl0j%Lk2eiY|?!l=(u{V zX~!#4a;hjZQde0YYn=Ij)(-&(BZ5fpG&WfJ1m7R|0F!cJq=FUAJOPpkrnkNxN+ZP` z0(LY2m0qxJRu+a@q8+3YWUvz{=?lrkj;w|NaXzDZ)~X(u5AKWn%jvLwq+DzalX79H zSs^r=eQ%D))njPzLp627oHPSFv4+x5fg`p}wF&eA(z%9V!Da0Vuv2FFlfjNKG5f3n z)qpD(#&JtRC^X+#o^Z&*8MXnHk~WlhS_Uhcz(ChgRH#fEV?jY!hZ<%9Hwud&u+liM z#L^5BY6@Bwy{mn-;hWUGY-kWlHz}lC35J5iW~_J=bylB&X2Dspo{eL@TE|w7>~M>0 z!1hDJ$VgSqq(2s~UAmOSq@L+U0)r5Yu_dgTwIUMr9esa_x$MOXYRt|Z`VRD?3~45= zo!EdzMe7Rxi4}rlD6vw{BDsfSqVEt9b%~GK+Y2?MLdIm&B+ia=HcEq!IadiWa9YG| z9y2=UA)<~dc&pbuwH`088n9$hJ>V`en6IcD&_|$9)GJZ%z({dGFp;3({V6I@rQOmI?bZ;438#;wFb0~bugctK%HDab`~ki9+gdg=aARK z=ziKIakHp6L(d=Y38Q|9h-qQn%U2JHVhrovbJK3roemP9m3)t3coEwn8q~KCEy*AB zjR@wp(V}Y9015fNq4x;y?xV8mAa|QiW*!2yH!TjT^53I$vu-D&XA*HC`vzwZ5T2mE z`^}3I$yNJ`-XWgCR$@^-+WSLnCZMW}mce<_l1ndLTIxTLO6VmHNNuS^i;@>x%_AfTH=nu&GVun;ba~!GFx_I^2kyl*48&oiEyM?^9|&$&Nxe&*op)% ziq3QuwA+sD;~1i2V@Z3u0$?f8#Xc`q9I1RSDAg$nKZG%_uPPJwJ8M=M#I%Bcuu5$x z6rnHz97?F}?5jy`Od1=;Bb*EZ>NE;QIPO#5?%0$y0mo|SIqtdPy2=>koKu6x;`E#ISz4YH&CDh#iBLpItis5Qv(f@w=4RlFU_tw5`6XE zTl{`MznMJ8w$dXzLF^o3rE+Skes=&cNj<0`8G&6LAg6ZV1{K%N$f*+k$H%6?V|x_! zAD6pn2Ca}rdpDF#8LWwvjrE}0*`dj-U@r}n8F%&waFcfEt1AL&Fe7;`0M+0SbmUZx zBf}(IRxfy4!s)8A8ZBj&*vnC>Fp!*y!(fCT1KCyW=Ea=d>CH=Nj4`VvDQhK>4x>t# zJI=(WWECM6QS3(MhAmiKXDA%uj5S~ap5CuhQev=f36RCW0fvP;lqtKTI4Z(2*3U>r zCM8xD5pn8Nt_&U}W^IjN=hb%v=(oWhH60WyX&X!l-t|d^BePk0O*P^D&f_Ts8|M`q zAjDC+f2CitA(Ng{^bL4gRNX9U!${aHM9HhY0uhN4$`Y&R{lr9t$Ii33RYtQICU%qt z?viNW_bVg?{dcsmQ-uynJEVOj_iB(YJ4SFQpAPC3rQF@>`%dWtuX_PS(CGVX=t<^f zRAvS6In43oI#c6uA5amXnK6k88{HL{&8%rPFymaPu>vC+G;x|*nb6X9tqeqg;|jP% z_r3(dm%0c0`!{*g&rT7g8Bt1UuFx+wk4!xrG)RGn@Kg^5L$H|6pkc5)S}fxwg+QHz zH0(cZqyB~q%FQG~*ej)E+F_zdN+@cx3Npiw-)$WE+a$ArQtVlcH>!iZXTB}UYt3Ir1j&$k; z$Ks08T49}Gj>=JJjHM-ZOHg`D#QLlGZEWCBP9!%gQUaj=RM*)cCdxC7RZ7n+!C1Ig zMiQ#Xq?;QsVcv|jHepeOZq~4w&bh`nvO#AwQvO7Pz)9jrQtfY;I@C$j%^J@^s~d?H z7$+eWrnyOTS7?(f(E_71H+fD!Xp{nD{mHR}331b;j3sdE>N*=C#uzEP9gnN{KrLeg zkc&m*v|wHjYf35$E@ZkM_^6Uko*Bn9T`_zK?@CB6T&8Ox=)H;CD|ec;e$3&1+)beBwm7%#brbK~b~wDUqJa zxuh$!JH08J0Vg(P9nd`T%<%LRGRHb?n&lOrTA@}ZD%izdp|H>cMBbGtakA8&5t;O5 zfCxoCwM6YB)Oe7s7n>V+e_AgFYSdJ&@9Tt&0kRFaXg`ZyIr+-ShzdEm`VQhr#n`Or zycRs3SfO!TSp?Q6Fm6y^a`VVF@%i}o-CSNNZ5w(5YFl1zFs(VQ-V*s$l~Nlg`ga-N zg0<1e7bn$4x;KmJil=w}Oy5uP$c9`Wzl3>({B|Ch@O*r_QqNs}2d+X6%qK`>{)JR` z+FF3!8?dZznY48t=@G)3>NtCe*aGh#2X!MfVll6D44p?N$_`qhkrc$p8=>glogsMj zEzEvt-@oc3CzvB5XwWkr!T3(iB8NTHZh$m~yBm6gg~! z!doY}^J!htOx(YYO}g~|7xyi_)?~MJbNz}B2n5)JE7X2e)h-WXC&<78f+RD;14U{$ z24uC+YB`TzpIUrvo^$UetK|+dk!Aayud4QgTwEjV{{T`**EnEDabh>0&?_I z?Df(^m8+KbtBn57^#g8q|LI&e&J3)6vG=!wdWRsahr9R%WP@He;^dtD;v>pQe~-%U zRxZ3#KSiD9>tAdqVcCwNwR-U{_Q2xRo&K6y&klhJfi;q2ijQrm`Q|m+Gjrz`b#QRG zdj0Kud;PjG^S^k&?f&TGRZ#ky1{3Gn-ksO^e))yXT<+QR{sh80Ye%?YpeijB=HOOx zg!fhcSRcOa;C1r9Kr!6%5oK%qh>E!yjV#h_AwMupCI0dbiGT)|`|Dp&dE37JMIZg` z_>IurD$Xt!i_^*RSettB&&~=+@mTB{+<8@EC$<{yjYbJvLq#Fq>jSt1aQ#YXiF{pE z$!dkB^~F?%pHMEbt#Bns^WgkZi$xZI?PmwJEtdkZ6rH)qm|y3Mu0`?o=L;00 zbl&TupaXQj4n;FraCksHN#cefvTduKJNCExumcIKS7~b!;L>Q^g5zlinqFnd) zk4~z$GBIz%-si;zNd4Lhv-bXecbK_ZZ!?3?7aJfMkq|cQn6udGWyZAxIFVngL9L{9 zWn)^l5j)OxgOGwS0qY-pwiy7TYv{8T-f80Th!dvUkb5j-aq6YFAv&xVZ5@utz3ui1 zYg>$QANauz)3sgG-mkwxY%!XgS|jF}zhWIIvKR8-J!<541%IE2L(x6Kha+IQ7*6}0 z=HBl$00OW5`Vpf9{DC5TfBeGpstDhI1D7)AXn?4(O@qahK5Xc#yMG`_jP=Eq^Y^mZ zA$zFs0ZFC?1wB0-`})MzTHZXwZJ9sTOpd?@f5f>RX=Tqg-Zuz34&r^bZ>hh6tU<-F z6gqjC<({X=((nnH2`Uh>8X2Gz-*eqDzPa=##G5logX_d&lQ(D-+M&K=^}!n-X^7#m zxoah$VmEX;y&ISD?IQ?tm5`b1Ll-&ABKa#2pJ;)r{(#~{uZ@=kKA2Y7x;xRSTR0$q zaqofRuz>zhNCLHKNKP{jTW_+28UCH5?I{W~yqluR>ntMnFT{!-KjEClkVNdSJ9c!3 zgWyfj5LnZ%=kQ*y0UyLeB9$MFo(mKLWHpXv47!WJC7`Sfja3^VXLpO7= zm@>~S^m;+JA`!;)g0#i!6x6nzjMyO9EUDOu(j8;4Te8@*rubE}_u;sGbJqY=(A{w!Mt>3?9Ii?vDKL zS1M(a?wO~(aFI0*se!rH(8zrPQ<7_2AvDzizgCLGA!`UGPKq>Y&aP!b>!J{IQf`q( zybpSrJ2=J(+VU(~+jbrtoS|TWBj{+j0gPr#QpUsI8)-_5@0q-i?pqpp`8OJMU96>C zgg;0JcNN73{z9?V?Gon6TZdlamfgYNqqNS_F;<|N<`u{-gPr@^{p4UL<*7h9DL)?; zw}{(3Fju)(apQs87uv}$lC(a?xY=J%COoqM%zuMc(#KB3U4~I2C!&t?pb?WsU93&3 zM5xY(Fhjb2gm`o4@6sGH-sklvh$VLWz~Fp+T*VR};8d$dof!>rhih=OR(qLq?QY|w znJ6Tw{K=-fus#~<%MbYSQF1C=DJP_d8;WDIG9&dq7rG?SHzc9_+R}^nK@oY|PG#l#i2Y+k++`AFVRIT?|E>1(K-QEqvr*&QxrFIZvOF~F-gfGhz zdvgi>ulwB4m}U!g))gq?p53|TP$y%ZX)Jt$YAGYU^{Ej5e4!)rtmfL%qWw^ zpnOi?1?Zsrs9I@p#!`9vg~VKjcMilY_ur4~YT5(b8;ug!Q*}~vG073GKR}$6yPR=W zShjZ_YQ6?*z$1x^9pS=toEqq)RCc8h-j*mmKY*oeS2`%Db>=g1YyfP1vpW!%B)xbj zYD-HQEqCZRqmVI+4Kl^8T5&;kh@ceFx@Ga!v7jOgcWtP~DB!+1I(0rU$-Qn>!gyej z=HBOU_BE)Wdpq0IE0gD$8YM=w zOmclJBocAvf|-<{!jKUj1{~JWq-OAAN&IsT2(wO66^Fvmx;}O6ZNOv+l^ylTh_gZZ zr}eET#Fqqi{?Z@GQ4=D22L>s1C^Ahe?A_ug<&okIob8Q67R4;+VLfNsalKiLSzc~^ z#wn;zrgyT4IS=`rc^ozRXmvQKy@JrP6xwDnNZWun`=JTo)albU>~@8NP6~DU^OK_n zDhB%~^T%KpE_Dtna<`2Wvm}hq5mXfFi@QYfxwXTBm0)$=eG_Gv*2r3tE$&n^Td{`k zTmV8VQ?H>(vY>89({Lbl`Xo;S29j%!+*RhdH!FN;9dv8e!s7KAQnvxpf;zscOc!Hsv59GI5Um9^~jYd)rORA?~rZZruhhAG3!4}RM zCHW}jHz1bXO1C8qN~k5Sn?^W+FAD8CpxrnQC7IVu9G|%xS|fF2esi7GQE=fdb5ek8 zt{lN*@46Eo0pE``g@r*O6cn6){finlTVqNG{=QYc2S~W4i9Yzw)=xzvIoxrFDQ*r{ zhYoPjn&p9#_}BYR;``R7Vmqw0w(jJqdU!j{J%fYLTKSq^hsHlR&7TLH0^7SXS!0az zSX+7Z&Uiqv-m3s%sCRaYI^r@yJ$lYSs^n8bi_Wi($t=!s_y^DpO~0Zwxbr$BSo_Ed z&o$U*7M^H6PvPiU?qUEH*(RN60b=}+fZ%Uj8jak*g?vqqo?$g z0tUZE{K-MhMX$^?lRu~9T_T!O6G6^7bCJf{R0>_QQ;MK9b>~s`c)Z)<8$5iJ;9859 zah5nr7IDX6XHVYFz!cjSvwFdFhNsR;?lEqye3jbJO@OEu(D2 zW0;)@z^B+&cc)cEDE26BpToq0LJg92JU4~h9~n#aVm6rgSX({`bDbSas4z|ZcPjbY zl!Q&|W{!$=DzgACY8bxWk1I!^DJ|yqBB>x#$JMxC{!%QOwP7}Xt4nCBl<+}P$`ZDD zlDZ;%5XcwSkci7VD&BwFtdk=1ihdV3rd-UP&4Okyprj4jBt4U00=-cIDT@P&v&A7LN9CaIp1hN7{l3B0UX~A)jKVz3w zD~7s30+110+STS97B}!@RqfQ-exDQNp#pYaW18tql2oQrxfMMXMLQTi*0@y=(1D3P zt?U|6X9^B4H!jWq+QK#r(!GiXiy!L}I>7?95V53%18V^X11Kk@0?n4Kv4BNF&NeaK zk~B%Vtx&nq7)+xOzBLt+%gCJDu5LKsW-NoYXC^7@c~RYuW z0xC90E6<%3h^6GjO;h%SvB|R_%UOZ&lQsT!PB(MY5`TjR(Z*Ae)J)toHB^oVwe9i^ z?xVw+TS;pm$tut%wyYAMyj;kw?|{j*z_clK-4>vAu~J@ViSRAJJi1gy>NOtPl!HQ$76)|h@&7r z<2KwddAC6b3g{(rb%s8xZe=rk(By-07Bj=^ZI&FIKYLk4iG;_{{BE17+ytO z2LxqBT(}J=QF-!I8PD5#6^l*)-2CKG)+k`x&-MloYsf`u@0^1^d|cCRyN14=vni4Z zc8#IW4T-zP09`<$zhoTHWFk&J1PTSUY>^NSZsW*f1u#Ge z2a1}ishgirrT?jE#cbKy6n*7q*YH&F1!MaF%C%|F8 z(X%|0v)^&4tETQr3Z%-(2$Bi%0hpcDwqmLNpqg3ZlL?AP4f-XNP;#`u!nw3c-uYZ+)YjW3yi6guuH6}1Y)*6L|q zG&oKgaiCM~+|4Pj<1)7P{t0o!pR8gl;^|a<)Q1BASSc(< z=Kt5pgI7l9lJP*1h$fS{dD zz8C$stySw)$jSpKK5W(GghLKwyWS!P!~vOssXHbul&0VC(X-+x57Y+_A_}+Qz*IiL zF#HXf%=C-lW+;}40@WQybvuli2|hyurir4lP+7mmfecpLEFl`$Jk1Mu+np4JDckD6 zQl^HazkssV)ime7mf*2CtJRs+328NrHyo;rV|;-E?v%&<&4wMO-FVXQd;2SJrpES40}Q>5`c8wX=;n(+b--LgsLf9ZNpf8w6h;mg zFlG1J`@<1wE-2mV@LQ5YRWX4=!N#GyOb|LqSb0H|zgk&NpaY=>d7QrDF?ESYC&?>w z5Nn=ad3Enmvhr{tu-sOY5!lwKQV1;A@_V(^udLnTtb0E7twsqmWf}qz<26gL0zWFQ zeSUYOKQvDhjLd0C)PN$>h-TiPxGG1oK#k;V>O|6+Ou&o9&s5s<(rtBymJdpc945mh z&8)zIzJykH{r9tQ!=G=W;Zv5+?K4WL0y`!JVeL}2uaA(}+(vr`13T(Sx3om^LPdNr z{fMBaok1Du;cK_Mkk+TTyFf-G%We2g9?=}4vekDC3Nj#&b1j>c%uq1H(^U3vAL+;$ zGTisCj1LIbh$A=$EW>!rf*%OSX)i{|2nx~PaZ{rKGPJ5BICc-(gK_c$BdED8(a0S#*=HXb~0`7y>~RJIPO z^%pD!twr>K1c*i)Xi-KVlrB?nU?t+1U^EOd)y+AZpA2Ht5M>^XxU%RCT_q!Wv|tzm zB+aV_Xz7I;AIPAd0 zNxrVI80Ti1gc*=_&V)c;s?2>d*Qeem72mi)11cAGEw_!v{z@z`k;4clH?bW)3rOY5 zj9!rP=lgSFR9D+htDVgq==|nKMLhoS;r;})jFcpIV#sONz}iQdY$g*u_@OytLB*rS zy7LOr3D01F-?>o3P%gwyDnpY{OIh6)+nNtOx!xjz`*S{m_KM0C>nQ!ZKM1$3MhQs$ z=8a^GW`S`UKumxb2M`PbPA&~MK)DWS?09d~%Aj3h>(jc8O=es|6@X@??L7>$w!zw} z_~UvI1$~qlmye*$S7Gk7ugQ!aO=qJcqpDg=)WWW}bR1K% zDlYXD)?uF45RPds&ZCV^3!4&g2LM^IijyEQs*Z7j0b*Lx1ABEEbf+7Uc9qq$;t9jz zth}7u#RDTU$Xe;?kThfOHQ>-+PylOQXwAi2IB?Om)6?`3U>e2V6Vt>wxi8Q?-YJ+M zC`=sWA?r9TdmK!c6ei9?2nGb1`M9khT1$>e_vOEEu@+s`AX_829iM)V2ONjt_6bu$ zR@Bnwzyzf}sr#0g)O|%5|5*&XpD#UZQE)~U?e-~vuom@3$GkAaMDTrC)-xDI^BL$f z0Un@O`NdhRH86%YYCb6XP^1#&By}9(R!wFOE<4C1ihEit>Nwc}@sR%fH@V?$5^u8d91S&^d} zw#`AvD757cfx2tf3YLR&jXMJlMuESiA{ng}eOAezP+angzyj|$?dAw91Y@Xst&_5knWM1P#3GB2MI9>S^+~0R^Ga$}~)L#BcrEk+k-@8tjIOk0%pJa_R=X5v_aS}96({XktMgik0Ym;DQn*t z0LjJO%3@PK;Y3tghG|o$0osHPVa@jjukacS^)1X(Z$rk4W1{;`8_{C+n@O7cBy}z- z%hL0D-B3|p4;{l9@S^6{Ck{xcT8#=S9VW#lf$g@kA$XLc8yzU&8K9nS`VpY^kevW^ zX6$RlFHS2Q40?BG4cDoS*Nl$W9_R}^P3Sl)?jxA%21rNUvKl{4EQ*y{e+483UOA2u zP!?Z=;>WH3(jGs2Gp zG^6Hcl*!#0>CRn1?Av9v*?HP&K7!jb@?U^@xvGN2^*r*;#zAioy5&-XBh*MKqrJl{ zh+H8*o&{)?W>47F3yN?xR6!@@W~eC`Y^hZBgjqxgr5<}gU!bT8c+hzzDnNbE%FeF8 zw6f8oWbVpK`_0@-k=M?-n*S)913bvI%p9ZPni2fiLv&r)!SWK@caV!1yk69L(w6kSiNkPDjTj1R}gZBv^l zD5_IF++jwpk;^{BBLgzD`R?&>VXY+$lt!*m-_1vDF>OJnxs$U0W{HMK&P2?IM}b+u zEMzaU!)j=AvKQ{L6&nK@gn>%-&dmVc&r~;V*oZ{HHfhpK-{3&0!-U}EmG8pQfr?>4QcvZi}2A$=?&ZfMA}8IED9Q6 zU(pmZAymjh&57eE)Xe3HpuktOZzkGp_3rb$Qn;K|1)Yu9DQ)x4SN7mR*`W=%k&*y}$w1 z%uhpR6jI+d(6V(wl2VID=Te2_g4K0y)VwuYXYx9&8Fx`ZQI?s#O+Ilj77Jz*Ks>~x z^AU*8^KjjrsH$_;;-qt9Pf~Ph<}1>cB!_C^<`%*F4qhf|-g5q^A^Vz{i3iOv#zpXC zz09WF=B#lWkVKkULaA>wSE0_tY}VZWa_{(zKWLFKGe~h-hC94N8ll3O@WT#BklD;3 z@;n?PkfgEc6Da4e#T;ZdC5grf*Jg8@0w5%!H<-ugE9Qb3b@~ezb8!R}RON20c(&7+nzbvv=!Wiy4_ZA< zDjDA@fv*g0Wx(tC9(Hk_n|ul;;B-ryEo7JPo2pI6Sp>yN&;>0&Q^>T^pql-_!g z81z&O7QTIsRo(<-rD!PnaQBfiDiJ#O)weSHG)kN?92l1@=JTOO%$3jP2(Z%KNai3m z>D(3HPZhJJg5M}!;(0Qjd7wJ}HDLXMqTx(iP6KUVAe&k3Ko39^Z@~A{h_Cccd=*f~ zRin0j)JicsL<6{oDOyA<4iJk)p!%8sH>ZAozo0!1kn_@vc`f25XtPg5P;aK0nRhbH zXp{_EN-T~6Cw8wZD+kz2^5PspZB8|4v$iVguQ?w7+g*_CoFp_B^))?X%$uuBJ zGt>*E9c#x)`ocr)Ur?j2>6(dJVgItq+GEGy8doV2h`fIhy|OC}rz{W5pe`n>6^t5J zSBh4c+O7ZeK_`|Sq(^G4-XM=KRV~E7i;NSgU>;IR%<ve}g7B(;KHv0|wb>We6~x>9-N$@LTD<363)z{p1k@ey5zIoKQCZn^E@h^2_C*|* z1o+l@XAuhRcUF{tl2*yJ*^Z|jH^^*TRemHhqw`rEz9d#{9Y36fXGNVLP6(!)Bh=wA zS_8nQ+fc*@w8n{Gw54?@Mj*@wgam>KLQZ}uDfSa#ovom3#R!DJa`3*r9B^Vyvbg5u zs*(i{*3~-W47kUiF+1ZZr)L83nR2GbLEK)RY0%#$90^rx6%FdmrBKe@i2FJP8S(QH zF{nP3aMLbjvfesaCM^Ck)?vaEx}upJ+*z27I&!0I9h0zRHqRjM?{&B@RF^1Qm6@X5 zLK{fstYtZ6yrJipz+eSx)iTb&(}-6@3fhzy)DLw_dPbv`*f4pXVnkxTmh7cQlVRDy zzzeDLp9|3_;L4<+{ORTlbcS|!%tMr+&NPw;dDFluBQCuM*F8G-9NoRIC{> zlI9d30DQX)>qQMnRLLm}6h~K`*uJh5(~OXVuoUsHU84?cM=c7E$jP=&tA24}$CwS> zY3HDieUoZu%<+A_6}S0Y`%}jGs2nKO=D)0iSRHE*YgVUl`1%91#B^RETGc$sJ5g4w zS*=7(J!a(IzQtOyemzl0mkAP|9fRllsnzdmik2-5h7{c%j<0iAcBiGv2zRf;>N3|@ znk3O)iFIaNmfv8%a2ggkr|TJC<{uy+SLZohvs21^pBE02DhmcIkk(jE@J;krYP$zz z2MnzTJ^o6b%$<8io>U@tXQ9s8PI5T+La?FNCdka|^w>!O(N_nin1}Li)SH8y>v0FI z24*xE%%-U3g{3Ys0}@E5x;nH@E;J*XNnN6CHtr_sc)Yk*t!z3#8rkW%Gx>UFLkMfE zZ?#lNcn=pZlT;DIwyLZP6+#Bx7uLCH0Rcr2X_FpSwO%SY_YuhJw3E02w2$5fjh@iL z`YLg8`ykv`t6aPSp7aqICiqRh%ej8m3X1m&z-Z=ZT6RG5bjm zhw;;H&*LC=!(gr07p7#qHL(wfbm+K9F9lk_^6&UrWhKNP+DWc?pUBj_l)?*bE@V& z=!kuhE(`9CW?m)&3RS=@a+q$KNQAV>q!5)e1r72_SEwSLQ^`D%&w{qBI_v4S;o-vQVRW&G$+Yfr==aW+N*9vknN_MdV{geN>Y= zdCphIFZBYkjyTPx=@gb`F~zo)&Rp{jB5r>%YeN{z@}22O0FUD09--M7da}U8uVY$EaHRfrp8hE;uxC=>9pL30I^O&N(1Eo5qX#NpQowmMEb1QKg!a7@R zRf%@URZS-71MRS;`Xq$#;5+Wrk`RJi?=|am+FC$KuHB9q)otHY2Dq+IpWM0~kwM$b zWhOQVBKQ&8rWH+uQ36-TTg_rwTx5mbv%p|(=L9u}p4T;9sjl%r7NVG({yG38*9as~ ztso)QXF4Gydxzj^`_{g_wf&Qo;a1A!Gupu=``%oVVG4M)+rQBbLg`JRTuqDHag;!r z*qC5Y8tD%rzpVo#pf`lfE<|PHU)IQx~REE!a zAUi60~TBw0;Yq)TogN^h|$8i8A~MUkjjWqBg-&GBnx`)`%wHBJZWM!q&1>$ zQp>$epjpLf!tgh<;f*t-{?si6xHVGo%zv-^iy_YCy|eNtyA$+$H;}8c`YIo zJ%<+6E8Mnvws*>}o$-|6MybEbZN|6_l;p@dv0p-oM3-6IHJJQyO&cC$cXXXF^8MN- ztCQtbeP~LINTzFdZbT|7N{M1wMVHg+Kje+35eRuBE$3|5iE(LHZ-8nv(d!^bRP1YT zfEh@usb5|Qf&+B;Sfw1f&UM9&BG>76iLO`^oPu0WxVUO8P*kF$oXZR$$n2#&8B(=m znSPxOj?$5kJVT zhD8hHChmJk8xd8uDP9V!n8x`uk#DM0u8)%73>O5&sZqrlJL<{0LAVHK(2%3Oa1IPV zKpWoruPevwK;E6JfooLgueFA4N4w%>F-=r!s0k#h51Wmk`Me0uIBE16l%7!jyLZyL zJ||FGTh&5^@*Ojd>dsk_8mgMB#XLiOP4%7*h{fs=n&AWlyH|K7EYrz!F0PNo zhRTio$;^{h9DxiZm)ESP!ya8W7Vwx2`Ne+J57a+lXpfgx~Wfj}6#5 zfx;xBH+gX*>wWfUwoJb$Y9O0&8;nRKU5p;wLmj&csYZdANP+bL`vMb?i%m#w=QzNPvo?a&`V`EJrvuR|bs~vP;b}OxXxR$m|T$g%8F_)K*yM zojS(J%78>z|2?Eis0x#+H3}Qbz`-FzqQA!|9U=}QAw7-591VzEz&d9q>7s^S`FhQy z^!g&SbAJ!r!cvf5^;(#l#0a?kvZC;|K6!fC5aHKZ7`mo22(WH2tD6dKt&=h*kIryO znKP)7mT_H<#YhBocg~G7k zZO2IhFmv)pirQSz7T>a6+Cs2Kvcvf1Kp9BVTrNK}!udb@MyC!|<#vQcplUQA1vl~) zk>J`#iqt#l33z8q(+h%%pS`}l6nNh7t%QPdbkC8<`-%kMPP(MSlq;i7Bgr}zI^Ywg z2RUHPp1Q;je98KRXgGuHbrsF>64)^%0}qnGvV!;^oasA%xHlW@5HkwrC4gY0kt?H5 zxSkB%P(dgfggqz7rYHR%meM8Uv*f9#m%|uE*tET340heM7paB_I%FiaHOvf*-x8ULCoz?2Fq*HD{*@s^t?r=O-g_T?Y@`=Igj+ zR^7}rJUSxvdYx8i7qt1RU2ZTqWh&LJF`wdG=Sbs?-roswgiPx|QFvT5(zV)c@=n0x zitgq`hQCeQv<}%NDeY-iH0$IM_>AM|D^gBi5VdStH38Ei#pI5giEH|mQ12uJPf&f| zBmbyYAJfR|d20BOw_E#|i6t`vQAq&?@ZPn~*7S9*PY<9Ao6tFsP^Z14o31n)8xoW} zYT^zC$9fLqmY}x~Jk+k$`#_St+Z5+nqk?T?_Jp`c)@Z)nT`(X|;_s6NvCjcz$xi#= zIMZa+>DgQNMeaens}4_`K@gK<>+>qZIWDkX$6;YpD!7M!mAW5$`c7J~;9w1_kf%Zl zC&}YZebO3=un@97Xo8*CvnYa9=kDS^q-is)#2tbywOzB*Jk{Ow9BQaAB)J63NwMm} z@{Q=vkr8dD%~cOnkTt(qsMyxvPddu2Ui+yLW};&FdE02CQ^_rF`?$$GpXcT*I7tCM zXxp`u0cs;3YhG|d;F{M4rIzm&!PX9HhGSjFtYwbMjJ3!4PUzn+Bm8p#RL0_OPEO`87 zv?$aXQcs=R2zmU#@*@s0PW5(;T?A6dn&m?^N%7m7P=dKR>V2oL3mbvtBYHzd@|r^w z${Jb9S9HMXzMUqpUDxUknkjW$7MIYi_gnhvc2Xao<;Fo@ox*kimfEZ{`jP3Mu>@9Y zxmcW8eL||*McQ!aL%gZU^^;#)TcC_#jO&#m!!TSNscuYlt7F2vN-+64LyzCnt zv(a~+tpU4}Wz%o71{i3G)7eXf)IG$by3o!tB)P>TB#S0nrZ4&UQ5I5pHXLrzO6Qd7*yD6!}iL#bjqz#&sXN zZo}1M=qrU{)P-{ttzQl5=^3l+7h#oaM&oO8N2}dj03X&_OI3!uahcr^(~oOitF@Sg zt$qTb9Q264TPr`1SZ{r}GXFKJAQ5xNw1=aZI#v)dtDPN46xT5$=9JBIF*fH)9%x9< zicpqAb47FS|I5maiEztBl&0= zRcI<=Px8dh0>*h_G0B)6tjj&gRCy%{$*zLf_xe5zPu#>vsV-@mXSmbZwWIAa%blG0{RJH7kaOuD4e}$UWa4kPw_EPUt`X<_1*^X;zg$43_wrPNytW&X(sUk`a7`+> ze`4apX_HjfvH2GVgcmAR5pr&YV}x{E^>GqBtG2c&96}DbaR){Mhc@6EirAo7$YpJq zAQGrnNMJi)0sE99j;i^^q`5F8?5f^I5sZdL0VgJ zY1VAgfQL79KyueLUx{4TgHBJgo8t-p2}FLIeJcz|4O9o`ajFtr(2l^B1U@3d$FBoB z&MCbFUBrlGQ8Nb0_pQ(Jx>WMd-_vJZn{JgxG-b}b7nx!!=veE-99-Ja0cm*dB$)ZPGSryUeo@_N$96c83-Dk~Qne%+ZVGi#xp! zE%bI~hSh-52oTi-u5NMN2%uNA!tEY9qHP@j>ggLB#nvW%vOY_C!X1Ro@)JgyQG{j; zQcyi1w(mgv)QhWD56BUYCmbFKt6CK$gSPG4?0{U?Uy5(^F%H>+HLohp)bkc-f?nF! zLk6Yyv)}Ku8@z03>3KttY3yG#=FChW@-nB9^#Ly1$V=>K#nKUe?TXaQ?W#_688-NG zEbB}xrLi9rhJ?*)Jka}!0tsmpb(fAE(R%yD;yVjI zVpU5smOvfHG19fwYf5c+=VndssmOh&P{kU|bC^Q*`&74;i}SiOPRW=&8#CW%M5B|$ z2kjg7VQW^^y5<(uFS_FtmTRi9bc^~3z4|LL!nv8;uZt^co#jiTp+?{WrE^(>a^P~y z#q(WHMA8C)?w5IhT^*bWTO{;MK)v%Yp|8O3sm(wfG^6%4-+YQzItE|%ImovL2V3hd z=c>ko&%gMHScOl%0qwN+1I&eHH>aW5n#S8_K*r#=Lsv(5n@^7ZXoV<^X1yv)6QhL( z&h4^X$#S9e0G=qPxr$lipzc6#ko)vUr8542j8J`FH;*1*3S=qea_|Fm%-s3`UwrgI zwH9lqB@64^94}Ko8K?tr98KpkEO%QP<^66mqqy7%xknv^78LR;9~=m;;cHp^Q&#u<`S-Ml6utxA_BlLVDla8jYx>LJZBmAx3H46!F*Wpu#2R zrrCn0+#325@4b+1Ui(F%Hyk*o%dpmsQ2Tm-a40k1_JH1SFZE2@)t#jgiRkM)d5DiD zp!H5rRI}e})!Q{cVZ9MwxKi#%SQ`!L0&<(3w7u&x6;gv}xu}p`q3zT$wQ*gw-f05H zwhwEFrR$33tzKrnH%03nXEANGt}s^jd)zD2n`1_Ue23ZsRBRqLRzB!{lADS-Gcrdl zj2YDwxW9kqdfn2-85`L;{(FsTf*h4v*ZKDpRcBw|57P)sFXaInx%OEik_rjXSgKuh zBi0Y#D~HS3n+=0(Yg$0ho;yh+V$}xM#B^jux*tHl7FE}i2SudYM-R2fYaUfoNY3~% z%d{r@}_L&J#W-w!FM_7(don=$uB z5hp5FV#n;|JAzfRudHbV`vq=kbnv zS$bIA17f7BhZSCQKexx0580!-_q63kj-FpsI;-ocS9-jiwWPC}A5~Y$rViDP|xG>~(+fll|D%GNjz8`oJ5Qv{V#rVsO- z?>|#RllHgx(-cBiyFY+3yCpE!-r?BX7<>BcKj7`hY+#btiuP; zbw4O&)Y5u+y%8QHqMBs64+;m6YU;-^Yq-)5nuZ#Q`(E2tq}-I-yRd{+eb9OTzq;6a z_CdLEg38I>`eSS9c4CD0R4fOojP8%N%wkHGyHyJN`}FTGQi!vxa9AO>zr9gZ#Ht&8 zk(1l4^={qPV%Bxu2M|WsfNAb;QFu6dBKNz$*pCTePHb)4e_DsF&+MTJws&0p8Q= zKQ}GLxUvTaW#Bf|Rb4Yumo$V87|E*|KfA^hnCYq_qupntZXjo_zi_u9p7i&{R&(t_ zdZD2xBwa;MSP*~up2QCABq4n(5lyvw{Dp&FM1Gy;7sQmEOjtnlW^;n0Ic{oTJjOug zc)e@VKj!zD(BV22tQ$SB_M_Vrhb-pXak51wCoa|1AE4#7b{p=Mh9^j()NUG&p*~oD z+vu?8TP;0QPrGQR&?@B%>sBeL5!JnORse=9D_rjzm8n=lI5*yInZnjW!wi)akZrh6 zI-T2XbVv$XC_Nv5zhAD<7u#@@(BbMQkg#PxHGoU~6%9e-zYml6a{ti=QM(NS2v%r+ zyUzE2jI1!Zp-Q?os}4`AE;zBVL zS+IUsQaW{n?u{Z+%uLHgbsY}|E6JI5Cul^I`qYPDh@qx_V`06|XJ|xIJ4^koaNCN5e5yF{H zBOS=Z^{NUZ!4yy)V(%sZQISk~yyr+uq z$s}cx(DhF9A^zBfP)d5z8i~PeT?43fu2$~m%Rzc{)jBCBHJb|(KoN~_=Bkcpw39i0 zXe#tgp-VdP!mnyrdM{1ReZ#I5%ajEXh2A!I70B^tN3}!wqc*cg!R6WC9uS8(d^h)Y z(MW3*hgtvYj9fa&W>(W)47eG+nq{+AnpidH^QMhR9bW&QRE8WgnEGXR>_XK7X|?Rz z{mJDrWE99v@UVfGQ$d@Ym~6KP6bGhYs$#@()7H#@{r&v+v}q|j>ozTPB071aAQ!q> zhjx(Vli?oz7?H6^p+Z9}+iHJs4?bNSWH(b|fzG?zuPL@jOCtQii+7>vbZv}1&^qkE zCCCr}NSxGSinA$6_F^g$&#b?|l=Eu3kpYYsH%01u&5GND)T8{st?JmK%f`AZ9kLJQ zvRr5|I*uFfUXC7x{Mnevj=6EQ8Hfz(-##BboTLoz_>E44CgcYNu^Nl2ha|lC=6)~G zy+}hzi!}wWzS$q85zfC;lR>J`ZK@z<^*jD#z>x%t`u4>M_4WCE@XxQ0g?=%LC$`hn z!m}yIFIOQsN9+ps3S3?;vBCi*EijnGY-%^xxkk00Z|4Y&s+?1j^J=B$d-nMz;9#%a zf~*k`b1g<02a75X7#nS~&d3Yk$mdTO5kV*tFdefL${d=uHemV#XJ5j^gI+a%juJ-k z^RY;TytEqzQFhf1&ULUOg9K+(%J^=H?;fUmCI70sU-Z%K9eKK#K<~n7FFw) z3^X!6Uxv6=fve_0rPO(wGjrh&UU-hw0=qq+O-tY3y;1xC8}{8H94ZOHV9#U=NC{;# zNy4?jphgzny3j#gFRA_l_@!7FtxI@>)xHCWR8cj7gzNYl>)d>H1$Q|$0ku3SQsft zn~O9emQ9cL1uMMSCZr=G-3KJD_VX8j9a%^6tQXwTe_2k;LhM2JvJ?@4lApsB*CJV8 zY%`8U>dPUBQLa-#%|tBl_3a$3pcI$ZnW?vL>5%L_p> zw+z!$2%O;OPYwwxJw)htD{fAAHqqQ4)3BaKxfk~ZBbtD&|NeR3vocKKDt{sO1$d!s zgkMKXNtt@FK{)t%ljA-6`~@Ihf?=nu<56Mj&OJ{K>I$qY=(E`uu<}Kd@a*#**Ksda9NYZ|MpM+50vK=<&~3dJ5zzp~RI+^LucTl?@+Z;N@ajdtWFpL$~S z`5lODk3aQi-qmS9FsY@0H(j56>e$H|Q<3kpPyI_S>-$jx5WQXU{>4M< zmk<5%fAK@l_N%53eQfQ%Fvp3t0|_Ts_F#{*Gy^R+qz60W)u%QHos{kTYS*3^yMOzq9uU;7jp#)LyLEG0v-kz(Wj2!h zxqsG@Kd&dKpiW8Z(o6rwqe~twWj*d?FH*>xEG5kbD4kB{UtmjrhC_1@X-PqU>))={AgY7m<h? z3`=1qI9eCz$E~{Zq~K&%EG2zc(#Z z+`~^BMUOQ&ElF_}f!I3OXM*&EKxWs+Tsth#_oyS!%=$Z;&kT*)IOe|1bV&2PCprh+t@zJf#f@d+ytMqwV~zgl@b~al0;X@kSH(bMc9Crb4T^W zPgzcR-h<_ozkIr!$IpD#w~jhzf}#MV`y;d25309mPyoEn%rw(#imEEF<{g6mwAJM2 zJy}iu%crY3{vQAU;RoqU59D(H{=w>;$NBYd9;}W$@WJZHUp~aJ|7HjauDKn=9sl;v zKm73BAAbDf_y7EdAHV(6pMLYNc+PMB@TcGZ=Ev_a7yF0rf5d;g|E+KT^8Ni{-#^8? z|K~I2{ih$k`_qr#|6ptPpTD3Pf%^}1x$|oL&AO z;-%Nm{PxRlzy1FA-~aiCZ-4yF@4x%;{-p2z@H^cTdolXI-9P)|Z~p1KU;Ofy|Luq0 z{PXX>`{Dj?fA{@w|NJlaI{nA*|M26V{^lFK);C*)U;JNCO9KQH000080J{RwOpeiX zU6{`R08roq01p5F0Anq0Vl7!@G(|>fE@g0YyuE#IB*&2^{W6~>3ApA|zE+iS zdw?aaw7%1o52Bn{Ql(#q)orSiTu9)11n;(`E9pjQINc;b#B4;mN}fub$jKd)WE!KK+k$ zbGd(YU;g;<-Tvy~_U?DXiCz9ct{$F!f3yE_e=~Ub&h_ofPp%%yb-sH2 za`+$Re{LGa@ps<+E``C5ZZ2Q^G_>>3!$MgMn7xLk^^v#R+FWw)%{(e7vcYAYl z`%`)B;ogV&H}~bko2wW1!w*-#lrIna=hqMW=fk(Z4Bub9d_G)%SFUz{eYbyp zSugSW<@LjGbNzBZ{B-^N;roHU_2Ta8m-}Z|H~ZoGhpQL+;lC_`|PmZ?2!WAAE9kU)J{J zi*k3re)4&lMVY{>efzb~Y584qb^aiZ{_f>{`{(jLXwlX+OPAv~uAjfY-{0vU4!*^I z|BRQ?UDmIERMzLk9Zhasx;Kt5)%<+RUo30;pgAKu6k91r>5!y7zb`}xPioBRF4-HUIZkyy8X`3^T3zPrA;Y5(+s2a)n= zKmF|f``e$&U&>Eju(F8n4^LO^R`l5ZyK=GT!%fkwcf<9|;epiRb&=F^gZr{rw|5W2 zpT7QdH}k9a^zMt6At@5!@FX4WXP>Wktn&Bj_WI?+aQ|?3`?vk@wCsYq5x*QR-c$Yd z=EeQhkNfi1`UC@g%GY^OUROC!_HTzb@)^DTeNiP}t(ypZx2OhBrk(zxnGx&-}^fa?!8L zihRMJy8-&S{^?u!(`HCnq9TyrxPjg_y>>7E`m1h^ftK>%n5d&iz3SLr)vccwi7vKJ zC_g=Y#kF7Y>sK6qg-w9qUaDOq~{1X==Ydw+p#Gg+ILdtY81C?9Olg+Um4*)0P85 zc5VCTVb%TZuH<8L9R4f^iXH;1F225c{7SxT(pSH*{w9;}Y0>he-}(5f|NS$6g5T;l z==VP#eD}|4ht*k>ua-xUhq<|bdeVk%>=)fKaZy#{NuaMgWEIszMiWx31dZMB40LxWIf)BuXX*W zlM>)Aorm?mUG1H_%4eI?#JjzPx%lq`#EZVPqZL6J( zmFnF4pS?zhv-srv_r=?%dxsNK*`52oXin#>%s*i^&B_#2W=!HAsl=L_ezEVV;`%yR zBbTc_P)vh7rScWJ?$et8V7{D&kmESWos( z+p+E)6;bbA|GXFG-bsPc{C?Bj-cf~h6!SlEg72jGmNRd5c#FQe>&)={`G2{8rXl1w z(6L|6^tub&P`Ya6=Pv`}9 zuh^H($7e{toHNtDKt8^F7w`SH`}Gf6`?|bJ<_h(X)pxk^!4^ODEdA5bdAJY!OKa~z6tKZ->*x}emOaQvE}Eq0J;+rc!mhtGU!eVp|hpXofbo9%b`0hh|ZQocUlyk zEsNJz|N3lQQ;;UX(w!aKwy|T|wr$(CZQC|>c5K_+v2A~&e{TFQ_u;;DL|2~5tf;Q; zj;hK!=bN0^9dY67^!a4Q_B*rilU&M%=aHX3X?w_IHglApR%kPXlKbIxG+Znj$oM2L z_tXUMbyWSQOS>^DS2qaXyf9JlP{Ze5#fSmlceALUT#L1v?$>YeDet4#GD7w|*Zg{? z+{v$pIg%fPq+gAa32pA=ch$q6yL|EEUMFGVP1{IW@{(oMQ^~*96WtOoKPTTW!u2r= zUqZt8c6x0Z1z7Q@`hWo|qpj=&R8bLrpO?3*^ay<-AHTj6CKtUXd(WOY(?~x7<{;l3 zFBb%G9|t-0lRA9b;kYE^6M)oSoAlf0jck2B+a{4G^|z>+y+XEin#Y%@m5nd=>U_2v zC<=x>oZhx>|JU>NEmkPB;EJEbuD>61qL+I7h~y`o8=Zj+BkJ_}o0m6}ef(Sc-D}@= zub!`_ua=ZmZf)3K5B#PyaNQo?-TB`a^n<;y?5+G)H(}YI?g*eNewtst?_0N5SF<4? zA8xK_&$E-Q{($Uk`2vHX3y3 zOKXSCmj|By8R3I|_FIclhZN~Cb5MWqxPEQriRw!M=EifJ>B;E z-*oa4c$hwAe7=4B7$kgr^>)z`yQr8Rx=!O-sn@gj&#fL}RD>_3?X1D4Y2nO~ zWd1Iio2TWiFT?0+fBUtM+Q7A5UmKIpS+16@0VmHOF8f~0FhKqjSG<2|w{q^&?X%Ev z?>yOGLSaJNY7RaMkz3YOs?9~FJJ-+tFY3|9r)j^hc8^F?W4&IVS3tV@yA#%W=|?rr zsrD+p{+K-hlGzCka=T~7Hy6*_Y(4&S{X}p6hv}zyW`h^rw{x$*>RxH~AB$HpJLVMQ z%h3z-cY6N!)B0u-HG%!=YV+FX5BqQ1isWw0m2p2u_jeo7x4)egLQ0ZKlaD_s+gXn{ zjUU?Z8`0liJK+R%_}6v*bl-0qJ#;wM6y@bR{I_Y%)WkR#k1y>XFAw*fDzll`mQUw6;{gc*BsX%`d+S`9`J*fyVV^xU$`SVpAB6d zd+vPKjYn(yi#N-Iy~R2NeLmfMU!I5chx+`Xv1AU9XIH9~$~)2-?Z`8AIioU5p3>|) zsWw-+PSxv4`^3=s+*ag=`m{IQRJJ@3w5Z=;Jgj=@59E!fq#}k$A8wzk;`C8oN_eAy zVwv(d`$2lw0QN91ZwrPnaBquCxMctnK*($IJJLz!ABOCSE=y0Ub-wew&$ej#Q_)*j zwA_iViyl4KI)-TD0@yNLQn!!ElCsO!TMwiATZ_HlAKpq=CH?NN=dV4$-qYauZ=bKV zH+knadT_r+njL#;tlq)ZQkqjhkH!VU(J}k*Q3YB|HSHfp43)1@>3lKAT>SKhCRXta z>cAeRO!Y#o0O^zDyHpWta@=_x;tG!>R=J&N>>?*{=1Aq{IXcrdv0vLfQ`q$$2i69=p>igw0xpf!*&Ed-KI`RGF&-`plAL-1 zzJxsbbNZ{d!m7g4ZasaS$DR+WUOT1rHU2u{g-VO+w1BcqI{w6oajk=*e}Adsb?8?- zwX_BXzw7kv{kb=@T>pKLA{-|0YocL&XQNlmTe}hybbUB*ygn8nKb)06MLm7mlzNhk znWk>9{CiOgdrJNGlH~JaRG-Z!uCh#nJgrN{5M(y1PPb1uHk_TE~k1?~7S_;4s#;)yS>6sTeHz24SmBO$x_ z`-p7DRj{q3fflTpVwlKbXrH4joD2_xIF5bNzaYF5sIh*Zzq#|zy?j64KbNQ5yeE;b z8Vh`F$9cN_>Fw}tJDQbLm|S=0PaJ#!v&&X%8mChoNb&Z?>);R%f39-A@PK?cYb`8=WUFrnL@@QqxR6bH!$R^?vuG z@!z*M`CpC|@xF>Q!O^X@6?fHEmq~l?KYz6MlN!A6t=oEppVa_dKmD50&d!VQ@V)9! z>JA%n<2wZUdV(P#ALeHBOZx0VuOCJ2=S#k}h(B~qZzSTHRJ^39j5$|T=Ld5cx@fy3 z9ZyE7r(TKdtT)2?dZCZ&FY4|&Kt%*QO30MJ~72ZA>_F;ED~quE-A|6}FrcnMF&O63Aa_xBe@PKQhIMgn^+=WD9x zv5{%&JnFIsXWGtcz72!UE=xy6kkeg%@0GpZCch4UCqMxXjz2D515?|tFwuldVkFZ4 zKsf1J^=k%diuh^6kw9IF7|=@=Z|ZlDKr#Ehe94>-a{=R>|AwZwgI4SChu+TL_nCrU z=Tj#V!>RP-t+oE^viIY%xT(ua4<#^xvsg>Re)4bq&w`SATuBos?p`|~m?%bv zy%OMPmEdXBr+q=bVSC?Z)2d@Rm6EvYni~6gYfrUqRX_jJBQ{C8=nx}YOmIU#6_9oHz7g@kq($7_*(sKaU^62hJ3Sm#8Rh#jj!S7UhE_@|Lp?Y z2rbR*(>3L26&9cFcb~f_8Lq4`g9odvbPXFEF%iV`8EumeXzo*H?S&9T!}U?CAIk4S zLwWR{JbEllo5$lzb$$qWtA#GM_(@+%pCG`jY|^bct}4z)$J?b#H|13Z8ZdQ0G4tKy%d2uKM*S7i#@! zTWcmgUPJGzR_K@9-CkFT<1X~8b&^WwCN7_Qd6rpq{iMZ*A86O{EeFn<_&pszbF8Y= zGKR8eC-nXJZ_P~x7BT!y2;9FPo|6ca{E*=l{@|Ne6TmgdVWuT>d2q( z%~rg+34h@E(EC2$NxN8y_E+&^GtScAkhbqx?!EupqlHf8o4cjj3uwVbf7ivfQ#)|} z6Sq;$l_T|6CV$N46>c%Q-`Y|QIlen_)KzIGX7K1V3c3?F80N@)O8QN*J$%wJOZTlk z1y9T60vSTiMyG=#tv;Rc=)%qk<`)<}UMVr1Z@a|X*)h{Vco7_(Wx%Y9FaP4xr_d^b zPvPzvfN0@KxadMzEu;<|y+gEJ9t+90eb}^wUw1@gH9oVBKypJT4FN@-|L*bsFS7Y{ zX|GUB{J*}*9#BmDf@I_!GCct(^8Wj0@;ts@Ddqh0k7rgW{QXn%3=b$%AE3(4xfGA2&!GRXns^=`-Pe6klH+*zTM ziG0$`-zDq>ZwIFmG{9R^VEC7dLj1m&InI*<{BO>^deaZFLS;ya-$`$Ikw@WR;h~iA zkH4Uz%h_>|yW<&VNn!cwlrWgL$YWV(h7&;z@XuWDubkr^xkhE^nHKsi3#F%t=H&JM zgyM(kixolWr0qVXF6q9?GNzJTLF+9VZ7=qgpIX|_E#X0hko5d(VtLH-JhPCrjD7I( z)yEIelQ>L2wiLcK3QyFNARJk1Li5lr8NO31I5~nEOdfI6ayA);rya zeEEg9W-2M6pj3n=?=w4epDEr8E$PNGucMa12F5Ek6W1~#(v*~*$PQM!C}JkEj+(cc zv|?zaNlDycw{A&Jl#T8c`ye62^Dt~Kf58N?&B8c;64@$!te$8-TOTAgebAxuAhSxJ z9T7&;m5gg&e!N@*eV5(jP{XcdaHZIzm=>cxI^UF*df%*+*gP)6q~AOuLM^H+-TYWX zh+B`?yN#;h4yrdHfm0G=Hr+HgD>9j^RB%K3B}lEB=FzQ?^*Y;i?h^_~uFrpku#Hb4 z){iM=UqHDK^>Y1#74@q6 znSa+K*BalF0vnd3EA(_GC^ShG3_HX4?w*#WZAtQbJfv3FQnS*zsIw;-aEQZP8D-+@ zO;!^OI6w1-v!Bz&+3cz-`}^PJF~G3t7e2T=T|F|Fi-lvW*gx@2j7o!AU)Wz-DJI#u z3M`pWtNjcAIJ5G?!}(z@q`p2I_5b*Y_Xjw=-hDZ}UQX_Om&%0S6OHQA@A&qW}YtaXx0LIRK>mpKq^|V@yU&9ebA1~@w-82U6|*~#csiV zf2@~VzTf?k*L`0f?v(i@5Pz-nsCwn^S4tBCr&XwD1gHFQ_8(D)uQY$G$8b=_bA3*a zLjIo#Io&ovMnX2p(xAWNm8gG*#Uu`0#B+mZjr;5IJ4nC9A$+*|BZgjCQ<0>}$Y69K z-U<7`K<2@KnGTP$&Ss3Xd7N~%r>rDvo>IZd>hPo3rSst?6hkHIE%N@3qdIqxPHQ33S4SR06kp z$fjD@M?2GDE7Rd@Dv^JQ`-~coHrD;gM8eKQ0>66L$A6o9e-L%BZ?&**&ZcAbrepck z!hY1kdpcOq+E~yh6AEh+3LNTT1M_FD&v$=Q3mxiULu+9}olPliOeu4yg$@4)RxND5 zoe8y-33WELur0OFqYies7Iyfj3jVr)IgX$sqR47vWzD1({0oKKFg5=?fyp1sPl)x2Ij1^UT5+V2pBv6N#yo0~$LXsz=i!K+ zc0BJo!g=;q<5@H^z_Ht9`+&%f%h4aShzy^{B}x|fZ@x=2{!1Pti7O{eAG+_1v-qQ4 zco)tqjr7q#=Mh(%{X##7xUi1E`lr`91||OmhC2oEqty%D)xvFTE;(j6-SfH9xWmr$ zL}mAamq73^F5Mng?xyd8!WwG{KD;;@dE6C<*zQC}O$(Epi?NOl(-Q5K!p=?o?bClp zPkR=Z3;t@?r`S%qr1^)MTg`lzaRmE!{qyvXZFe3H9Go0Ve9e$cG{F=#sr7%{wvMEX zi@42^VDJar;Z^C}!VEmpDlgByz+^V)nK&Nx9Z4&rqG9t)|6TA=E)gAY=okjMB4BsEfE_d2w=BHX9Ay{-I8I$Ji;`}@qVP5`8-rd>WEoW%FjI1 z$J1a(>aZmT%3L1v8mo=e!-t1Hp&F`rww;q=_ul_4rawV)9?bl5NAKS9pFJX@z4DX8 z>XaH{eu4-urC|*0zQ{c({=|*_#64B@q;MZeLq#!32h>{;Ur9C;cNk>2rIflsEnj8637Oa!RV3kFn$R3_vU!%95K72Av#bXsxI8fK#I zqKaj<{070YkQ-@)|w6Z8#{9!XXC{jWKD#Jl+Q+;H7d(KY0sa5z)26!U@w_Rf6ddZcrRz?Yk_}1xdX{T{KXH;L$+M(z9r3l*J9=YBM6PE*QyU{f zPe#t!+Z*dyaVrm?kTS%Yb$FigB;-RKL%ecL7v#*kA6tpK5-MrcYc-t44b3#66C z4Ckgmsqd#FvC(c3Ss(XmifO`1@4(1q_9<&J^22B30#rdPbX5gz5=ggbVv>kBk64X^ z%=)&+O$JhRqiBo6HGdf?VmUi_h0q&eb2+Z0^%!&-O@de11RF%RxXI}`?JP&5Rvjnt zDEb5HcwrgK|dHr9TAEH1uVSDxbZhz$V;^4NFnycOO+!tfV+p+bEaY z`J@E-j$6=3SO6iU;TSp9uX-s1Rm_XJ1mkvlIGTh0Sa-=90(54p+Vvepm3uWkCVY=n zBXn8*X!6tic#H>IJF^t7aDs9RY=%$)6G{|aN}dYmfWO_O(2jusH68MU1vT$jB>_5AyqB!v66{&pJ-`)FFeRo zvy-*5oQ9@UZL#emrJmbZ)J&v@NLJqE#9jkwE)cOxEC0AP#lIU}i7j~R;mL65K8a#g zQ9D=Q{x(R$p=Ui@@E>(7d=V)mzZ5-WAsb+QNuA|U?&BH+&RQOGeX_aiJ=W3tlTU6U zf&`FY^)L*nFjE2^h7Xz;T0gze&I7RLQBH{1pf%}P9j{zv#Aqsms^Yck26-$GUxzau zh{WNb1x^&k{7qwc-{eSG8U2&?vq}2J+g<#;|?mi5^8JhZ}|?^W5#9<;fNoG zkT9uYWdk}$r=rcsb*Awe<%y5g_4x)x@-UN5tpxWXlN*aI)k~4g4`c9X^E9rhuZJ=< z%lCLSFG~N}%?r4DIPvkijga1Fo-4iNUP;6yq&MtGIRA$II=sWKG~yNE$E!v{n&~;1 zkb(7^zq&-!&lqyQguwX8eQ(C;XyhE;yRM$aM2D6KeX>yb9zU}IqNPNvZoJn;Ud}!m zYS8%+4an)#+`iY@QQ3Kv{*idja@^=&fm4lrw5>RVbV$HeVKV})yQUDXG2Z`ZCnZ~o z$g)P{c(j)(q0ke`u9Z!wPPRAM;Hh=C5qgwkdXZZoQnMgl;D-OnuTvz=sTUJ5lT7K5 z#5PZ9RAni4WLXr0$F6sV6yzLYk39udR7Fij8%&JqKmF=HIL(TwtLC7N^Ba$SSCaKB zm&cBU(zsHT!zM|Wp+P0Gc0lV;`wy7}fT!V~zR*!!5`6yyDS0bsh`ZcIV zu9daRD#%!gUNP#$1|*QOWl>W=S{}2x=Ab<(DcCQ>b4z@~K_p?hW``P)=fcgEQ@tqp z#GJH*qlD*Wi$CqyaG*sxW=7dq4%yA0i5ExqTVftPb(AuK>FnlMs>MKqLn z;>Fj_M@SmVc}{eIQ!b>pWD-+qi%Y?40_31eve)$y=0i5|M6}U6Iky5FFY!4z4LWS$qPOR#jaV@~e<2sUm?SMSU|%51lxUITwb-7xfoPR}zvWJSrdy zn1zm~Pz7ZC6V{qEj)v|hMJahoR!r~Q8z$4 z>NHJA1KSo33X3etg!FUV-ztR{QR^uZ&b}R2LA323j<6vF=ghkzlDyN^5(mWfykS4A z@N)7zgv5;e$(-q%~@M2b!6uN{w#k@6!&eH-&NdnB3_{(9w zu+lc75^FJ8T;Qz^LQG=;2+YQUG8CinLb(kOSrSfzXz+RmrHB^x6dkggoO!ctG3#h-^PlfgKrwpTSdO z4Meu(WYsv3b1(R~aUrFi$tH)HRD+q-aLPt_5i_6Z)Jaz{j`5S%AS%O0!YPc1Gz`xI zWF&d{NZXSr(l;Kv$9H8V)6bw!>4#l(+~i6ESiA;B>TYqhx=p}P%<_HD5O_LrY}9~k z9~`)fC!-&-UXj0m1Z}qIQ*6H!a)pqCWVCztlOVP3d2Q?XW@RTHk=CD076EWti(w_2 zSFSS{1rNh#P<50Spl))lp60n?|G7C@@(}#eb&~unozYQ5Eo`MURy6JCp&*%+G_$#N z%Zund|J`;Q zOAvH>M;crk1+yR^dpk-s2Mjq<=VHp`KcOdvYl;KixVutJVUPoizhpnT+{?y>N<3&S(IX-si@Wyseb)}G+FL(+f5+)-!>}rldNV3{^ z;gHC}Zs%7RG4^G`QeUW#M9mbF5N@bB`40*87x9G+4YPNu!edmND{%Z34v`@d4l7$- zJ2~Xf@kt@sHIf@N+2q4S3M4BMFf@+X5+PrezsoO|oXX*F^L6PNqhXf3^Lyyon!>h5 zE1$yTh+yuC(yS0EBn7_-NlfIZf}rX!6ats(VUfDFSrw zXAcc2%eRvy5U8l>7GA=RiiUccbZ~s}PHf;gc4Bc!1EVMg_sKC^vPu(cqc&#j@mE1a z;h<;d;$U4TYw@Rnk}z|Lz;c)u-o_1wm&WuoDu7#iUy82NTMv zYv65DWP!7MQ*nN{uc^Vy?@SMKPNl~#DF+i&SE&^QZFC0ZN&`ezYAzM~HXA@G!T0~h zXfMD>#TbdORN4zbwy(z;iJ7!FDuQq#N0|+ffROeEX=w-n(tfX74=2xKfHAxCJrxnN zjsw85FmlNIZA>%tWmICOuhVG&+$(4EX{0 z`nwpO6@&Z4iDXwty~8+>jR^O)0cD_XYrT&68wHDYiSJU6=F2-jLRkGm*hAz-PgVpt z*+x-WSJuHwp*!8$&=!#Ow+{mB^6zw$HP_GUvTti7oi6N=+X7UaeWcSN5~nf;06LjXgj-BeVRV zL7Ft-xJDauUL^$uvoa&J&;KALJ~c0ca0XgNNrH%kI0};?2kJnhL{73_UKYq)TlFyJ z{>zcb+c*py3fqn!YtI+~OR)M`L)Hiy)7yyj!W=ve45C;i|AltbDJNNnoAo?!A;fem zU54r9BZh%L$D}g#0>c=b=`pIavb<_aYfdU`M{K(7BM7v($X;$GFkQC|_vc)EPUqe# zeV$8`ort610HKbWv_Ca?QKtm7_@JlPg7zb9P;?U>u9{V>`*hIp1?5|!(;NdzYLT!N zMNA6h)qYK&u?C&M4pwM+q;-fXeSuaeb(zu_}@N7XX7o9%L@7r4v`6BuMXq!g3H-BO3mtZQu%({h$$P`~$-oSR0Qd zr&b0RlR4H@rx}tV^0f%v{2juY$E3TpM`?xKlG_} zs4)Ykb2%s&?qVxdX>scoM|7{qxB$hN>1y}d#3eu#peb`KBVOz8Z=?jUKAOR6s_Nxk zO|*Q%Mhs(y)J{MRk(aJ@08M9gYUT|HJi!FNJN%))SaT#X6wzB*l7z^gtOv2zG>d6; zR2Htw!^=a$o5>@QFvmRh;NX-1>EG2TE@hjCA7dr%TK)#OG0fgXTwWpNRA$OM+Eb`% z@I=*(5q-?K^?siEMf>~rMe&A)92)QLWl=*#L8yud4{cH!{4)8xxhIMw(7QN^pr-tv zcq{J!TOYY`+xOin0WfVoOGNZcC`U2?AS=kBpBqKqlae{t zl(R4{Vi|FA6H9?4Xgel$8O*-Vc*WN~fD+s%YZ!MfN@)Fuf=yk_#WDH#oS?cMYO&4U z{Y^lVFO`-IF63w#0w2PvREvd<QY^X5VIO5{?L>HrjiyhJNaJCu#GMSo1K9GR)Q2Auv-q$Hgi`- z>afRB#*^Z86+-WL+>!vKELKvNd7>Q2EiT@ue=4R}q!F2qvB40A*RrH>r6$`S5oUm$ z9ig9CZ@_bV;CwFmj&U4IKB{X3PvP7*rnnBdUMQmLisTB+GUMlP**^-xR~?kO6bsLM z3o3>!7ZqH39)`e@r()gAEYbJMb@b_eotMzW7i+`Dl&D&j-iRP!$@hD%MnA^!`^;&@lZ5N|7i@X9 zz0{ZZ9(S0Wqr^=K7KNqGk>2V2$YWp>7(ViDyUg4CLo%O#B;iQ4$6!(sxLr*igGFyumE zNb^RN>;Ks=0K2TC3B8!13VH$~%?eO+$OcLK?#y5eIMu^bXMpkIS z==B?*KY@%L@y{e6RGZtFJjBJ!Qg@k$!-4xzs-_Qhwy+X=LMM|HpRbF;0Ho7x%uxkn zpZ72`E-H4MrZqS3|MCcvU~f_&w%lM(E?TkdWz09bEzqcs)_`x4!E*G0Vtdg2}^~v z9IP2R-Xl7ul<>@aC)ZGfzW(_iMxHSvqR)H%)vbB2j6bIBK`fmQq>CPnT9ml%2wh~B z4N|kG1xyOvDdgFBhQQQpcg$7{FI)9fJn^Jb*TG*ar;-}+KV;474dDw2j4Z5eo(nhK zUN=@~>xb5~Yyd-fLS&UrmHcHOM{hQ{114kpNW|3O=Pcb0Xwe_Cxby~BSv*AnhV`nO zEMv&H<_yKpN%A`tB-y>-+f#goaTclwh0o~-;CY5heMlLi*{1MTn1edoe}R# z7>3O>)Wb1^bK=CCgOAV+Jlc?I2>H8mRMG5!KHAthkvK6c4#!-@Ph@B@Swqp<2$gFN zCsX6x5>%Bl3(i4PRhx0haFbufe1!EllDx?t{l2{Vkf~D!Qc(t2SGt>zC-vU+>+fVph#Xu}3?Uw+m{3-9>|8Sq{6m7Dk-YeyGzi6E#MFocQJ zWFOrYVI__p64WK+g}(R8*;hus;GA$L1T%pl)?u)tK63*VEc6(R*XCGx|BTms1jnn3 z)~+kRek_w2nfV{xL>c1w@K>bVKW0lGl$iL1`uU2tcpXcSq0kwOxZ+fNxy|fC!BI*T z)vhSNZhI|CFEpgUpx$hmzK)5gCwZvLdYg zVsz?H3Hao$&;m$JU0O>uvyfoVZIXiX^XUThOv5pU9ejvvgrVpNUo1+}AUctdtzhWp zwoWn8mnj|tpiGV{!y_`#9%jtHJY>orHA%4?#cMHQx$xz~!iyNdf31xIo@k+=OF`?| zoDSSq`hA)Daxf`&C=oMGC?dOr_G47iijm~Xg_-AiA`V5s-R5@ROIYSEcKO!b<6;b~ ze!u*xPgMz>7mts~ag;(#`i`KUdFsd4`Ag8X0C7~j66`zCB4N{ScFvzOIS&t0v%-`Pbqae(_xWN5f^Gr8SB1J|1$2v#G9FK6wKTo^h?%c zle_klzaW%c*A7bV5k$lAi6=YjcWfQB-BiGs%;A`5Y;>O_VoaW*_;K3?^uWtDs~F;D zV^0Zc_vEVpi#_jv5so4_U+F+aS@8sxPSaOUNg4;-TMZLJ1mnUEj-l*|mF7xfscnf> zW!myd*`Y=)B}@8gFZH!G1`EkbgUYh|vab=p6Sm|PJ*_mxb-=Z4JB40ANWTLL|6HE~ zll&_siktL-TtDsEh2D*M9LDbyf#B2SYi5RenBYti`$5*Zl;D0Ui8lQDnrrwgA4Ekr zaJxK020p5To-zF+yR!gT&G=ZFQhpXJcMfPuHV$XV z80$`~Z^5IGQ3j?#zYKH-hwFI&iK1RCHc08<2<8XzbiJg^1j7?=s{|a}GT}sb6*l80 z%JH1aDz`lxvGL5NrJ2YY@)cE1(%VZc)o8!4?F3y}3S#FqELZYW-HivV1O`(}&wO@; z+%m;*@t`MIWyCKha{n!B5vk=o`6Ph`pWjX=N+1zJ^6R;jAAaG>0yG(XyT`IBQ0>vz zyO_pH0y#y3?tCyyW!xzW(uOwL$%02*;{#gZq6Xw?Veazs?v?9I7VkVrtln2<^|A_x z4yYqJ8x z(naK@W~g}##g_V{aqIGf;8ds=JVGghQ!HP0(u&Q}5f(O@O}V35G#fC{c*|FC$fg-s5diMbzW!Bh09oniirVNnjz5e%Qm zqXE^a&RxiS&YDi(wx*WDvjHt1vZ^o*hPB zB_qNVyMzG7<%6;>2m{W+{&}>Ip9k-&_ZJVBiCs4{uT8&dyT$QXZsb5%c}>>naI=a_I%l+WAEZ~x#hQkcf(V}*+f^|n=Hnph?Tk>ab|_pzNUZsUgk&b zX+W)^Q74qn+o)%j#cCvbd1lbS&|8|mJ!ooyh(^7{l*&-v>$4S@zXHPoBs!eQErJjT z7lf|3ai9HMhP}%K)nyCHWmJ8{;3!NPuuEn^qg%5SeGxZ*B;tciIFGJwja;sEcK(j5 zK%5l=Z*1JD*1VHbv#&l&2}I=>Y$1KJSaFiwM=@3u@~ezUP)-y`6+>c@lvVG8V3h}@ zx!3K;vMZv<^_mQq2081I{y~74Txu%9f@Oo!@1Oaz^%mAK2tZYcgtx;a%W(cQri;67 z*!hfd(aFaXee`{2^q$%Ots9l{#yS_Xta$fZyRBp21z zjknq+&o*^C2fX_pE`tCA2}H>V9Gwg`@w?yqewWaF_GVs=gIYe3)GO+AWG5TlH!L(E ziB7+cJRGiiZWB;Dn-@-uUbT8pH3Jf#g3^70DSvP_*R|BR+)9sHhLxlK~e zxQ^R-J2g5c6-6FZ78 zKV6J|fip;!$Seq7vME?A)8WF9{tDR5wxeW6p?>QyB=W>IRk4};_crbj;KW%p%%(sO zDVU$#kWGf^F)!f>*kcZ-xR06~J~@^8OFELdsVjUOGviZv!G26J<`)IK1^O)R`l^cj zuwyx`z!}QMNR~KCMyq0=SZd+~7NrURh_fpu392N`n%@{q8FU_2VbHB)~ntixVUt$QSuubVc- z9NE!&Kp}P{8u>ZwW4siq!t=AmAhceR4pp&+FhzI+wxea|fOKHQ3bz4}OAqlZP-0h076VL@B zlbc1@1{{) z+3h;YdyBk-WKL5UJvQ3;`}Sr)g(896!K5A`beNzbOWxu>C3`?PPKeoOw??zP4h+-z zk|{~C-Fii7{DGlw5(r$58Ca}ROa}Y~7tW5RLY0_Uk~DL%+l8u@c%`1BZ!GUT)jkGc zO+rn+0T;GH$2?y1#WL?1nZev>qe;p{lug%-lBm&dxCtLZ zA+brg`iZeEP`kJNRBQq&gS$?+)ILgIQ@Rm@)5stG?MvuzCI<}BvSJ)xu z!w=(iSUQ|K!{}%A=)Xq$QE$K*3J7hDGXzjee~!x`Z7Z~36$9e#-=kL?IO+`<6nM06 z>Fjc-tt=9?7qQfG$9nLgVgS$LDU1`u+u>Yf043!=m*z+O0u$pAMPS##$l|IW8#bMR z_xWR%_L+G|N$S|;*HMdn_R{)Gd+C(U1nqbzXn5zbs)7BMH`=ErwE(D=Uj23ea} zn6*6w5~gYWv4ApEWC|uDgMY}HZ?xogOE&4Rkm!=E>rst`zUm9K^dF;Ph51nT2f@$r z3NM-|iaUuk-bpU0);X|U_IsV|+iXbHo=2BjgckcxFL&|E1u70=?&_!*gh&hVDk65# zENr=k+4oC?TioU(bn;s|O$%hiHoM}CMsNjcF-ukLoZQUHP)mgAPD)cu{qLkB!%ix7^+ zf+WwxaTkO<5fM^ElyzFR*LG!1$&Kn?31Sh(quG8tRl49rq#U=U?g#bU;I|P4sShQm z4a@CYKPszTMtNP004SkoYo=T*k&J;czM-~zD1`cL>JzX=rYM`LN~Si>z?aE@XQ>GizQac z-Xe_d6QYQP*rqC;TrK`+7f$!^xtc-_{sm+Mwa2=em- z@B`AYN%^2sBv9CAHL>5(n#xr7_lRvhS1w>EI677 zFd~n5k1XXh1Vulw9RjCcBq8`ts}q=;L!HzteM zHV(_50Vx*BRYMP=KP>Q|SPOZpqr&9ml~-pnniyG^ZFX1nNtpWymx&?A4}==tN@Hq) z4(rJ$QW~43h+5ouLn`BU1qNSJmV<89fL#YCE|E3iLq=Gu_Pm+Tt}1~(sMM%=E)G5G zn!iKoKrI(6l!~Rv3m?k*$zW(5v|m%-M>%zon+6IrMA0AB6Pe8!5OiJ0tpX~6 zI90`BG6gHO2GoTvHKof2nvH`{CAcey6)48i<3A;X+9E7eU)YjkTKW#0)J9+rR0aF# z!OKLU=5PI*ggPk}F%o$e==XUnwI40x9uqQQU|m6EsFt=N(N@G@3%eiL}QK0=@{50u)q$wP)bba z{aQz1>XG7a7(kMc%E&hL7or9HE#l+s>R5M#@M4yB`E|lOt5Xt;Ff5|TBc&x;bQwb4 zc%DyDnL8Gxg~22CYkJ?Bs7n>v@|F$Vpq1{*Qmj+t1QKh@{W^b69G#nr$#ea|sbyLWKWY z8c6+y#k|%+uW#fXtAnxWq-vR@LOo?4iKI&az24ek$Ot-@^gyOLyW4tGejOQ@h*4^v zDutg8t~i&c-r)lK!#^>#E(=tAQ%uZ^c2PP?i`w~+=>=@kIi%$*GqAQ<3;55_Bexvx zY6Q!$h9@=t&(;&_N>X!z5J~Qn&($QldpYRR{Bnl~ob`bsSCXVnJyxYmc}QQAi5cgR z5QWWPMtz&$FS93O5)|cB+A+spXTchRy>jIeQ0CpOyFq6z&GZoW5#(3V<#>YbNyyEo zPL!RYVb)Wm@x{Ph;XU>(P7)j9wk2Ff*O1CFpB@WCm-By;gaqMK<0p0*@u)Bw3c8TZ zbruHFuYEa7c-b$jN$|asB!v0(ReY{%PF2#ZLqBSYyAy4TevcJ-3(8QSACiXW1RCzO zXb85$E}g876rpctGeuh^Sq%Smpu^rOb#kKCPJqPTb_tbxd17k?FQs|&(l^MTH|;ZE z&TOv~4n7rdXzig4&dEVW06J*#bVDS0TGlv*=CDk6NuWzof)qwE4I&^QWNJ=Q!_L4` zTN>E&M{JncaNp!T;qbTt`Qgjtr(nE~O?W)yD39H=|kGK(a?ze z9{@f;!M|kIgtXOLDA+T?x&(v`qmtGG5GH*0eRn%>*ngB)tHfsR z*$r8}b)(Rk#TNm;Mgd3wzuyKmlDWe7mjebcI8DU4en=r7a0uXy^kUmgdM)w{HX9quPRHwPK6e9S(^%m*v zmL08(oHNcwA+Yy-kkS;Us4W2-F_l!WLCuyI?nOV#V*^(OciT9VsY^hFIiUTzRq6J3 z$2=t}rdsdI9-Ta~7jDa)A!LD@-a0S`q9-XDep^XbPMRoFt=o(>S`*JiFg`YXv0G5Q z@s`Pk2{V#Yv+6N12n-T{NIW1uHzeQMEl$GHMqy^==AM9cIp8R~7RvMiPLW$AG|2}C zdNsir8HmF~jMG7}5CX3Xg7#eRZZHdz8g{z9bkSkX7<-dA4_(u*2`>NXzBrzuXi8~} za1v4&{cu5=sMybGejb4=;r%iaf`PNIuvkSCorW1jGVj}ja~Ki$la?b!ax9YO^%`wJ zjJL|C!6QHky#5_}jGSSMLHkKWY1h|&T!0$J zaBPu))2;75j$D%thZ)YcQlND8N2V47J}8rMR)~%;G#WJB9G)0;Fsv}C&FM!*GDk+V zm1+aQ5QL_|JD3Q4=9{7-z;xiA^qXf#&#l{<3TYVZVmx}IsFKUK7Oe-+;Gf`O`<81t zV8^ysW>YadLBje@id&Ow=(H*84JV~P?L-}uLc+9z5{zqL#i-(%Iq3oQiLi=9OZ%^i zQm5tMN548b+{DMQFdP*7=Yn=QSDS-*0wcTOU2#}jJsc2K)Z@a)p%NJ|9A~dV88}w` z4zd#w4irmB^sW*=13Y4Yhq=NhYm!IQh+yWd2rt*}H#8(o>mxyP^%JN|SlWY1ne!2o z>03aP=QNM9Jb=XMG=p&@cPuO;!qQq3ju@)}VB>CaN;f@i{IP1rcKk7JBi8hf)rg^mlY#Z9tnmqYUPEdYb5H|-&5SyW}J@4O76ly zy-+(tAf=tcRnd3(H6kgJTz-7N=BP9;l9wXp9dLJ1sH}fcsT1f@bUQYUBi3qE` zcDK?@j~6~n1K3IC@)$K>3UpF^WTQ6$p=A9G5)o9^By_Rp?#5~4Tpqd)1$n~?95#5u z$k=VdB9jOfEMDjJ)Sk&EURV&n7JMHxNO7Xm9Lan z!VnWm7*DX_U@wDorSHrY>2im&#`#(|MPG@~mMtz3lKa|0NVan5gOgHXFojkiAimo) z(lH{Af%9^@USfqgF~f{%yU2Z)My-&B7DBSQufPI3F--stYF9imi&mV>nGv-nuvsOl z)1NZaVUAkMu4ZSomMwBc&Iy8C0-X_n_A_Qoym{U$+D{oZ#2YiJ_Y+C9A48M(5PP6L zvB5pZWmk*BWwKU8u4Ap@eeRLhv~v>%V!{FSxHV}aT~+%r)|qo#0A+4(YeZE%N2#=<0t!?-jAUalA?Li#S(T6Mi9R0& zlRY)@FIZl}K-5?BRDxKHYap~m@#r=-?0Q<}5h-8Px&l3BU`-~!cAyYdi@hXgvcYA+ zp`1mF>jDs5$fu2c&y%XT{TSlW;e`I2eZ}QgvQPzo1&z&ChamI~kwob#KYG=Bs5O-k zK|e}KonzY?0Oh%t%x52>nAwGzv<68-c2fOh;2RV7Cz-Vo7Tz;#b7NCPYAO{P5I)W) zBwei&o!Tsg2)LbwNVB-i!Duu>u5me}G_Z&b7V42>aBOqmUnv9_+e&gV4*FPr&g*3m$RYay zWI{hq5N0YOaO%M#@F;kEgK{7ezL9%0i&{}pLx&dM51HnL>w_RJ>Uaan(H%OH=N&aR zlQlFWa%#M4YO7T|3{gsWRp=_+-`GrsKDMQx8(nCHS{W~b>>ApiX_bpnU$d;KIYn53 z3{J4|ePd{39Sx5vC_y2JEX`;V5m7d2L49a<+UFk`Y6Lt34DKL~kwpwaHciq{lvgb* zo{<3+N`WwzO`)F}z7pE$JE4BzIE>0RvcHlG4F*RxWirdzbKD4L-A?497=)0V{2i5` zr;b&^t9}BP`%(w6`8t%{3bbnH`n6+`_+`CU&Ss@ZbaGl7gr`NagF2$Eh@#xjde=<2 z-{cZNZzhJM5p0cty9aCKhzG7hLOh|LK#7S~d>mB^%2N-gTv2LvDu)CpW zZXT&E!H^@92#Ha;L5u|%6if{cL;`6>O%b!mHBnYjZOJNkXFRRFBO%pF11AM%R?Wt= zCfLLvl9vk}jlO7PI@p!hQDjo|Uf+9loIFLZUxdJvWXl@7c#Y0B1ei*)Wi)}MUTx^E z!o~#dEluu>n(jPt%Z;ePJ5|_HkkpUCPYZcph=t2?rIW`5v6=ax1{7*~s@Z8W2PftT z1Z2-4)~T^@1NIiV5B7-NfYjDbB-+3lQl2B|YWbSc<2&+GlR?#opaqJPmE%v&i6o01 zVTbgMR^r9>A**i`G|F+BIVsParvVri;1PlP^{u{{(fEk}s}68y#FkUwbyAd}yy+n2 zDSbM$qAaN)%hHteApVAcV?SIO1LyRbLtR@})P90errmqnnWRe|Jj=VTZ@N#?;1}lD z*LJKZYLwiR(I%LRJyHa12|A5v2OXnCC383&^`pCp!ZBf`=r==1Oa-nDxZzd+z-w?7 zFqPS;WGhF&VZ$0o)Y=`nyryhJ`3;RE;tBxKItEoGf8@+g_2V zwEYP2oS{19Nba|P$XtjpYu+Pid`DPPtx^Ia#cqmqm2gi;)PnKUZUw?BG8E~+RBc9! zwT}6~W>voc;G)*W5U{Z=tKK1JQvDJOtdsmoHig71>Z-k*?ES*8M7(q5VAm2VRRkyX zpX1ys;BSbC3*^PfC2};p>_;_$wt+Z{7l*`a)(khYQ#F)kAr(_`A2kHn_Bak`H*VAc zaK#2HU0m%M)7Wl(vZ%apUQD~pp+yMvm%+BeO@^BqPQ+EJx;BEX)aSAYmo}Bs!3akg z1V*fPr>F#3*pQOY>#uesRC;uvNo^{#16ZGo<|f>-Ey8P7&N);O7^D;vSKntO0^k`e z;BB%{Y#d|&3|A=wASHcty5p1$!pwNn4neejccwHEKdaYvl}e6{v~M46%`HYor1xP* z>9qTI&ZKO7)+(+H_Be@o8gvCC0}BwlLzqBnO)MEk;CmJ@usM!l2nt1WIU9Ys#H2-9h?TEDmc=FoXc?#7;J9k>)Zbw^TJS zYRlW5s_eeu$E`t{u!P3q*RlO*N_HHI*R7}=R|tOP{<%zq3}FV`FL>Qfnj-6~ZR#Uf z)V4E+DuEf%eD zt5B6`<@l&ki1%KL-cX9Lob-+&F?EHsGz4QxzB1NxBba46u5Bp03z&O-EsB3Z~i% z#-!DCR=*0xq=u(J6zo2u(+J9q@sfb4o8AMp42Bd*{OGwV+L!kiS5ayFPb93JkXd`H8x9 zU_9;bX0o^a(g+zcl1>_|7*2Fipp?Nt(<9A)NGBfCx`|Zq?6j$>;v^P#S`krYdhoG{ zd5D}w0WcfYs1(uiIW~YLq+$gyZn%bd;vV;!^@kfS5w*UIGf-kybO`zz>?8ncB%isb zYV>MOY9vwgSbu9Krp8q$PSc7oK2buzQgzrm*uY#8Ou{P-0hF1z8&+EK zAR>oW-a9b2_hSz+GmZyk*67u_le~Zt>1L|H@|G2&07pkqZN`B^N8P0SQ-}q^Ei{@Y zQCw`&1_9bqLAo0B1DGL9uI>Mg0~%F({k&cx<`*>PYf(?t4x1}WWoJh+P!!l!<%I

RJ+JPd0vl3~Fc%j_I=<-x%7F{*r#tI#*Hb2Oe45Nl6 ztZ7M&)bUO#I}OC<#5}~>ZbX}3cu5mlAeKxnt-3lpwWz9i_VeXbIp?R`P;8?TKDw1oN^D=88Vb<${n=+Oip|*BShiVi zZXA`2!2v$E+BS6P@%tLhS~e0h)Pgwev9gns(qONTGi9PD1u1AtSdX->v1WmZZWk0z zE5n+!N39lZM=MZe{|u(@;8A;cMv*~YC?J`%G9qDFQ%a&uM%uOftk!3G61#U(Y?kLJNBf$kU5rR2Pl#yY^rcW8{= z-O*uOPe~jeKna62r#qCYoX{4`3HMAhV}rmx(T1M2UlZ!Z(RRcLvU&CmQC{Ep{{ne1 zO!hzxw(_Lzf)8luL5Igxb}ln1|Q zlptPh9}%8sj-24Y14v8?5RI%d_k7m^3*|7C4w(H(2ZG}j#V;EYrVZjm{cdEDJ2Z@l z;!c{)27A8|!zF-;nC*3C*cI0NMEAy-IO0a#8CpMxz9mLHkb5N~mg&F{B9+gE9$7eM z4k)yo71E~EVC)GKL7~H0TGwrvDVW*{wqK-Uj+Xf+opmWfm7MK+;C_+D#W2J>M^W3LGn+mhDqFY#)6?ERziw zoaXV5OsW2>CNnWOSb#u!gjwX<0tQnv@g}Vt;KoZKVCaW`0||!D8NnJcEr6dg(B})M z7Bu=uTWV79QBc_PZkNjpQ-^%A?n*wH-aNvl+WF@aHH2q#sI$5shKvi+=4H6sW> zRhtRO8jtZFZie9$1~$j06t-uqln?b$Ofj(*XqOxDc0olO##p4&CbTp-QB|2#{}|af zW)^jzIZ-nb?yP}*b=-y+kfJ7#>6MD#Fo20XXi`*=y3$q3j81M;oRQG+3f36F4@U2j zi5+-<1e%{wN7+AWsbVQ;;mUhh4Mlv!2tlu-(>U)v_H zUXCqq^e>n>|CJTV)u3H!z{iR{d*)@(KrTd0!nl2(baYu2(sBsK9vZRcWl;~;- zjucAnThB9vT%u-{wV7r$B`to3NM(63X)-?_+jM;(S)?ie#uLaZYsxhwIpg}qO(xFZ zCK%a-=cE;%!C*;cBCSu34wIT5Hrm2*Y)`8$w3osxroT}W#9q&?#db}B@(A7Ee`;#99Y^gF6q@ZRMzGQOf*Vcxpj;0)Xc0lN z>NbjH6Fn#)y|$kaI-(lp>?juEr48w*odO;HGIxWkhQgVRK?%GfJSM|L;IWfyqOn_H zG0M1R!u)wek#`=btg4JhGm@Lhzik>j$(o~R&InnNDcN9Cb=tyZX%uEsv@8-Wq={6ci0BNaF493!`L#V5 z@X%Gj64FG`m*`-asoSIZhCaJ(;y$p-f*0|=aB3TQ;>h0ZsQGmuo9bXA#7Iw#v94)L zAh}+nqm}2-kER+FKrNiS29G+GU-*RNHiGuR*c)~~;fH-hwm^A=PoIGhU(6=kX3 zNn`sUmpMghED;V`IMy8d_LLqH#K$c-r(eArhq`-Xu2BX=N0w1;vJMI9c*k$D^ zR0b3ydO~?xt}H#?Fb57^h_plw-+?1w)7r%zb?|L|I4gVN7aalVn?WMqid#lueX&G#t56 zjC$S9eOEkDi{CK8;c=5%RmeB=P4Gc#UW!+=LJ3U$M)V?Z^kP^y_+!^6)yyMDj9MZBc~!}s(qwU=x1-&+y~ZLO z^oc?03@iem2tj;PBa|Dc_7Dw7=5pY7G8EmusJJ;5$BPU2C;6f zrnm~d6%F$_&D7Tbnme93P_~O~GY#M;$ zwkO%66L&8PN@@ZXD2P2H!<_?15xjzQ#Da}-W5Y8XC+)oHFzK_X4ybP(YI&)mOUaN0@lA(~>OUh}TQ)y4qHZHL9vM>u07qdx?}1d$ zcx?E>M*h$-rwW>3D?uiT+zoEd$h5Uh1OVq1qFk28kf<;hagRx{b8^00#KaUk&keWR z)L15>0*xl%gf>S@#uoE}hV6arOYpUZNkNJD#5wGH86o;5-ueEnO4QymEDebsz;{aZXfYR3$zj&sIEaFZ9_yq2 z=85xQcxst9DogtzkBI@L8G$XWaudJ;y)xOnRo5Q}#CL`WPYYZ+d>b9aX)|A#u z=)gj|BnD(@5(`{KsBaI3<|X)B@f1+x11k<>qDBq!Qq*>wG%8oaHC#2}sy=c35NZsB zAP&fbIcVDLC_ zTgCt&8Tjyb!qdL%vou8tVix;gJ{pXYL#rcDX3j}?XL`ztWnz$LQ!#;$$ct!!C(_#n zKPM6D2Nc+=Ul(O_^qH^IGB;&Ot@kenyg}SJF)JUO6fLm<<76N5u~0H5ff7a=fz+V} z4vVCpIiyALiwXl=+b})}jTD>2m)G)PC%_)x$BJhcI6{<;)=O$-jJN^!nMvy6ATB0_ z%YCSKnmC{rk4uktQpal~fCzdvYKaak?f`moE5<|Yo=ugc7N4QA$SBfb?&<)-3lu}4 z#p=!o8zkoBYm^X-K%`fVYCq>%Lr#foP+w_KfH60EKoC;7Hh??pM*;(-yowBIs0HLA z_0C3MiY&MyBZ}8RD!pm~1C;NWv;zDI4Yw3b1LM5NBiZ_?NrlUDX7I6be83%awV%HqGK2j=59k6ctg$xjJ;?(A2iWh3;E`Vc}XAg-jr7 zfUyQ^ZP_`|MM(<)3mT-3l@`R}ZOnR1)u75DYRv!+Pzwhi5#m-L=x{0*9I1dS&T0%z zN;4#0XrFK`QUET_zHtY&)mAi1Z$8d|9LQ_@yBfWE@-H)tEEwp^b#K*CU9(?6R7g;#t6I(#?Dn-T`DK7B&W zoW0TJ!ybbXS@H%;@JI-arrRj+Y7Q|6XF;qzStXNl>j9B3wxh)bz@3faaoGmSp$vm4 zWu~9?T0;gm0c_HJ9q71vt!c+AQgW&&Gg4PsA8VZXfYuKI2P1+=?=&`8`UKw}`2dr0 zVx)o<%{&2;38uHc9!ev{9RhYV0F_>_ZdMkCTB04K6J)RxDd`Kz#Ez_n0C7H}de*8Q zm=ErY{LAUEexzJ%43lzUsaYX3n|*JN$kk(L@Iy6q!<;k&JF$k+Pk|%0O|=R10n)jK zVZmkX3b0dV`IEtpFfseA0@Z*k7shc*LMSxfSe|gm!Wp&!m6A4;cv=Q4n!rHUQB60Sce*B0XGVZAh6Onuf);}5^4%s7QL%|wc(r8y=-U@N;fH_TnUDP#Ad8`6m?dg zfo8#3v7U`%y;{dsj_h!YY{2$I!pKNf&7?mTuU)#7#H60-MgoHnjIkxGnYAJk^&NeG zin;8?3Tn*G9r_ORqYP;#uASI`Mn&ri|A`fXV<@pw&my^pW1{a65p{`=+S>~?q(a7I z)FjT1b2dtYk2zNfF>qSMZ5}f^=OLnwDtN2cJhdJ#uNtsqQ9a-;F_^EY9MDIgP}D0? z@4!fLd0y$Q3#jSp{_(P~9ieICNw|5c88TXuIn!}4NAZVtKswE$@(hnAhP4K?j&(4f zoIssiKXw)=%N~_Ye&>+a!{~n6C2_N;I781L?+K%Rh=^%n-OE=GiDC@v-gDD#)SV6z zpp|@&VR#YSAsW=T5G~0c^oL7QUPG%kgwKpves`B5X zbhBum<|U^eI6yi-n8T z|08AMlK`}h&AS%YYY;-7S3J{xIy{cF@wH*l4v_Y#D!M)%C^-&sX*W=y1I3~>>N*Lf z98&`gl(#GTrZ3H|ITC#J-dp^BKfjqg$F|ZVJ3;ImW2JIxtA2L?FiAbAAsK;P9U!N6 z;06`f&d8|}{>R6rz+-z9^&gkJX$Gy3Mte7uO&P3-l#TVE+u5PXtY9wibUV1Fw4lMbPN`Yv@VlWmIMb@Hx!!d5TA9$&cC8FVf#V9eMfbi0!I!!R`};R}($7v2r5RC5X|B*OHjhj_95hIQi11Vo z21Brz&Y)qiJX$Q{C51qpgf#3wZKM8%3(CzTLf9^}HgGet70l8X6f1~+=W|_XBXOBl zLIG@s8H%HBLW^pNsg~8%pTz=}IsmIRAlXRGec@P1|1<;g!ASO8K0$h#pu^GZ1~seXXo`WcnKH zq!}l$l$RL7L4q}EeBwwr`kikR;itS)4;DpsqA8918B>#bB~(S>!cv2b#tBUIx}n{e$qxs;@T^&Ni2uWVi^griOgW_v7rwv zYPKKPj8yCE7LB>1yQdt%Mo5(@tVc!0K5)Fze#e!bJgyKP;y(45v)i% z;OnHq&04EW&#OMHYL0a31;^rw(pq7iVUEgCXpE&Lc1uutOvL)D`E6|AP);N_D^dcW z|5Vr6ASTK)ja5p|EWuc~S4I-5$fTPaFk#+|wKicLqS z>*_iiA;uUfyB&|K_&_aV1dxkGH{ps_I&%gfm;*zTnk5Uxmr&zJa_W2zs|-A>B^@Uc`fF&XXCkoqFBCVHq%BY2$v`*ZBfJo%0mK!jQ_sJ*VI7_A()i-Q^-!orRru8TCq?79(xJ)t9 z_jgQhbz*>LSU5SXPcKM@Pc3QSdR1zFQ6@C9clY@B9i_ittQ@uM#Pb_Ib$P##9~;VM zczRKUjRMu?Q4_S4v$-{ z@$v+jS9&g|+;vkPX}Fk-qAm2u;%;S#UhGD z>F+C!P3~`Svq*Ld+9Z>e_r4q9gAK=y9V;D|vT_HG|2#;b>Xq$z>hE}gNz+;U9ZSz+ zRgAdC-{(q~yJdAk#%b^oE%6SNNz!=(TlVbldHpfD{__cXmh*Un*Q#FN0%b0aU} zLqvYK>gVCl!W&FF)P<}%Lb4kDKp{dide@%^Vv1OBC&@&RR|1R}yCt|t`GL;GO@D)- zSy!*r9I*6~p2rEinu$M6D0_Sk#=4g{hO@s!*@e|&+P zj8IE@DIu>P{s0JP+Y37@^!-y_5AeOF=7_H{zBjfVE!wp3j|vrN)X@e&LH5 zQ>PY2??f@fe7u(BnK&LOn|-7Y2oqD&W|R_9cx zySXnoWCoOkP3s3y+ZzCQI4?p--9q zaQFs9GCyy`#SGQMOW^3>=0Ht76SCSa(PI4h8*&pGS~SYd-{_77E}cG2LJLD8WydC)sa;sK~FQ{FlpTE&&`*Ogi1Q-FZkMjP!*n5TmQw6L{ z;?Qzn&(2LEn9VLp^F|Ov0uq5#4VJaM@SfY1(@Lyw__kM=*}*|A$U{K_ysO99PcPF! zr_SdG;vS##DNHCvhDF$H)O(Wd_~1pVXMdG$KB<(`(cdQph;hEr67--stsrpVgK<7cywRUl zRVcWQZ}?>El?NN8FF1MhKp%IELexRSEQ>~AXP>TDp|_i*QKIw$jU8W1n2-lgk!Pcz z0r5qBUfL}2Ips;cv6(~#bJD(P<^Ax5*~!|E8;p3un5DZndaQa=CeoK(J%`ZGb^dai zX7&PN@zbcvSLjplO7*y)c@w)c2{wJ+YmKRxQ_)(xVcZ`W zkZYAxa*9s$X{Sg3a^E_FvGb~?DySBMlbNwdSN0GR3?%t%GuRZL_n9r_elq+3?)yu> z0@(L`6Uu!Mz*QQU$5Dghpi`am>-A|epWaMk7^m!Jij%%qTWo|>k z;270ff8TD78)0l#Ptj@5+kUc1(vWjXOIrJSml;1kA0y5)KG`Ipc)4*~$Kd!{ZgURV zNd@?^D&!YyQ;0Xjwg#bjnd`azS6KWSM8ND^zV;GCL*?-b{nC`Xo!9ldjYKXJ0k)-~ z$j4W~scq(z`J7Viq)xs2vHu52uH1U}&jv4{K?{3^t2wj1@Yz#gnj*e{nq5lw@`mSl zUOW{vBxLRn}~J{(E-6X&v=rB(!da=hx6v(0qVL`=G%aMjV3`*gnDl8wfbpelCS-C;X0nJoWKMZqL#K@$B;HS2E-9E<3Yu(6e#r+#F&0*THyey8ewBv zQ@RgTxt^I*m5%YIk1dW(of4QA&GC>a3A^!5hBQf{U z_4#H*X$p5PoNRhEwo$+Q{g+V)$m|u+R~SoWIeHjJZpWe?cTHgenp_6K7t8t`_=V%m ziJDNil=&QdDYCHthKtT;IZGAbE2TOT#5%==BFC3231IK%Cnx=^IXY1=hm2=Dw2PS+~+BF`kN^bxt+K{6bf@mga3 zM6NAmAQ!`kgkb`_EtB+NIRVTi)Az*dxX}(NB@M+~&bE|K+$ZD9+jWjz#7AwnjB+~1 zhp3OrG!VK)z?Wq!kbdB32RxP+NZBP#kW3T}n^ej@$g)uFD?1f)d7@6!b8aiUIIqmc zy-(1U_y;7t34)Ouwn$U!;&>>92ew7!BFEX>36MSD%5#>~`Wyy}UnUvct0@Eh%;_?} zye-o7Plno~Midh>FEMqYCK@LEHqRj`atTtK!xokJ4yC>)BGhto$kN~M{bZFK-%iNm z>n?}L!2U#&6nuOvaX)s0WlnsLcB5-Rnv3|HhTO&*A~uN<-|L+BYLv4bIzFan+69MR zkF!C)MsH!%-@jNRPL)Fx8vwIb6W!hxi7H0#jE8VMdp<-0GVe<&%1wUSvR{2JpG4gI zj{j5=hjw7bhunLbnUk1Ve#H#g($F%LCQ<7K$Km zvTM^+`M?hA;wYEm>zi$9F_tY<_~x0vleRZ@dS||qMp1b?|^r0mcWKA zcM#SqME`>Vr5d3O@#jQk=~e}^br#Sac>f%vknxkao~*#%T+8W3TYhsDdk$%`4t3y+}Fv)XQaIU>0)w`#Ywro z7)L%!VY3%V=C$V(;8=;V98BD~r4XHu*r}O`K^LEp4VHTFV-QT{sx1q$5jUA*Ea0=n zv^>qbI1=~*Dt>O7H48?F_io%lDT(6nPGV7sTacfnjJpd9KzLpuL^x+4)Iw{N#Cn;L z?Xp+c-ud~-&=_sUfx@~dnb@tD&#;mMx^6Mw`*W}_W$unt{~nj38u7&k(I|0KbQWTt zA2p)CpQFH!`GO)^2tc$w2(K72#M%|St|2bdK)g*1vmoF+I@rbQ!wX#GU_J7^+_RC8 zZnb1~$me{23UNr~Dg^kqi_8V_s4`PA^{f`7CWe^-hUMxK4X-gt$zGt^HY44{k?&^f zh?DJ12C>(V(#=i#g~(zkGKFCe_x|7A@A{0digA(^rPq z+#{ZRBqA}_ynZ8MKYaR%TMLo%^y$FzQoYD@L~iVf+Z`p4v&14tS;H0Ac6gDDLl_dtZnSRvbEAWKV44aPZ-U3qU}Rno^XM^*amE|cg* z%-X0_*4Mt9^QjgjWHay#bUQ68oDy|FaI;Di%Eyrr#|(xFC4`GRjmr7baD;jfNNBsTf z{1kEU<7!9-UW@c|-dv8WKN-1&uloLv5=^?h+0#~92@#Gz(LzS7w=npX4Q`C_(#_e- z;;pF$6d=y`q!_fLQoBx=XMIS%)2XQhu1t{cRZ2RcOE>|xj@ zysxOLtemrTbnSN0xM>a>AwfQe3@#vZ23R~`Re~W9*D5P{QDopO{?|Z)=oCjIQKeh9 zfpC@B+d&;UivK!_gyxIVi@thRxTI*vL9CRyu-OR4s?Yg7lYMEY$~~2#;&8x~1A_uU zTZO_KIgc*^)_w^VG0G1V(HxW(U=r~VK0Oqp zbP+yZGr1VrHo(<-q^|e#Oi{@QZcxff8fLM9G%Q4RArhqbVb#L zO8V!Cib&6q4$btF=;G2yQ7A6&K2bENqFu$X&a?}`RX=TURNhrEbFFE>k=J-)`97D8 zW95Psp#`K-g~PXKkuS4T6TU@uD`^NmWh$V5PH*rF5(PPzmw!vAAEIeVXJ$T@J2@aF zB|awaR8RXz^H#L#6yZ!4F9J-7VN6O-7(;tj_;@JT7h@cJr%uu5kzV97TkywEbG-7c zb6t_%)NVCd@ta1*?d($qD$P?iYq~l=e|+mp;Cyyx+_vA&qymfb zfg84_8~x!N4Qv@a4*C-s(_URQMT}#oK)9c>0GpX1XGXw}KAx4^~29Qv$6rHrvDK2ViO<(wA^5MxLAau!&p9tr%D2y@! zxrt(yff4A|l3m_#z%ZITQT@`RfLSU^fB&+`-2ubdyXIBSCb7yeG{p~O6HRe)2@OrR zBQgE%D!n+Hf7Qt(K}B`FwHBU!{ycM8_8%Z~6uw1;cJ&iD3n=z+bRw2Cc8ETc1;_cAzKRI+MJsudwaD4-DIeY?(^1Nr`e0sn>2kfxXBX?vli`RSGu+Dg6ku#({R1 z$DU?hr1M>{*n&#J(()1uTXs^~$EXal*XMxT7HDFM0R_L=VNpzB(`WwkQy%AROewvo zL=Ly&Yn<}lD+)P-0^%+Q4KJK6tZ8X#u%9-swa$sa3Ox$TyLyk7N&$m8u=*|ih44zFOIbKIeW`%VZc7Xz%@!^{`y2gQK0Xb|nWn z&Ht)*w1UQ&y#Pugu7ZnPO(8oVn0$&q$dN_mpg~29)(kxl)0J(PXK_k*D`Ujfze-?r z^?7c#x;4uGKBF>}P^U9_a7V22EzK~_oz%Mb78gWq29ljsWM`~$FlEYYoFPAVm|wtA zIZ=iQRfH^(2<0Pp$E4G5{1|gP)6+G*l4;RA!Ye7{^AXhtKRGilAw|6v&!4A#dy5JX zijZ$^K#30>VFH9>7d+|WEqjwzN)nOI?0*IGwx#k4und&fN3A(T!HLVOC(lz+yuTVbhPRJ9b|)6JgwuPTiBe-%^iN8=+bsy1 z+BAu%EV*ziXcFSR<4S7iy7xqKFZrc!snmu=NJOJX0`^z|8X7>Tk+BAC3VD<2vKfk@ z5*|cGX>0ey&^X%|xQ|afYEmUp`m-M)hPJ~J3qr1)WDp5v*K781&gmsw+^!{Gv-6@#KngQW4bo!4{s?v|f&<`v9nL1l zfTc8WtZwNbIU|1tu5=AN+6(07PVn^2N^%i0L|B!$J`Wkv`vq>d{C$X4IuaCle2HIK z@hH;8AgS8t_GQnARWcP)+kFy0o!xLYUYaOg z#I-et>2N3%C*2$%SN-D2Gc-fEG85Tpg6Us&TE`pvcn<>QT6JJq+_^WBh7?+O4ZxMD zct#G#hK@0Ck%gsn?tW3TLUw`xQnWWm3C$CyB-l|4J{&BAi5BI$sYzLohVwOE=nch~ zTH4o8z829(UJ!9-0z(vj8PSA>Jb=tnbj{&2PIjUafd- z`9qX(NW}|fO%>#nNzM`BoIGWn$}M)rUGX7dR^<*!!lg``f)B#azsV!8axX>7fQxg`;b2jojhVejvvSD^qyC^-+hI z6ge=pxF((Q;Xux--3zWD$1PB{tQ}^8s?lvY2kG&|?Q5v`7#F-qhznZtcP~hJKv{{@Yis4)3wnWa; z*kQ|wQoY+txwu)}B&j*E%m06jp$zYI%GA6T{QV?F;n>g*P|sP=?wy)sRGC~|Gi z3`2W-pvaS4?6dlgc!?}e>!6cl>wa;*p}6G2Z%|x#A-n{e#l5JmaKl2~x;iwEkSK-k zE!kqKMX2fqd9x?f(R_VG$-!t;!^_fG8iGl9e&W$;^d4mgpMtL-A6lAas96x!t0F9Z zlmJ^aZ&jH*qql_8mhb1 zD6!|pAH4_!))BoD6M@bwB@Iuhm;42rQ7-?p#fZH^6=b_NlgNy#T``8wSA-3~D}q`& zx=!+)g`^QH^NdcP=PqBT{ZK0STN221n^4BRbjvg;I*qAl%W3)(1S}_7mw6Tk;#N2z z)uKM_5-EKbUdoj1=cUZy`WwU(nKj6u>=trN#(;lHyHJp8SujCfd;wflG^%pU1jN?{ zJ%`G;WAHRG?b13&vKlEf35O{Ex2vRk(M(dBUuu^)dGeA{WZ3W=y#qeLhahLB#jFVd zzIE+i@unbF@$9kaKZaGdi)t8?)&7Q8Rgu7S+X7d2dqv{QE&?u&2md{$H%~5U%{Pc_ z1M7pbYV$AqX#`&I z5>4~-Wwt!F;b0J)&|UIT|FTLX;}ecaNL0Pi5mo1Ntp(vm%5HX!!Z{|N!iwpqnF%P) zmw>se5}6+iVvHh(@E;g%8#VctNf?$X-hMc3If4Lhz?~xMZWRy|nOdw_HXIPqK{Lyf zs*+7)`h$2DQy6ZkvpYB$%A=n#oo9(Y&U5M{&`B4(0wv05){gp|+8jV1D6FXEoGDwF z1F-J03?bC-E1-#r#Z%R1A4r6x>(wnFKa-+3Qrn-%2NE^nUss3TAe!*Fd#PFCD4}^C(Q#8?$rl^7>#Qi@{8Dp_7 zAt$Ai1%>GLvje7}cD!R231X($q@-?mDYB+?5PQiwrFF)lmzA)b*|~Mh9Y!LB%t3)# zGVsJJyrugKBnW^nik1h|-6T&QAt9>tyK7Lv_*m2my(4Nk)zK*(s02#>$8UTFu%uSE z$1R-o#-@U(3bZZ=2>TGp;0_Fj5J4%1PK^RF+D9eSn$?dzh6G&OkRd37DoJdxW4-_%x z22(~Reh*EjH&jLG8(StDu6vBv3OE z4Uqzo5Z$4libkXCS&MapI)i64)|uBXy%Bb?*Ou|dom;d$n9LxTixMdAqC%#3E+0z_3&18JLOGZVkgp{yqEG}6(6*)yk2Sz&whyJW!J z67+WO$-Sm?{3Ru57`W$jYe?$^kS4Em=~Gc`6jj|j6rb~?C_BHH<}(J>xK}5&lOsr) zv({-kIYLRGoSvkdCq)n;dfS=jaC*06paq~6x*#S zr~Yk26=5=C^F=dtZ}n0GGtwItQz{F@e$fcK<;(CmAxkF{T)~1y-Ror3V*$avTDm^a z(ZJ~SXMBcgT`iqIt}ZZ+}+IChCZp`_FNM$6++L zRtGG$^d{4)Qo1rd?z@=m8%l54h7vh*Kp234&Rc0_e8VQp&G?cRk3-XSD^cJG%O=pN z%9EOn5M(=bobnaWL7gZ-8DZ!=`COjAJBeJ>~|aNu}5Di#`N5|4!cy6bC{me*hvS;U>Q zxlrVIk6VIiN@*mXe+Rxz7Z2;~!4ElpARMjZN@+qMr?7aYD{NN1>dg#2g=eF&N;@*; z^03tFCpIqR&@Lw_lB?Ek!k{aMkKWuS3up-yV8&*j9>%2gH!x?#o)Wee*Wb2CgpseX zwO|tR#U|2=?i7C{n8=2CIYcHy2p3Z3;$9NbUZBMg$C!WN+?{W!Q7+nAKqb3Sv;ktu zGF_L_@ldp33q@Q(EhV-0Ybb>yg0K`6U7*+V3o`~$ak$fJ_I7YMg&!9T1lD%cTJZdF z#A~coOPSd3NU=F7KUWj<8w4gMRS|QBVktC;p$K;^wyw^F5NL2=5iZ!gZi9JrDk;QR z;yO#xi0V|Mw`7e%+Nc^`peD3}Y=>o`SRanjd_}Dkux3l9RPe+P(Md!A`iREPJ;b4YoXq* z5Y6r67HEOWjKy;sm}(Yf-{BICiVe7KsdGC3flPte4k=4IIS~eb1G5NgHvZW;7hJDk zi2~+XNA`EW29$k8arPcXx^jR9S$6cytW9==WEF&1VI*8aNbkYJJkFok4As-x6}m(s zB*<)I3_wnT?~;P>(KyvHkTn*Y03V86W~x+XnW22X_ZHYvD-PYvSK-ulCO+<8ajuE3 z?2E~>&Fi|7@UB5JvuUnEmsD$Fqz8Hc?PuNgEv%;vK6{|tcF1la~2)nP?z_T zM1;#eajwjNU1U{bFc)GZ7pwPpLrb+f*)VAC9xDz!`zEbUZkY>LC*w;7n|>vm{~pFH z)JnmW_S?ypb&V=0@Z2i*QA>=v^wR85S9kQPU|3sdO8I^Wo?c98&{#H9ooSGD(N`E( z9Lp9|_Mcx+SssVzrN?w-UI6;SYG6Wf=^~w`=HdK$F{!O!QUd?npeSg(Xqv!n5!w|s zrd#ARD6=xdC5068lLg%1M+)by6rHdxv)L8`F+#^{w zF43Ak_VKZD7n4=}7L{jhzMzB8c7Hf3tA&NspvmxTIBQ`$Jas)2iDsxSaikC)TzG{K z4|0lmu|}BT8`t>-)E*_$`cq-zv#OYt5&#fhL=FKU8d7vJ?EzVf<{>m`lDZQQ2_D3j z=*@+6(Y5x@eyZY0K#Hx$C}6Mt9D35YF!`~Oi+gLo@_Q+*f3e63dcpquX+=L^pOVOhiqMTA0d4n z+%2)%#i@B~7P2xsDhh_z4T2QUCg?VwK~Z_0hPIsNbW<ODfE6fP8SwN7M?XPvc&78DaIKOzggU}kr=xlXMWsr<=NOzZMArCmDiA#!s}vu9 zV?$EOGM!&UK{mYlHD8oq3}jn*jLUGa-U@`=c@YYnV!0sB+grHku4O(b)m}`UhMHuA z@s!@LPa?ZrsW6CH#?4BkMdx$3n0HR```8lw+loiys0DRWheV4e%M76W4PU6z-?pnKM9bG5SR(Itkbr#pvzkJc&At zaT(5mm6Y*2W>?>)$4b$@RN3eS*#8wtlOOEl(rpn zc9#iwx%_$Hqmc`F3^rT{=Ku(;&MtxLYd5KKH>(ex+dWl^@}|*8OW3xAQ?)yvZDNi= z**7W%?+GGhlo9klZYW7)r7Jp$Xa-nO(bDuK!%n?DYjD*N)k(oMKl{w9)I3V3nma1k zEDmV&M0=Dzz4^&vu`j?YPm-%qy(8hzLE8oHUJ)OqR4w{$h+AyK{j!cgreM=J$Zm$^@yy>Gr>Uj zd{wTI+)kGpmkJ-_)wm-&>W@(m0;Q=kZta6`pf*jsRxTKjcN7aNbbmBIb>cPa5Ji}p z_2_+^i+P6HtizR4`<7 z#;Se*c?hxzhY?_0OJ*5caBO0>X`%+RB_b8Mw;dnBPMmiRb9g@2J+f2A_yIm=QcgIC z7)_ar`Sx*!ZUtoAlO&2$BaPFGG`nw`XyeFEStmL=8#dACv#I<6b@EY0V=pbJlvUfp zokL@q!oAs@9;LL!^%JbZ7Jmcf5?0qH{PwI+D-DhSJxiD7i{TC~%d>t>eK6$~jQ9v; zM9iIRti2=eV{jOxmy=~CBLd&|RECN;VGs&B42?{FC+8`NH)V*Bx{GWRbt-cR2mVl0 z6Tfiuo`0{5Oq~06bwp#Ew9!lUH|*KpfdH1xjcP=VT1_wMqzp%5HzYmzs-h8IenoL> zB}KnW1~R9ZvdIjNiv&p@s}^Bl`yPL&wwIr-u0RyYVVF#Aj+aQh(FBe?BAXr`+=|32 znWPvo;znQS?<=f_=X1j}UK(`pxZM|?B2*r^h@ZgyV`xnH9iRVj3W3r!bHNaoZp9nN zNNPNW@u8!rsc>v0hcY|t%(9JM-hm@|l{XIV-l|IY*NZYA7mK8?4J<4Yxkx zN#Ly$i;lI_OLOSpO5(uDPHRAAIB@k-8qH0`(aP?TE;;u2c%u?CRo=j9s7M$+|HWOE z>X%{?Yo8Js(8xgEbTV;Qd!7|x)tSL4do(GzC8BrwH|#W}fC%^6`q z-6MCCRt??fw%LGW!Z8?=vMlc5E!n{YEG|ZtHK>${uA5L)V34R$TE+Aj2}GqNn@ z%Gg8iH*~`e$zyqi(c`w_J=~*X6on-F8%#%UJ57qa_tf|~7$2dI8%-a2j7(yf$a6la zd__ST+GfI3ceBL=mPUd)7oa66u*^5Wei$>e>`=Ts5# zb<>cfL_?|fREA8X-^Vj~K@s=YL| z0wW4TJjB6+wGuI}<@^H7K&==DQ;JQ%J%e0HbSa=Z_V_G{oNuo`Ej5LB7BzoBe3tRtgjSaUVW#1INx zDI2!=Tqe<>BFMOBT~w8`b@>5}G1%R6<-G%*OjY}ZK*ROZ$lmEKswR2BHiE4q#V8Kk zo`m<@&7hy>v%!Jem7F+CvAvbp61ErWrDBju%_?H&QGhfaUKg71$*3{!NvBZZQvLsU z=SCYeFu;14&f*0>WviTfI$NjByl614)hy3sJ4hmaGJLzb}9@%*}+ zj*nR#fhxWgj{_~t)R9{ep7A|@qw^7Rt#4@Bq+%^`QD6V3fS68{qYa_P01cevZwmlS|i+)AEE2yzM2h3wcwp%PspQYZ+)z=gX}k6T2p zDmP>Nh6P3ucg0Mz;2>)hd$_WKb2MU1j-DPLt^#~ zA|AWLs%-rEq?19>M)M8^+xwPKsvKp}W23PTpUfDWj4-*{+!i5YQ6RksDAOGtt25kJ zWK3=@?w?7BHRTP;M)&Pk8bKW<_tb6WPlgvyLeyTVvz-C+r&= zh{KSKBV>?x#s>)=N@u|I#9*Z$01%+u)((7jKvYow2Tp$E&h_d+^*N{d_57j7jGGmH zUfWK+J0qiir6r4y&&@Ka&~A66SWnI+?Ez=bOKL*^JB&ieD|m>;C0^v>x>2W{agq|4 zVJ=?jR&j7-(M=y26HRWbS5D^}t#9A3tLoKplpb6VE2uurWgU(+ifvmpcUhddQI*#5dfMvp8KugPkzO(8YT`t86(&!r5DL z_72XH_$c)o;YOjC=rbk=RT{=RSZ%C(Ge}Gd8|1rwTUq*?r^u|e+EDIpRt|OSMwY?2 zkf0!WkLS5Pet?3@D^2mM#(MHH)lM!0mqURf%+$(*VzN>^zU4hw_z*SYa@nAX^XxZE zIKU1Va+rE7&$~zW1gM4cn87e5Hmew!m@iHxETgl;1j;QL0ALi=iyl9Oprpx0pI=!3 zpnk)jl%+d%GysW$B}{$dUSI6l`P5+$^XDM95y`}pCzLsk$fwD_l^1QGTVPM9Z@8Y@ z27n?PS{KYyAJX@c-RUEVr{dnQF4mTIc7@^+Xxw?}!#eAZ%`1tm-3@IY4T#S%x&eG- zyUYzbGVO{_EWb%L(5S=gdORSGsf{uXk$otT=h3D3?i?a(NdpC9EIxx1B*_fj4IU$~ z>wGU2iC!1^oet>c22nk5xOjpTCqz8f1?7muDN+oWvMbLgntWb5{{9?Bkq;FIKS4e- zyNhJQ6tGA}a16n;4F~|L8CI<@VKonm>3wNi?RHt|q+bACvK=TjHme+lqcKM&Pfq2#Qw(#xBDQxfx_*|oi)!fIWtTw z4to|@QUFGAB9-g?Ui(t9W{|1Mmuwhy40=0- z!Kr&g3v(rp(x5a`hU`MuIRI|RUD3QVcvbuDg?ftouDr)jlnnWupiE8m)1g+`KrH-N zOSSk;f4UaoSMCFgAL8i)d@gzC%O5Q$fCdQH8zZ+xeX^fG6OK+^$ll>yDZN5E77p&F z;Z}ppz*WvKLD3KN2}`z7XXnJqq95v-Y^FpRa`?Ba@M@6z?h~iWd6W9-2KZ3o=2xU2 zi;6$G#ui3{*&ELFR(bS#>m{*jD1y{77v4DI$*Tm|vu979&{6w-qv@&6;g8gEfQLWp zG}c3f6OK3UPL?%nm)mYA8Xm)09V3$oSkgS9$m9-Z1UQ$;U|AYX=Oa=GxM&Ch&j+`> z+cz^nX0_wrn|G1woxh|I1TLS^y(?46zg@r&DR{W1D$M)n9%9jU84)B#_b{rl*PT!7 z<7n##6i0L8pBtl_25a~MoH+wmI)ruMvOyP#j08cVPO}~*F^k~nPd9?l#wa=dWDCe= zIU8XzNtVp{ud!s3h#N5#Ka8f;?y)E<*`BWin}Wv&fmvfhZ+95AV^Eo`EaY^ai?-$Pt`FBM_xs6Qq$s874TrA3DLQE4zJl)nm^CR9Fl@Vm#ZH@zoDSf_eYtjr zrTznEOORQC>cB!2~TmT(l$7W@UX!M8Uu;Pm$q+gn!z~O_xUQQON5kt zSqJ+J(rQKOx^eP!Y@7pbYX8VefCvQ+oynvspJhx=_NtKG+Uj?ZU7;Gv;&`47F{j|4 zaAP#yJ0v0gi5+;Pw{~njnIz1bDuWn8?TzBu$YkgV3Gr~5l}w{gGc`5zaTCmzO(R%} zg;iFnS+4txzBN1K`$QYa}8dE#fQ6{R@yHLbmf7HY_xRtE+#sU%AhDXWZHn8!^D13KgB z!;uiF7XeJrcX~`X{X(sts*DCQ;A&>>d~_i!2?F}0*uEI6^&H&`r>&#Exa6WJc^G)p zn7z&t#qO2UxMXv=1Xi92OB$B|eB|;5qq%XL*SbUgPb|Twu_b;EO0HIbFgP3A7ArFB zcjy(R2p&=9voA?D-;q8CB6rR`BTz@svGm#v&GxmY*?8=yv}&oTBafA)BF zL>pGoITKS1$5{{pQL1D4eJY@I?b1C5#Rl1-@YPIKBAidl7zI%so@3)ZmKc{`uP6Ym@HJavuS6J$y2CqB}%@A zvu-hg@YfnT70;lkW+E}#H5^*e!RXALe&I2|4yDT!lRnL2aqhlWfLBmFvjYQIGPwdV zLejz(=}h?NQpAkgV4y31S=;GHs2lhx)uY5MMHFSr*_Trkpnb^yOip^c&|6Iu!xfE*yo>&cFeVdoUNLbUsTtd4tg{ z!bQ77A2KQ8ENO0G5^Qy6p{VO}Cg&+RV1ogCzaTP~72L7jY+ap_v2rM2_?DG%Sk6DC zm4RTtX(nAudRt~W_|nHP!Lm*{wOEd&qqRME&b{5q;yN51N#!)5VUOWJrWF|_M*sv( z92e=?D=M4-8>(%X+)F-Zt@WlNLIXXxN*^F|i~NWB6sHfLP@r{MR!g=yAJrQdqhe_0 zbN&8jGnf=d8x`aQWp+jCeh>Om0=ifv^FP_>Lq9481G6(h6#z$+SMJt{#i$%E2otI{ z>*N<`tleh$YQJw?BlRub@YNDDQXe3(*qHH;GtRQ4Zp@XsjRH%o$F_mcw^&LAc-!;KldVe*7MjKlhe+0mPq1PMjN^B0J4UBzIx$_ z*o|JH*58wkN-gK>BW9x`eXTv~K092#T=^$bQhF{0qE5KMM~`O|Fk=|%364)m*NR++ z-k)>TLBkU?l9t@fk{w|X3QrJ?6(gI)1q2LOEbUg~eU7hc?cdBKYnhz)ZE%m?Ztuym zhSPg$hgetViLBM5hNdSd`6Z0Xk}pvyh;=FV1dC$V5Kx;`B(o;hP!+sR3etJwvNL+n z9Q$l~9Z)WcsN^G4QO&}8Pt!<3roEV>$~bNnZm%0pw{u3NV+--^Z#%6H1SjLV_u3#C zee# zbq;dLd`J5g({%&CK?x%l`=%37FQp|!a<>8@Q7iq9{mkM>?3(s6J&#E27AGe#4?(R< zgz=G`imng>vgZe?V0dbG<28T;KIE${HxKO@cdOA{zX6&H`(7A_Jx7kNEJ4uNy%NLGC+iD4J z`LSdfx@z;!k?DH-jKug$vEp%9PXBYp(0aNIH{%;pFOKA;KBeHn2u}&&P!yf_^1Du< zT-OQ6_?;G-8xIy;kPac6(L|0bQME!N-H&s>r(SB36YMO4ea~1gZgbQx@#1CnT)bHO zJt}r?-YVTw&jXQ^!?T5zUbm5jd|cYFuEFDtqmYjdD^CapE#-`xXtuOMC4vRdg%HV> zpa5Np!MR-52n1sR@l##ni3gm%e!*H-T1;j*gwqo>Um5`KMBUOq1F*jE1Y$9I;Wswy zCs1^pHEj9?l$jz_j5?CbTyiO48_CV&28Ez<1g~)0OlJd=oIY~qezis; zORp8npWR@lRz^BVg(F++gEL=S$9I7hAzfa9b{adK9q*=9inJ#_K|aGtK%WN^BpRiS zC8}G)#>aLy3-wwLhr2XRVB{pFaG+a5yHM_|FaZAms9UhjNuHJL&l$9GCpLr#q<|=^s)LMJ((wRiLW)V0U6h8=RPO6M@yB)n z6KZ%DNDw%Tzt)<*q$;lXU#W_39|%@Eq-AX8f*vSN+Lr6b14Xg{9bWbcdMwO73O7)I zSJ6RXor`B&RXuZ~${P_TfUriNZ<(-UuJ4z5zBE6es;s_!ra~%m3o2wY_G)&}HYuCd z3dt?Hm=t4sRF^L?In_NPv9!kq5raV4nbiqkB#7SCTAQ|CTL!ajY9FDZ4nGunH@!VVN33$>Q>Um8ZUJz zOe~?0mNhOhw(M+6iGg2<>{`gOT<+W+6C_!wjxPeJ+#zHw&k8RpkkfuNzk-pzCUAbT zaq{CdMBtV(i6e@s9t4_APq=4|$mi6>JjhBor-*60;Sr#u=Y8m{y^3;YT>F9xG{C7i zikl|?aq+ZRNl~M-y5knwbKsgtpvSqfxtKBSb5A%aLp`G$+RsiS)U1Q@MGsgdwG9Od z!+!QXcbOhvSE?|(4Q7jauG4d=XScz=cFuFQFP=_^yzyze-BPR=dbr#&yUu{}&>A7fY$?^7KC?YhB?v5PSsXXP&P~%1C%#Z33gM9} zUN{3J82I^-VtqOFYI2BB zMw~W<^uy7qsF{a;l5Q4RF(6y#&qD;0x)g|-nc3DmJ{>RteIBCZ1V?(3{fb3wwF}gE zkNc&(1W4474x<)3&KIp-{VROo@;?96ig>H%&7Z$(O@XyXC}|_nt;PVubOKhn``G2O z+I-H1CrSapq<>NXL3q!#`HKgeZ?*Z$X{lo`xFeCl?5fTbjE2G@x2-%j@57lde^Jxa z0Cl6VkibXxuuFCaJK+I_F&yrNY1dikc|c1Yky?qI$3;@4YZ7`GId7S~nu)_ZNMAEn zRgMr=$q}^`e#FKTm{Rp~V{;l&)~L_r_Aqcl2xz1kG;p~QfH?CT$I!PKw()FYIn7 zIl_o=(oabuhi>td%#~sVBd1kc8N)trL!r)RP;cI#TFFLri%30tmF`U*+8PyLc{6G` zL#z6Eni$oFYPG4B3EIJrT5ZH8@H~>K7{vcwQp+=cGXsr7iT)b9at! zKb0ksbDzNsDON!#qZZ~#1;r}!q!{zZC%ZXSOdBu@kwo4G2sJsGBq7!}`SrS7iKBkZ z)UCZVgx>uagjzTQEm8=hO)7_(g6p|XYBOw6a&LnxxAn|%wfU)e=;vuBi^Ip}R?7`v z^*dy>>e*#Z0#rm>pVIGI3yB9xLC@P zBRg|q^u}#K!}PjprQM}LA0$_s5nj)AL)+}jHt#;yVr{Fjn2lw;YJD+UcYPkhC}%gK zQ#EbIQe1Xt(h?8rMXm(Xvio53^_sQJ|V5Ra0PeXeg`gsVqniuHaJO@u|;nBzI zjh7U@Fv@!89Tt2JV~SPv!W|`{gXtG|7EJ?^IlOmjd&}#YbgzTKH`If1{quE}LEkrk zcb;8EI7v7t0nPD++YbF_QkLYF1@OGWP%7}E!Axs%O>uQhDb>Y%uQJ75c?g$D$SwQ^ zE$hRpT+RuHf;B=;NRnRUR-uZC;m80wzzwEKdN- z(E!+vbTYI5bopmW8p_m$X6b^H9x7zmFNL6j=@Z}21)Zc&Ied2|ta28z40jhzBN<-k zI@!?!wi;G_(2ZHSX37lU=&bG)7GF|G!pWO>MqSSm@NR!)cf6O^$x(Mx4#(QP4_`$^ zgYM-|rU1m=`D;MvpYul%?&axJ>ON$w(zOZ!Q83o7Vje3yBsb-IB84t_;rb4zRFv8_ zA4jViMq?WkKrY3Bxw9y~QwmMMPxX`_Ebf6gCv31HaFKrQo@q>Prioh0Nh$go$&wvn zhUzgdSdjYW1Dv=6U8$^#KnMJMNg0aXvvd;7h*~E*3Jtl@6W!f&Ct4rJKFrm%=k>>_ zX4X)6za-DRa!%Y(Gq@c+fQeCy1w z5YAD`MF%>P<%>8+o84O@7JTL%y)_p!>9)E*u*X*<>~yyEif|$MnaTt_YfmdWly1=N zNQXH>hj?Hl5V6ZflsG@=!Joo<>gUrdA8qFfXOqOhT50*A76WqP5Q zQaHC*h8F4Eb}abke*c4Xk8_jjZi_fooZL<325dnw<@KT9*DO_)aLLfe^LN%kqF^bk z;BMZ{HIXW$zd=eY$a#JwNmvJT^wYY~js%3YiL6|JGn#OQ1L<;(+ep@-A*OkyEpu76 zI^mU0kG_#*_4~zuYJrq58k$lUm>x&=8+b6?)(ntoK36rKEq4MqJ{|k5CVuP-tw6ig z05l_Y#OKsjT~&0_o#PVdEZ_w$lCxn3>wvKj(!?Fxcc+0E?Wkh-A;%?;m2@<)q+bWc z$5KpXoORXR&}WO^Sk^YW5lC8VGUi7tEwo4897mstxb{>)HP%>UPyd(20-sNQpjpm5flAyiDZn`y3i=(snC&ubLD|QQzb5^vo zk_pkWsgV7w?b(v4twh0LrErc@6l=UiZ__JKPDyK|;KSXW%_%}kNn|9NS+>i_oFgaZUhEJjAkm0I_Ly;G21e$Iqm=C` zxqUXP@{PNFNxy0K`b~8d96+h-R!BY+z-YkAbDbjgHqN)tBK;M>5@j|tvRA{93=;qf zoo@o(P+3}u#&}$p33WypEb1ZpIN3=sCC%>`7E^hWBFns;U6*t(ZTKe1&4e!u zZB8CJ3qE|9o2~esOB@lodrZpmHG};)Q%&tqJoou|BDTo=%n#7d<6LJJNZoB>Yncm%3riLoaL4ua7sKh6*`qG3a||v)`)0^oqNf?YOwDks zCEN+jm>P;u@yS!@$o5}n{a`ByH<$sAsITF40BShXX{1cv-3JCC*RxNYY}+AX;05^TS5t-2cZl zlpW8(myZW;+{Cu+P#A25qKuBloI8xzF}3}92Uah-yg|}m+>bvF&89X38?-HpK2AI~ z8@cFpQdnUZwC&oheLS>z#P_RA%0)Hjd=n(V?f6t>LJmQ?=f+Tt8aAZdmE}^6+b!E* zt;*;Z9!uQO>-l9)sGskyo$x98X2h0JqN!q$zk*yt<>SqTtg|WRLe{oSGPdh@L4U}p z8O1tQQY~)>7r{mpeB`rgLst-MeS>Ed9N%0Lvpue)-nM8$_Z~D+;2jPxy)bR}Dpn*o zAF1yLgcm9lTHZV<=hY56Ag^&z{!nafL%@QXEGi*Kq`7ludP~F(wo&DF<{)BEh@}aq z!5|LqH^9JZN4HYotO=vv*3dGqbydvrmg~DBU}TM~ z%eLAi!pRrAop~p5vn?uaLYP7nLIjFxrN(m?$@LhsGG=<=Z)a|*Xb$8sm@-IhU#*OF z`Dd8p7s_e~@keNIF2JTssz=~4a&O$TG42SmUcY3#ICv3_v0pS%xvVB#C$N+Zc?<6a z{q~XRC-i()mHD||9H;(jc?K#vM>MZ7D8(u&^cX{kmB5TmTJW@5n%Egy$>r_+!Oe&^}=1c8cxJCtFx%JT|oC)Nfy z1Z8$@#2VBBQ#P^gD5~7wno1C{!2hxUx(~t0xa?$%7}MxvkXWn(y6%p&8hK76K#~@t zTIR?M z2z%bDl3{+PvF>u9B`2PFyPDHO#s`D@pB$U7dN#D*b2Ia-#T;TXASG`7Fz1eAHDLuo zp3p&Z49Pq(7$6w}qM9R=X1FOG3sIGMgVn)UF#8gN@4~+iiiSMS^FHz4A6ftY-5qF8 zECuEoJ{h6O;GXZjTB9wU+~@~yp9u|;ksNlVfbFt+gTqi2M>_z=w7hlnI#4uY0b8i; zcB*NHi!xTLaPnM0Cy5sIpzYGJ<2rAjSp3a`Pk-i(8B2s@W6W@E^_r3x z%9TuPE&9S}l%|{NSRBKV{l3&~#k0q@Gft)ZxOTsuXnF&l#Rv6-eMl-eE-Vw*FK)-l zZHZB1xh?9e%w)e3h>LyR_P{8UB{z078fpY?z_GWfRs^DLx^ ziFbLU7PgR&oxNEc@Bwx8d50i?IV*Qldqu zmp-GPO6A)eI}3Ln7fO%#1%mCJ&E7jqKE0#ctG{By?k8$y2a~nq0j#jRL6G z8A;)26*tL17pkRzK6Xkh;AIoHD5!aO05ZrrtdyDf^4ticyZwv37z<%Q}1T6MB0 zetDt;>U7r{y~9DaqXEkiYnIVmENM?Fj+~QWl<0pN-N3gH1Syopb$x}f+)r%yp~IhI zwHxTH({vMgpy>8g_`!7<9MII(2*`C|I1sXK(dRp+0u+t{K!6K#tnG>D6+)A=ZNl_= zjl~xCgha768=`uy2WZT?#Y*fI!FtnA z6nlq|%P6X+89oomN-^{39`W-)n^~X7fx7IkSNrSq`0?YcFVu8~p%l*C@;$PRXZ=cb z=mP*_Ui6O_aOSq8?*?6MSATla$@)xt)(WkG^SP!(y+1qMq*Gw}$NGn0kK2;ZK1Aub z>*@q*bh=ELWF~7Yo@^EmNx(>Yn?ep(qy=`gzdcABNe_j)HhtZ(U zaDASDqUa6w!!+G)8~K4mk>285hVpwiifLWtBF{g-R}Po6)yt+>oRKa)d)rBx9#A}) zmD*5MZVLr?tYvuep#0ppe8tkk=L;bv`_1?K^aUQ67%{hV%<0HRoQ+}JG0F?kImTjL>|m9SE8qacfJ(A&SzxIzJVKI!Our_ zfF(r`5Jh)WDG5gqjf@bqU)px(s91{Y-3}8hS$J5tAJ9z3KdkVg{YtMbAF9Qrn+W{z z1?1@Mi%MtpI&YjD@6B4$S&fe>SUcS`d*YJUwrwzJ5g)Arn-tCLcgfQBMAKtB-^So= zsGyjlmgyUZ+k3Dm63?jbBgeI!$iqYWD}BOgF;9 z**pC35(KfFsm{7ko12ralgJ+LukF8u+#vusg@r_3g|2;26;#8M^YPFdu?LAD2Ojr9 z!vR!J+Zc;d9Cl?_aK@f{ZCeq7q1)cMJt69YuIE2BvG?qQV&eogNSP`8%35waG2MGA zmIEBqB9q9;uKkWxQi%-r^EU~}8_~fju4BCM=O^;oHguzJa&q0oCC;76W?k2P0DgG> zyztrgqeMS(Tq8ARIOJ`vlqR2LJT07F8|`~J5i9~$RGO)Zp6e%ik}e9dR!S4z&_t7Y z#E_jaQ$5_z|K)BH^>SerHvrgmlU{ZLDAgowcAn$z@EhCZp)4_n z-m2w73v2z`p?lk2+baU=ssc}JOZ>%|45#1NZUeELf6rDk9Vfid5H6Lr5;g&t_PgueKNiWQg;wNdx-6&lDY= z*$ukU6Kg-44cv@!zK)YE>YCO`;eG+CDW$1|h8r``*+xyRG@D%D>KwN(8|~@{sins- zk|qj=v`X>9ZmSef+I8R$$z94P~?CH`>2*{zBsGnL-G+oMpe4f;VW%7bA zm;e2VJW$L`%T3Iq7el<|Om8O$fpCcG-F+Gpz}N5oeukzuAl2OFGAzUnKJKx8VKeb? zQqh)CvrlQmlI>^*ZnT*+MQ_j9kwzAqE%h7u^W>L->oj5W7g149?CP$9;U6|B5* zPT!Uk-aEVoq{`gZaO&^}wk?2AQZ%u+PAqA*x|4%u$<5hM9f^3w);e#-)E!CnecPtH zYohTF=4z>ioICnD{mUD`lty~yorZQ)t(-X-jyU|ACMQ|t%$aE*{u_kj(yFnmql{&L zqF~chIALu8ULm~5+quT)!;41aT-s_Bi7<=(T)Xub{XB*&m1e@k&KrDRQy=0~#RSaz z6rHmn)AZgRy6J7QaGxvn8|7jQ_p?i5ako#$h{WTH0`pO0F<+&>@hzX3KG#jzp;J;k#9}v0-d|8xeBu0 zbu}H*=J!qWucqAnZILLji>L_u6HOPPHHG9GH$l<9P$p}?I@47*6XODzOkvGpK2cZ? z*^iwYN=ch#C4u48G=VzTYUOTzI!LdsS|jPmYU4VcP((AFwW`w_F>Q_?5ob#Vuq(W{x0b%*)7ecv~2dQ-0S^Q7~)A%me`-j3b$4uy0NxAeSnzAZ9x#Ei5F zXgd|O$$`n<_JH!hFqkSGo2=c&4*L83^R#IpI=gL}>qK;3B8cxLnV^JI<&%+&`!OP8 z5rzsCxoj=%#Xb0TaZue1jRl%XAHSxtMM#O*51zjZ!XXDixD=($J1#+HjX^-GWEpXYwu^t9mua=H%OIq0UTt?j`+n z^eE*&Z?qf?45TmBf=Gw|_WkJLBt`MgzR`j3j(i~_SL0bpE(kBaxn<0Wzo&v0X9!+> z^L~`bB8AxzO=77_20G&J>?Z?`#97oYZyZ2h-=7D6{(LO-jX|DBmrdx2G?YJGh2R{q zE9?bvdA`L8JCL-5!6aoSy`i{l=cxAk?VPSrm2*n!k~Noj&%WOT9PG1OkTpWYT(UvN z&Z5c>%tYI)qwAe;(GzixLQG;&~cV>1>1b9iY#bZ!3j{W0*eeGdYq-8?%uFU9kq;bIJRM%iwbr zm^BY5rL5Z=nT!44x#vhN@U{oEY2ov4PvrkV7TJ4*U|Hw2IC~~rK*~qSM0n47x0+e( z)`br0c}evfh+nc5HJy_!_6XzEOEKhPM#;r~DzM2BTC*=wB*m|DMiHoHtw}iml3aiE zg+JHdBH`a-V5VoY^{(yv=5K@c^TW85q-DGFm|pt@OrgH#c)e{TbSs^92uIFm`};mW z2GR+^^sH_NiOj|M9mIsyXO(snc2*4eZu79u=Xd^oE`ou3MQe$+NG=yrFAwRfNjrgmzgxz^zc(=heMP#0o5N5SkoMKA8M4`Ow~g{-A7nx0^a$&Q5)LfTrS>7i_T zv~O79WSel_G|3{j7YJPK_cs7Ka?a#gfWM*tGGA7O=uR`ckca@uuOakjQM@0v8OI{@ z< z=lx^x!>-{6!UzmRojk3kd%ih8*gG8T(8i;_oNpr@oYS=*j)iP}bx<5n@GnUS5Q2mN z0Rn^s2oO934{&^gy9S2~?(TL6!QI{6J;AvP?rtH-;qHES+}-27SM~mQ^{bki+M1sE z%cIQ(B1*2{zG532=G=eTSKn|J$uX~U|`1qjnfJbzgK=MK67K8XPLNX%E7CLH8`;yfC z{bo(K_P(p=bb<<_cnEH)V=>?c^@L8K9ZiDLyLJ({6pD4lIcr4iFT$*Kq}8)9lTh>( z6bS?)2QkPND7poT=>W%x@2XrgKlaUqK~Q5DPzX;tArumGDS+8oyh_7d)68McxiEWq zn7noG2Z0mWahJjuo6lWUUJBCzAvS|QcC)cpTU*&~uWM<$=4s?Q{T9)Kki$R0)drtX zcIh$+pGB^As)){A8=sDLHxs$JM@;?g@I(c9-c(Ws&mFw-FuD3+3xph+^5p%VPF-35 z&XuXK#FFWKR|!6^<$U(j*xJ1@8#bz)Lx}IF5r4A&-ICc=ksan)hmZkk!5nZbUN~h) z<^=ioPP6{E6x2VBQPMg9W6nU+|BO?35+phIp8*CvJN-3g48}6%9dSFxXREYi6SpP3 zCZPSSs5|Ikz?^>tHa0y6hxKx1uK;&PPXA_J-TeC2&Qq(|^6YGV2dLNXd{qg1(7=n> zYm-mb`0@^J!Wcs7Gh#vBpmizvNn4~l?$PD_O>l?Gs9>(wZ<3<>`F4>da+7}KIEn91 zE9~}@t}SGc3MHW_XGl1g_Z#f1PkPiZeRAtotU|rIcql(s$o}1_Be2j)=7rIv1OAOY zbhBLzBFhy0sL;QMO*{tsv1?)h@R|4$z;A$;khQ(=hyL_~#4{^CYiD`mU^*QWwj0mv zU&YW{3;X+|y2a9m2HRPMUNhgu*f>(U?jByJM;+B$?)#F@S98BF@0whGlcZsn?7z-Y zSgXzwj7v6c{s%l+$X9MMlJ&Uv*BoB%hu&Fq+$Uk6f{C$zH{`ag4vBD53>+6OBN*$s z$rEnJcEbbinEfzS=zKm5KW{F0eY*@6x;;?zXy0)k?2ASKFsp!v zTLCb#1v3alpF&Yvj$m)}2^et&!yI95mI0_6F#PH<2cidow|(F%%u`i`XV_#|SXg*i zT~DVK@1x-1!vk1Y+3U}+h#yN$IUG$mtX%D_tUq&_JGpjt*}LuxBrqX#QEX0Iq4dY$ zQUZtM0j8D=?AFB@hSt?=OKTb51szmZHKV@PSY#EiImlq{^fSu+8nGHLX_`+~bv4F& zHN*?zQ&PB8#NZp4o1Mk2GoS(3R|ruydp-#Sp+2FuhQsJUZm6vz3hg@JCo_- zsJJ?CK44lD(C+7bgBZ;^(q81s6JfjacfNUWIR8Za5J!;)6HOq7mN<&R&xgZ$>7Y;= zNC)WV5V3dpw|8|sE^QLh;pMI`=I4HK>2bfYxp=v=aoIn=x)Zgr3=BKtGJ;apLfEuB zy4u_PE`Awp4lZhY_EuFbru9y0bDcuy_Vu|OIYC|ipo>G7R>a2U&d&MeW*8l3=-#4$ zK-%O%1AKGGXwfZfZ>NU~?xT|HZ;-nly4RBgx}C0y+QWEz!bex@m0|!72*mt+)NPOo zr^Dz!2uSzzv_(aXtBHlw%XJBK;;IK)G{^zqooGYoKeetHK5S`gJEFZ-!v`H$0T6Fj zS8reB4s#yJ+4(B(ae8{WULbDA`<1*UfJQ5;hHIS=dyK&vF2}!Si-QARrR6=qn$g-m zod;|a3La26$X%!dYcA~V5Gpz7x3|P{%|G}J0@-bmvnO}juvJ3SiRCE@bB;AJDjb27 zC_V+N@%6*9jW9akFlOY3ZhcGd6`kY0?#<}ztk8vkBly9?>tZX*_-&+kC+(U+8dxl6 zI}Vnu9douj>qtI_Fw(Z1B-Nab#-=l!%tjaAKh}nHkf)nwd;(2gMEgB zWZ}Q^Kpx1)WqOBehnY)9w~siCi~mIH`tOeCjtN(&wp7y^fp%TkSM?}uDfLl8hfxzl z*a{&Su~oL!Q@1wT!KD{kEF0XLA zHOg!b)J$2%JFL%9ay)=T;4j$(L7@~<8C|}O{+yWEuqK?7yptlA#rAUFl2)ZUf*u(a zu>dBw%P@@L+DHIw1TLFamxlJo%v@)pQxz}=S0^#YyaLdlsGM^iv3$pljrrAPme|EU zCHJu??R$%^?zFBp3}F+I3I*aJ%mkhMG8IF{hrFnYT3)W&>)kUuJ%0(M1znLQpIk3D z-T}}VwP#i{Sv>dm%Nr+}Yx}{(oUwF@yv3+L(*g!pfw0hhsa}3bK=|@2)O-7@DckKW zdrQc`?3CZH!AC)lvbZS2PJ7m55AY(RyrU%W!)P5 zzrha<*lJOcFv#XTo8418;N?kL&uz&Vu&@f=eE>Z;DnR+z)wTJrQoda-u%>={2b4R} zcIgtHBzJx11GQ|Eb>QN0q!|12_2i z-|b{?DRS9xcyO2ZL6?Y36r11hk#n7=_$?JXg3M7$OfU+m(In8`Rvr3o^5F%j3YHJU zbRtjl=83ABSb!XH?}@JtZ#OF@-=*UNf?9WK^C!2fJR-rg(DFoSu9{uAFVxfrT` z53Re~1^$yN*XX`-Y_Vdx?|SeSzFDV(xxHJ-?Y_G)NRgvtqbG$|QZXJ~DErk^0dkVD z?&iF8FoW~&R%bg=-z9$_?R(BHl~9FU+(4Ki*>e6`USCmlGNe-lW;wlf_uJlsN2}8H z41E3e#PVVoeiqfDa!15m%9D$PSSjySj{$!0kB^Xjw@}TjdIM`85t|ZG+4bNBx7g`MG*K%S4{mZ%(b$92TFaI=_CfzbhFO$)%tJ zu8NeYN@608@ZSJLRC@czT{A#MclU2|yw3*t*_2Y(Ea+GDx873bFaA=NP!#dld)+~5 zn&&rloEuU5%@fAepF|A$H-2Kgw+z@--Vt-~#`uN|iq6Aas_xVEr(+%-&;kl)SIy@e zFrI={-b)7H4(xL1YU>@`v2FhHf7duQJS7p(r}J%U_k|r<)Yj3T+TtG#qm92Vh^mv^ zoZiIw8lS4+NAKPVtezyWRu`pX0!jUnH}xkwm(Xwg-4`=9;8&Q#%eK(?E%8B+(CiVX zlLUP2k@>uRO`gl&+lEGL2aUgj2uaT_fAvEx(s4y9_54@q(sHXpx4Hn0V8E^FMD-Id zfApXb^||%$KEK@9@xAPZc|g(s*#gtFhYbqQ4Tx~Iv*!B>%Y(eyINbzv1H5%lK)G+tZ6f7@ znNGw@!go^iHWaBe)wW|QV3X5FMLi~%`_B15W;o7yy>pTSrt+OiCXwZ4?XL>cuz1BD zRZ@G_tZFi{OULZXS`N+G*adpq%Q2Ric@WptPee#8b8B|^VwfgRC3bT69=?6QL<7yH zfu?UQCT(f!gOp$9fBg_>8J^D(bo%R+us;5(^=G$cn)cbB`*w0}Wm3~ijb82-lNd{S zmyY;bnMJ6Z12T@_L_p1Cs{nJ6aLvTzJ0XHLCfQ_?T*?@P0eJsmQ+~ZWmSjHq1L$nK zKZ;AEzwx1F1m1m~{?8dN#*wiQ1HdE{0xf-#krSerTo=q#j@*9CAPV`?-|}@{_Lm4~ zRv&=(#p}BX#x?yF&pU6~g|7mg%ty2Z@MN?05fQ3*T5F17h@Zc&`yCs@b?)>OMOvLc zyQ-25etiJs=HjL*j!a4t3TnpORMDn~1J>zWy!9O60$pN*iN!#S-8$VK2vrma&c1Tb z7`0rEM}|iMu^7?AvR>bw7mD`-Ty>6T z5D>^!>RbPN8v#vK4uBg;2i+N7($%A|CQi8(wa5iDTuTiEw|9AY!#g(8HWoMb3d;X& znB3oi(;iJ*9_7V{OCX3AZSCcbdR%eO4=+2uK4pb+VjyUT`&$G>&l6Bb8-5zsNDCOv z1$$J$EWnYYRcSETJXac&c;^j<_Z%Bf`F^ueWM;>{t#5TQZD)0=7k2pvI1mM_b+DGq zmS8Q`AfL~EU#effLMr$#UtjQcc6M$( zO5Tg18}t$RlQihJMBx7B+QlVl?c!V_E3xx1Tk`HtrgTpMP=DqxXQ$(YN4MB4i@2{k z55%VI^GjOoEhLOZ5UCULVg;6+sH1U1LslLPWWDYqT5sOS?KdKvx89KKr_S*BrpLi$ zjeV2<-C=ttbPr%C3SX~5`)hP#WAdHBAQ`R@5x*W$ zN(K>;YL_V4E><3d=@PB}_nt`@aLwTHh{Y+_PK{6}l^zkGvz=|$>$a|L)Ytz}s`Kod z2XoV)7sQWYqP&f0OKN>1<2I51a^ipl5~xX!oG|FjTE&Eq*PY}pcp!}*;{g^Smt1D!tpcY{EfLF(ub=MHdH9M9i%V1G||=>u{JY=>bX)vDV98yG<<9!>CcdHon#s75~D&dy(r)`=naxqdP5 zi*IH{?bX~q)M4Dqll*z?l2Dhs2zcnFt*2T@abj`m0b$-1?*U8$-a^x?f?ftwgIZfV z+7KlVdjPJZ#s&`;9|VflQLcl&(fL0xa0CqC!erfds4-iNjbfCp3aR|j+d(C3ppMU| z?QDqi@_B9xt*K$qW!$7L^ZjMj)rl>)12qiOyll(jxw#zc+;QTvU_XmoTezAXK+QT3 z1I1Qz{e`cVu8=Awn{vmw{`!&jHX;#MS|*@LIdKn*A7{;t;7Csjz;eGM}oIw z23^&!3&u)S%}?tU7wy>s5#O0V;76^uEJMY7bmx)|1sCYdh28zAK^4zBKhG^o1bycH zD`DzbzK}LeG4mCzl59Eyu@XKjyvQ*?W=HK_ake{9jPDt`iJcXWdQ2}tSRzw$RZr-b zM(?71A}64&c4LN+lV#{q?woK%9r)q)_Vn;{uw(rD{X@Z3-ma5A!Gnn|=&u$JD6CFF zcWU0gVc~3K97vv4q{Z#fJl1WX3eU?$@J1Y6*Jr2I2jMjX0?U>Zwn5l};n$V!TKj{>KyCu;SgM4RpWq>J278*tSz`D0oXiCCnA zbb`hEFPvwYm2twLQxkR%ZF(T&creQ z{P{a~>M$2Yz@e76Yw8hXFOR;US*Ak%2KrrXt$uxTJ3tC}fcg~F@Y{NRur!n%c>}q3 zt9o7h(y{3ujpOA^OIBAu^REjXXi_eq+|A|Se%URera2wQc(m!DAw)>W_bO~Be%)}A z0lJh%^H8G4b_|=TkEBObW)xe>7@nrL98J;PXJsj@k$r@u7(z3&fCnoT;qSCL1Q51Y z-1?oHHFbf3X~GFgPp11hjSPXE>!YB8k#HI2oaC+NbGSWM&r$9#0h)Ysc6-cTiz1E? z`LmAel#{q+7EK#Or4)>Rc86JAXvxMvvx9#pVYy#eMM0qzb9Q@k+k#rCp50|`V+ea# zDjm9q{ZfrFsv?DtAHj$^R6JACfqr^*ITx5pnKFg`A?eIs zfB!S*p_956&oqFY4SGE443vL{**iMQ12&x~WE#Xhf%|^lg;$M6Wp&u1v$20?6RHUE zw5{5FX@eBJ=WMDZfO-df-)XttGwHybnOG7-NsP!5-QbF7Hbff3)`(*ix!%g-MvDR< z2Aw;zr^CdJ0>Kc7x3m5NK1J0Wd#|I<9Q(t(3i|v4ie4@QQy!WEKBaaidD@p>9N8Qv zZXi!?xYD?Ez7lPnPkO?Do$o-v>XNLis*aA0qfr63CB=bFC)wo%MH`TP9fTKX#4`m^?%VW#ODdPm!}Fi7W%gR3(x2f-(j z07wa=ysgcH56nV{vp0x;6lQTT=L-{Xjjgg=MK(yQ)5d828;EPpd^Y>z~r>Dzz{#X8pEnh#3V9jKfVm_nwquOGj z%46m2r%cI)%s}k03Vr?fXnp2An;Ha5x6HMx=E*F~%vIjGJ7K0KP;q)ITJiI8 zTL9w%KP(&VsM@1|ewXM~nSJ(VAOUDapFx!9ya~IH-v*~ZU7t3|qMTO-Qxe0`j^i2` zFy8H@D=;5&Y_I3GN6ZWqLgyH%<>jusf<_!qf?DrOUUO~BPhN2WF-zc^B^h(?n@*;u zADma<5(t^!^=m1%KoJbOlt#|{g<#KB@S~r?{bsp?G$42ecr_aX`g!xla*KbqrdE<< z!yY(Ye|D?g_7CKbo+TIa`EouVF%WSk|5be7RBYYx;pUtWQvDtfoLdaKJ3U`T#GRe5 zBGaI6?`7VBS}jI@q&E{=P2ZciED0pb_#SzHYh1UWZ&XT9v(ygT z9ATPX=(VZ-4d^TK6;`264#iD{trpX0Tmy2%t9xb$@^W_t1$xWMK({#?a$y=e6DOfH zpFBhVlQjPia!6>vdk<;lyNoD+;*pEJ@nMWK;Q zFGCcaR@PoJT6a+H<;=Luprm7XYspn-q^dNJljMceg^!-$qN5eP5Sx!a7L3p??t>O1 z`~hGr?`sDZpUW7hjxKhvPe+W1L9AI7eCPsKUt}ZD@eRhd=)&jnc=xhjg`y7c=ze}D zYS$K_?^}cNyjM3@-g$bt3mfKnlx1ocQPJqtXd5tW(iPK%o`-TQ)=*%|AM6Hrq0MPx zepTQdHvix3>ImVED$s?!5Ig4}Z|A@0$zI`ic{YF)n+&m}rE}_1ilD`rYQ}fS_i@X` zkc`l>BsSLL12O{^fT_`_%7~~)&TfB7p6ybBR7INmhNbFazet`Heb0blBq@fjD`$nr>s!fH8#J{b7 zRu=5@meden(GFs?zxw5u?uCdb%lki>6~gUzpGrLZ#XVO>-uo+3GoPPj8D)U0Ys*~p z*zBH)H{y#@UM>F>Df2TDq@X=*I;n#N z`4q)R>_&DmnW5#HVMR+Z2?*K)b9LrkpLrLM=Q4ov7TOJxI8RCanT6WF>5BN!WuOf? z{{z4?V`UU8{7x6VOYBBS=UMw1$zJtr zS*+9uBW9S`o@|}#$Td9!VYYVr-0P>PZ9e@2<9l;PpFi$|MnJjM5Ez+;&`j+*AIGjJ z$~QLm7Ds6{L0oXNibFx-EFHF-hMaq({F$$p3=$U2uFo6948KLpz(nnORZMM{s> z@wtytu2Z&EO%YeoeMN64zi%Lj^WiK7o#RC}6=;|mjQ#PW-bLS?B72_qWmdeI4C%Oe zh_%L)>GrXe?HD7QcaE3Fl<>Hjbh6ThH-|N?MQR9r;c{vY#p_1zlEqd<#=e)pN3Ala z!nzVEsei6lhZ%_6`{IGsYL3TV;WxV*sxiW9Xyohgg@=vNcdIRns*1){i^~pYmo8YRg>h8qUorW-*y&(<@v#b9Po!lA zH`d5zDd##!0ND1gS$$UC)1CB1sOzsO&eVgA-<|Leoj+i%UR9@?eK;V#8?HRR_hUcD zwf99<{l22cDy9o?=D&8uU0%HI{&!2=p_g2|O!JCwDKh0&AMN&~>y+9w_>S%LU=V!& zKnzCM+#lQ?oG)oZF>yS!BVj8TANXn5_+VeZjOmE|fJ&X?2ruV-w1vqWhee^nm0c75 zdIkUPGkVDyVE7- zD7EYS2}U`yJ63|t+t7fUlGhkrHuu0W&^#W1+;s_TRjoO5BqSwv3_E}UiH&U^UrU*+S!Y6q{Vg+8?LY{&6zPo{hTtDI%mc*XwT z>*NpMS^{_x0o>Jmh|YW{k4*y2B7rubx|E^1+#87pJSOeX2er_iHXgEA9oYR*Dq&XUb0vB4s-VL*j1LlwCnodi9IIm&`VM9 zv0d2l|3FX+-E}p$5*wL%L>ZT%%6uI6WBaQ%9$vb~V(rk~B7*U~M{07xBWC8A_l;%8 z&HrCbNINvOh=Aj^jKU=z#&7W_c+`g7Kza|o?k0b zggLY{!vBx**y|08#8DfMCS-p^hMJO1EnXBGK#bv6Owo}63v-9Kg{ca!PZ|LAFwQ14 zC9AP5m8KYDPihK4^ao>ccna8e?$7jIYs^jU*M&is1J#9G=Fw*ZG@<*-0A^w(^YCir zFZGz@S>ZIbtG*=n9isNy9c|2h;AQgeUyI7lZ$_m@SHts!8Z;xz1Rdn8w!$qf0->ec z0&Ky713~SIC{gB&v+w24BWX_+UGopUVj0?KA|TwLVAhFJexs^ zKa=qP(3yTBE1~CZo|#Zg*1UAP$creH>V)xj-@36sqnEA{Z9HzsNza>l<}7y|uC_4H zzq;(S>g|CO`=R>A-)%>vw))$qI>q3qflNzo;?M0!3)|ap;=6%ciXqp*wfLiC|HQ?E z-4p-VTBuOgyeI*YC4o_t!{ZL8v-#s@g92OMz!ceoLtG3qQG?)QwY7PZ7u2`r;m8yx z*7%|fSXHz$9z~Gz;R;YW5Ea!d*r zXV7w+*G|3Fy5;wGtbxDwXZ);{vB#s%49ZA2!p#L@{(1Bw$sbb2Rk-i6MM&bswv81L zTpHQ9BLN&wF%8CQ~9os%17unE~#(TDxX2LPbg}3wgAdS%2 zCEU0#h6F{G&0+}rNrp;CR1afna?Apexl%>kw^@r3nF=Uv>S5uLroMND5WS1i>hX@m z3KDate{>K(OVg`FUoja^$L`M7zoFJrL)YBCpAWP3SS{_=Q^sg|R?be@iF&?W#6hI? znH#s6UdSFlqw){h=r%T0eyzphar#Z3b0p)$ojUx*+h`5D(&e7}5C{pzu|wAKO3lf- z^1~CK`OOHW6S#f!c)@C`@Qh&JkVj50CwqMy2-}o&yn55gq<1Q9zj!B|H`BsVOHOm{ zuVlitO?p!2ir*QbkSVd+dx5&kp|_fUs%u=oe*InT=elp|bT}&gzR8Yg>hMk(TS84e zLO#8T#*8~QHHnxeC-0h|xUPAm4LleY7E|1=oYS75*e0~&v486z#rL(BnVun$)wZ%E zj$907Lz`jd`dXBsk}urnXi~7rI4NN(aEZ;75S46Nr6uEDVrB=-ei-@ptuS}gxyK*o zM@S}BD{Xtr?bQ!AKvwlh90Yn=b{@_fVI@3w8u*%$<|EupJ-nUV)a&@cTzP)TG*>l3 z=>2WN^1;6W8+kL+sD{J-f^)&Ih!1J9{qj<`J9w0ypC8|ekJn$>o3t{boTadwqHsda z_5#PazWF3FYeWra{WAN4d1LIbAV<5ondzxkt0S(GcUg$Q%Ya!>_{r^!ZUf&#BcgJ0 zfce|^&3aWd}3i5(fK(f(p>8X-cpXB=lJq#ll5JE z(s6cHv}@QzE0uMI^e+REn_O9PiknbUvjn-X88`o6_t#=03ZZ^uCL!bVB04bvO6w`P zlAI&~$@!THg!sn^lKu+x27ifB{UiMbH_5(LrWa`GM;pxBfj^ znaRk1u=eQ-+rk7^LtpT3OsMa(s9RyGNLkGkqq(qm`AJp*zge*sJ;xa43y|hL`}5~s|TO(l8v-T*5J5Dp`MSrS`s0+sivI2b=g@bL6`JTlG>j*=W$zn7l{hFmZ-mCSLqmF5Spkr%)3Km91>4 zk4pYvIZG$ZwQW7gWBWt+l@A~P54B&QoNGbs^A}oCBrP|yr{oO8t#hAaOL(lSG>@)33){zaiX4QA<s)ez<9k-2Zu2d_Zbbt^c>R=Zltw?dYjW6ke%vhl zF+q{QK@z8PX8VII0`Ft+)V@{D?oo{`BKt}aoQnf_HnAuCp1cS&{p<=v&=L1oF@f`6y%wOich6_)c z-kTtwO8=4EW|HlVJWD$I&-jBWWzkcD1ZBN%ua@vS6ZqcaY3tb??^GPtwbe<9EInO2 z%EcFFm7kiVqC$vo3h||er$y8$OH<>?;U7#Gk^JKkTn{*^qkK;KlirRtF;h9))^cNc zUuy7gx~jN`yt2iKBN3etPwAm}^Do9Agoj0g+Ls7{*dZzzvq~QRJ9jx9t#Re{%q9z{ z!dM-|FEpc53F~O?XAdc}smyGxJn6*H^RIfH<6@jbOapgv_V3$U8)y&h!6tE>kLndPTdrQgEee5gU`Wd-j<&pI*j!mRX z!YqYK*};szEKXa)tvJ4mAZ{(>y=^p53CFQTw^l0!Yx zk8hK3oXqXW$F2T8D;E8U^NrTTmnhJb;i*KQW54o%6C=^*cJP^C8;<-YYj|RBq{|jW zGpXq)DYWgWmT%(LI99`}GW}<{(@v79neU(Nb6+dlKDce>_)YK3cpXE6Jnr1U~)g427 z2?@WsS?^$6aRhKxpj)9sl~r}4{^n1-NStfNXk%H;bmow(mW$xum0x?`dA2?2dSR7( zS8Hb^LHXkOZenKGA4&P#QK~-=A@Y=SXFWpEf2$fiBl@QWJ~41ntG)_F1(gso@zhH^ ztGj^=*o3Ul+q;NV6HU1P`Vf~;Xr{3+_U`hDf+&$8-Tj+gzEjPd<&@i-poFeKhVC%5 zUtud3yBe`N%*&RZwka^2={vclsH_^#?-I599O`d5ENTP~lVBA@vzEN(aw_SgP^#DV&lZ$8M<9sY`0m}njC=j znc%(9G=2-UZl6Sc4(d}<*hbp(N?c=N<{ha4^^di}S-k4ow_!;KH{9&ypD3)3URs&m ziJuVC?0p#-B;6S5n$7+a>5$5*Gx7ARa@9AjY@D6B0uO1?`EROORJ9!I+T=;Ru zVOGKJ9&*JYXlT>Pa_2fP!fVzt`M^(7If2h5H4nde(itI1T(bpca+E3xJGUs(YOZQ=t8P)LROzg}cIx3)O0IwLnOE(`R0Kv<^yLGIfvT4_(zzZ=~di%L;SJK*VYZ6zx|iYn7O{KYocYhPzk0@KQ=mu~o2<6Pwxn7`z)y z4BF$fuKo^Ee`WG#y^TdZg?!?_&l^ZiBSx8FE*othrJ9I{1;Ds0Jt~nrKA#6(xTZ3ue*fG5_dK=WgtBI?^Xu2V z{^}3OnM72j62K*CnQ7d)lz`4k-b1PR0>svwH}w89?)s6*%%eg3_XnuTLeV) zjvai8(P8D0RZfF!W>);15a4{*NZdqlx@@)N{CQU|(1EQdM|{kad0c`GE+L`p_OqH^ z4VK97vriU-&El$^txs*6?B+tP&?K+Gq=Kg_^}K>O*S5M(l^Q#cGnN+z=^I*KuvwwE z$Q6@;qezk*o3Lagh__#WwH^}1V4srjkWAis<>N*}!1&~gxT1#X@1bgv;4^)WK&)oa zG%7!U@#35Siy|f2r-JJG+zR!cNd@p?Nb!q#8*j>4=m7MH?cds;tB0?bQ#{=LcpEu1 zR23v~dA~L3LL#54QXy@Egt<~^DNkRNNP2M~C)E5LCpyaP4RL!(jfB_(zi2kVmH)u~ zk(||L=s~9DB3)h~t>_%da`7|rz0~al%OyGKTz;q8@18SVCR-q@@Y$umAtydL-JCqL zB=53xx19b|BW0}fYgNp@l$VsOxPCvP^8PqdH11RsI9W3Yeg8pN+30m(5z}|?6q6g-jiy|vVy<{^8uRY63-x1&#`~3WE{w8 zwvvsp{IGiV_ZtZ=bi#-AoBqg!iIqYnGuLRzQj{EfKmfyUOsNSIv-pQ`NcWtMk&5HG z&~T<~c`A?jl2VhR7a0-rv!2zr?+gl=`LQG)tr{Z_J z+FTQD2YrbWBAc^Pq$?_|g6`-!H0#=&Bfifnd*uJX;YTfM{K6)7efy0x;pt=K;pED> zKfH@LMITQcX^LL%{UCexSFqRR?OQA^nTXbE=1h~+KHz6RqDU+A=TwJ3KUYg+oW80+GK18ll-dMg zl^!Wq!dk*>zSQn7S9+s33xe78s+4ExPjn+GJ^v7g)2=PLd+RNx)+#>=GDBg;oC$K7 z6oj5b*`noN5O=HTRb;=ztJVGc{j0q{PbIdCROba)B$)ZoW#yHFX6oz@#o6Nm){TL3 zVIeQhZkY=8di_tPsRSo1&$~IDXeW%kevA%|)-m4%?iLF}E zHc4Hc{;NR!ioGVVf+4OH9os;j zy%Gbe3HhJ=WRp;8H`X$GGez~bdB5|Ock3HNlZ2yUeWDy(H$U z;L0$QLq7i`D5+a~*gpC3)lewWbX7Nf)0_CxjeCt}7x>clIbX^a>^!ZakJgR^3qjF; zrViyK_NB?_1PQ)*blkR>6s@$dR1k=gJK&}KF{;wc`eDlP)oV_?puE9Xmm4B9^3Kgm zRNu;rB;RAtSg!m{OTxf}LyO}18d5^yk^{hp^VVx4LY?6JOLDeiBqq9;{h+d1moXh8 z?m{g|7!e_2HdwUMP-v;M^OnkvD9&c!RL5ZzcH#XPJ+chPHB7TH9f?}UNus?sZ%^BB z@@kRpi={8>z@ZovSEYNGKs!GtL&)^ZnL#KL#2T(Z`corTNr&2G;)WvX^w6EoN?iLX zV=eK>80kr&T;Af7dgkQ&0c*0?8^MVh%T&+tZx%xJVE-7)S7|*!-vN7T)GTfe&1Oo@ z#N=2T?c!MknjZ9V`4wEA?=~E}^JDyXi|YAS!ta!HyOD3tDd-J`{~SGcVhRkHHxVtc z;BC4;CZs3|XhQ_|I2$gl$@r2Ke`g!|8FuIHR(jvEm>zE-ROxpuAW84Y&AJ%WccPW= zfW*%iT!U1^tLmgm62x>%zTRlsJ$9>kvV2ynWx>Sl_3&Pal2&#qCg0ALUz0K_+~Ni| zW)6QRUwaBmu$;JHm>YbTaub ze!-J*`kRn@N$53z@F^V}XME5dE-zg^wF`yap=d_T|AVl1Bb%VG@rQYyM<+ zcQg36jh~OF`Wx%+t=z2mP)sD34VF-=zcwk}Q|iY0Oue?JpfR27 zqK9BRX>sU^1C8Vvapnx|pZ4MqM6CJ`1755a&O&LHC)W;w5Bgx{lj`y(x(!K)H})RI z=ijUj3#D4k6eths6yM3@z$a)^Mxf|wZ>#Vth|i7Ya`(RANy#<%A6oM1ko5B<`KLL& zA<0rI@?K4JKk+4>A8Wg<+pO=E4L4GWzWLdsqE1Tvn-^}YL?^S{) zW-5!{6V<$OuSk@AUKxy}m-@IDu-w5E$B;2B=4`d@VXCGO^@^6{!3(f!)T#DOoi_{m znfd5c!0Ns<;|Cl5)nY7h;$VZ--%kN4sy;Y(_`lHp%%5J-=1vNBWkq**32C_!K9#I< zO8ljeoTN*wwsgF&BvjK(+SJSD8Y@MoQXJjED%dFduMi&+p*EF7)nELCYo2TW?nmeH$=vsv@U3@x)A>0? z@=eb_>6D2J40p#)?3>AyJaSEDv-&A|edZ}i_g%S3-+IaymCV$?evlE#>9s!BSN*Al za?(v_iKpHoiC|>@eE`{25@MYoY)D*PpY>Vg4-x8W~Zu6vxSe6lQ$>H>50N9X7Y0c5eAZLF<&Ivkm_hYTBp?$)i~I zy(B!HREG1_Y=!vM^4APmCv%93-nIQ3#XbJCDo2s$t`#dn-@cG9tJ*(HOULl&gG#id z|3bMHI~wuQ;lplx_;Y32kBvpf+t~P3UiSrp!6DxoFk`mDTy zfkQ=to*mABccZ9ZelzOW+}tm|)zTf>s+{{L($ZX_a)#=~u#czKmgT<9JJbueyvb>I zd!qd4;9??UtZHdKKGBN$Q~2Ol!qS~QaU zet<>GCS2wijF27fCr_1Gk)lLg&Qa^kA%>N2R-Q0nb2v!#yse={7Q`r8ye=orl=S`h z)KsF`(OOD*`V#?F%bUUZb)~H?>NhFo$9~q4Gr+x!C1MgzZLR3fS~bRGEmDymILh(F z(b|)Y&-k?bo;Oav-CnHKpWm$cmo75B|4Zx-ouT8ZrLje1(% z5np9^hW_4b&mMBGJYN>-Sqi&BHK66CC>cQ>STl28J?jt1p7|MsAV3u(zt)Qm->N!VzneAuQE7Oq>#FsV zHKFNfGA8G2zQ^D9Y7DhQ;zF9QB;ENFDJ}e8S{JZ)tWk>YH(?V-R|>jZdrC>Z ztxDoK1If>lBHMtLq7=V?t=F+U@`^$$YpU}_$Ii*^RiHer3CzzXwd~tN8m*+Vxbd=| zQTzktt4kaF*ERbz&FPg0c_$iiseg2epH>z~Jcp|AX!F(dlgjfF^GG^9*yaMnwWJqu zHO+~DEw%q@17@!0To{o6mbCijqxgC$OmO;}vXbby@`E$NL z9ee%?xguv>GUOuZMoE&%-Y^JhArnMXWV5G+htMdZp7A*;%Gr{T@i4rLQrk_m{?X7v z_S~Z`#tyJP?059R>Lj&ROK=$Xjn~>^{E7K5DT!jE23xnIM5Vkw@83(>1+=~hrb@^s zV4Zr+bpSP1(F_KyX=C?xAAJoaCZ$zi)^b-$quSnyq+s$ePGX9o+9$ zkP{cuHfj~V;7JzlkQlp>#VkTt#d%oY{Zk;3a}_jQIBRpPZE(K@T8@lRZ@A%5nI@@j zBSk?iH2l`myKNf~tBJIoW&NQcG)d=Xpurgsf?5YuTYQhs-t}>{OhgyFk_~6%+ay%j zCwPxkeGnX~7iNH5JRGFHIhH6t;A7ZZksN|TO^yZ5p;H9BFtV3slu7rG`b_ON#EW%J zXQ@%5L46k7Oi$+L*g$%*V1TC^_fA{aR~!bjF1N({j2g2ouF_CTXj(=J5ezi)Oi_cV zp+dKgA1F62A|qWQ4BN=h?N;> z5>`r-C30WRaHj}m?2~dsYmdq*Oh#UlQr}UjKkhq#1`3(WADSjyfIp9@A+iWsLTcGg zw1Ec@4o0IDZjw8Jl`^XF3v7h}_u()n2qu(=Q-soR1+&)kwYk;i zU&D!vOeS^~zcg+9lr9kkZiaU>k#`guCQa0CR9$66l2&e?s`Zax4;`fmka1%w7imG* z;FYUG`*aOCl3nVx6iK;5M@i~hG<+N4P7OqjR0`8t-^@$I?^Mo0IZG92fLM_0bK0dq zJR++in$g&1tGV11et%yzHf95e)^}ynypfz_Jr5PiGD>Sqqk&kWcy@ClI$)w#F&2#= zXnReW7N#Kqw2&$&JR7+%8d|-2 z-A?HQC_Gcec+olyhp?y}fwK0Emqaa7g}ZR);7N^qzxBK49ia2}CvpW8t>}6q?v)zDd%X4rRUCAZBp5{PaOyT zaZ12Cm99FYK?RyQUNYS;FcgmXzLk`SqQ@t#FGR!xgq%jv8U=a0hA~yo`Xt##%S|Ph zydkUGe6<>0-)6pcwfsC$^=k541Y@h=WSDh@Ty4Qeb_a_OYo`jllM!DtNYyO&Ph1i6S3O3{E-EtFzP3AT&llZ$Qvo0d3s3 zgxATdhqf!z6O4kmGLjPL8` z=;_?>ib-1#+wu|*??Ye$l~Xsd3oyUPwEN=W7P9O#Hl-H46LjV1tqv7rOwSEza)zxX zr9Xxfo+F(PQ)8m2Ck?0*qCFY`Fswv6hRX{(_A&OA8^m-@XGeP}=FOOn z$eYZ&`etM38rz&62KL?mg;HY*;MewJLO{ORnw@pp@}}~rF!7qfM$DFMyr9-J+Tuue z3Il%II1W3E6Bujyh5DIDK0vJ5;%@}8Xqcseu?lLIqQX-09Y*0T)rADm^C6+O!u;=> zJDEHlue8`|OACOvzZDV@^ts&hJyz`{TcIBYNEH9`P2^Ly!UB)jpvs#_an7>RK!pg3 zz8|3GkSAks?neMlCgMWa!k#i1jQnuJ4G3JO#&o;BM~cq^gufrr_mOKBQO_m{w+V0? zs)Jg-7s-Uyo7H3rr<8TEFP0WEE!gF=yi<-iHi?MF!4ze`^l=+>j)zH=wH`7;TiMqk zGglwQn$n9N5toXjkNsD*4PEAGX9>(Fkn}~CIe#G*ljf!+vb>!zoxx`LOWLMt zV9A%2lry%DQ;JJ3j>_oz{&yzw6(6++E(kuqtgX13r!^tCE#vAciI1jtSStYYA8RWg6qHyq-`W$X>SW6`)WSlIe5 zK=urXQ7Tg*m1tmfTL`1GGbkDs)Q?9N5HO;??jYQ70QOgOC2EbWCUf-AxgiE_Lef=R z8dc$eyNCrf)WENgvXt)YYW>SyW(rn|v6ts9)QV{%Cl4C7zBf+Ht!1pXFH|C@s)PC` zAsO&KESp>huxyJvy=@X>=+;y3e0Mrb92cGr&}t?8=xf@QIvz=}V1rr^BgLR3iQUgkVyl>M9UdA()9YE3%t{j$k_#C>2R&un-HVvZ(izq;lp3|(Ld zz^`UhIL6d+Bv8M1vF;|Y^Bbt8HPZR-;05fd-JF4W$V8V|UbFTPS6oRQ-0z_fxnE;b zM$lFqBNA`a(NS4C;>&J8f%qbC%LolM-WvN40A0$-Vlcc+B%eX^e;Eo_Jo zyv8H2@qNTp>ptxAk2BEEegBX~mD!8BUdtjwgN5D|}hi`ouF`jK{`AJjT= zf=!H!tF)T6nzklRsl%hzBTjOzMr@jUJ$p3-kj?|Uad$uDnWK109e^6mdSAmHT`9iR zq(2dR1W{r?BA%HdSnC&{u7RfMSAFHQ^&xx}S zQHv4keWjGWAFx>{I^~i6Q_eyO5chEhnQZ>H4{?KB%Jq~m=*n9AeRC2;<%z%3Pi#f% zQyCJk~+Ts>k&Lbs^ zzMnqahHkAk&M#pMnJNf8INXDr3PN*e94X$DZr`d~^p2aqV|oqkurVy6UTai37|EoW zv*^nMsbu7X3}83K8+^l@m5TMDZQozFp0CG`3<#0mu2_iBvR0XF^RJDbLgqZurI295!!8D|c7C99A z**s>3Kp(f7&tgYY&LxBAiSjN!HSwiJ7YPo@P}-|!<3-UPqJ72OGU{oF@JN~>x&h3C z$haC-9_1fAf-VSaDa)h52|(bZRm&h9T1kw8x^_k{334L+jIiY@x29vdI_7;n61Z>* zM6IA|)ZTS{XltS`HT*JuQARFgi;Zw?;Ks&rQpJBn<`{)?tvRqOMM_E%+g)+m=WX?< z22muP(XU0CGa(uM;&vtsYI{Zl_PGsBaUZNb+5aXH6@osgYD`34`d$xt0Dgw~1KboS z`TDu7L}ps>0rWwj{~x7`^0-AcI-<2P#LJdIoyd9yNgauEa0V`#Uz>4V7KjOIs+zdCCNU z^g(;GY79iQpHYbD8QbR?#|`gW+BzCtUs|8Sud@RzgDCr{Is` z!hwDP8u!)7#EAQJFN=c?V*T)>r<&K`6pRUHL1t~xBTxuBHVo`)xN1(fzq!LoG1(?( z4w4iB%=M!HSV5u zu`2bsfnIRhgHM~<31e3ulsGd<<_gLiY(U}2G%{Z~a1Y!DXoDE+C`OwBv`I6=5&?Dx zr?>|K++s#awAw3JZ+J)=0Pd!Ly4#Ay%LoXdVxSW62Gt;%BjCn)@vHH*kI4*9@WSgT8+g&;p zI-|cTab$&ZVvBj>lmkufD$OTtU ztpQk!w=DJMR;|ji2ii`Wo)_c2@2t&a+ce#oafYhnV7QnZ8f#dMuws&7Hw+HqUML2> z!c8@RFo{jq7q3j=K#xo&(rduU8Yyy)fhGlyz~&djtpA!5#rM6_LN(x$B}#RcdRE+) zgg+KWQC&fBVbU|)HqV-sRi zOW~%-O+mm^ui+xiu=ndngJCJTp)HCP0!tC;_N z-+w07-K<@`ka!vcii0emJ(=0%u~ms6c95mytzQQc9TT@7a+4>WtlhBMPqxWT#y+k$ z5xp$uHpT51;R10~--?J7X$V0Lf3J(>fZi}r1uLVH5F<794FC2N^k{89iBD>x-2cv8#Xn?-5r{Yi7gdSu|2nftz_@PYIv^F%- z^1RZ_#30>{tmf75xyOEKB#tw^B;V}gskH;FBY7Jdwc@nVRqrvd4bk+4*>et}X>y6} zyV+Qaq{%u#13Cw$rWP7|K}6EZR+Exkla~2uEWcV2eR&RHDX{vRfpMlrRnvnn_XCWUa$*B;3N{#)Q1L(iCR6WTDQ82CISfu;4Yk2U~1UK zpilgPhdY2UvOjIYM%n} z1p1QV`E9SDf*Kd4+^ou@A8KM~4+6IhJ`md3XnRY!kl+^$&oy_Jk}%&lP$RwFqC=Dl zf5GuDEy{c!+Bk=q>At6 zz1{B1j@E!P4Jq`l>-T{ zpc4(8a-wE7K>b>b!zf+)6+s$HP4~?M2)MhD<9;VoPJ5ohHQ;Ql2 z6GFezH`B=FM$+|O!$wFC)E&_e!7!oy3hz1qaDu#oL3czkn5ewa;P2V$QYAan2`D<| z3y_Vd@f!{N_7fu6a}-5=7i2WBS_Y3E-K(+=9jf5uXf+ye&)i&5YjI#Oj`g zl^0ll(6Z_6q6~u__5c_g@ud`irT7PVaJ@idSPnjwp%4ge!8AH>SXh=1Yb@$N35MsleP+ zj|(IHPF*n&9Pk?Hf-9H$L11FwDYlpBUG0DZtdmi5z?Fzuvvs0I1Zr!A&5PX?k7RM@ z)O+rRjY{!e-ED)ym)UF@>anJQuYf@N+5R=G?a`=hxe!`2>To@02$g6F%#^2_heUEY z!#W|mpbR7kl^eKMZnCbOUgm?(Sxxnh&&kcOH7mM?-AgjHN63tZZVop@2t)x`DHVe1 zbD!K}U<6Gn4OmAcoYJHEpq6q zkxVvy6K|SDu;36FoUto8tPYTTM8Ab&*NAF{nNU(5`Uj2C1Kh?wtRztE$47u@G`TE#2KM>#qqRS(2xx^p)L-F zvIMXCQ)b@nNvTED)~zPG#p2BAUC`*8 zyakSCE$5LXMoDS^Tq6c8@75zI)l0<6>@1cj;mzrVV@d?j<1rWtm%8)#wzrVhd7hH! z;3=Pm}pZ>0bxYt&O`$F$_0%QP$2LM!-bl;h6qHe z2E4OG20}lBohbrP&SDMJtI;I=tNPkHuMMKU%}$I0X*FQLo&&&O-PNkk5sXHC&ps}z z-x^8E`+|T=NW@J5ylP=_01c>F3Is!L zs*KgzmIzkg*Y+!in^d-u%a_b{Fj|06Ub>t;_ggh?+lf3egK3#l`IFMZ)v-#m*iXkN zZp#H;eutWW4WajoNFy=Dd#@cLlzZ68X>CxK7s(FlZ?__fx?k&Ea|5F$PXkg-v0jas zawOt%KWjmk-*>rU+saV=wBpmGT2P*PIOTCu(-E(N?q?UIZ9qXdGC z>LwzQ$sqn~P(2baG)n!LyR-==Bi$;i+@0~fb*P6_EBUC@f%ZYZnH#RVwncOuXZrZ< zs4)kePBk@bHUFk0#f&wA^S8pg=*wazOF|i%WfO>^?fdACbMF(ZMmboNOVS$5){}ND zs@_lp;IdDCv5idt1p7Uf?vVpG%`OU~kH?MFq!~>B*<`{4OFM0YHY3m6s4Z$FR*xmA zOzbCA=9L^~I!KB6cL8j58g)Wq!vKdyO1vUR;07c| zN7=UqBA1d@L08MyoG{;!pPJ0ZK2S4I(6b!!avCOC>Rn*v_?9i$Fk%!z&lXd;T$Vohi*r7D7x`pM62rYV1%%#zkLyAZGEbP z5#%#C=~&OtQJEm203;jSf4h-tMWO@cc|!>iK;&mMf8$QZ5wQrRb46{B!TB>Y)ksE8 z2maOyDn1K$$)OuS)s-IwQrWNIpkN{ZQwmLsb3S?FZEQl|zctPuKX7v=5VbM7iV(rO zj{ulycMSj)`ehK@_iX|o1;(PTRsYVJG^)>9(3!!_D&cE`5N2X148pL8_=p!|2__rl z06wdpl{2yLig@;@)e2}zIiSA*!K{=>PaK(1;Ff)JZKnDO z4=td5s<97^&Pj1);hL1&1@;=aXbncG=o#G#@zQqFQVnHv21*2@X;QP=d__8__0fZz zp_pOq0sjp3VU#5C0eT~rC3p67horx?;nM9>;QOU!c=sz)2M}yGD6G?j;|JA^VoX$pGq&#?- zHToNno*ofLHS!|mpzg%hC7TMEJD4u}8r(5fA53#vpX5Z)`(|UN`T(yf*HOh?_ga)W72zYWho`=W9(j3DYXhRA0Jx{2@~H@mQJeL>sA!8f)Qg#ndFh@fpPB+t`GT2fitUc>KUE z6s&dceVvskQmtfsnve}rwAO#cksxBxY3-}io){=3x2UdHP6r3=)`@%@+AH_jX;NSm zH2AF4K?gl}UuBUelg`8w%WXqs@52p*b@f#P~rcUs#L z6G!l|iC)R(h*DQz)WTD2(&yNq`jDKFIu66h&ogx?TNI^&fQrOM`x}daJ&U55(3EME zP__YWwHApATF6HGO~{qx>Lcz-Ka66pODy3{jLZp zP!M@h0%(zEl)d$pEp4Ibs$o1;KyUS=P~zA(6*G(U3|PnrY{e+?D+5P8bC&>Z%BC&C zyri`)lvk!efjW?*+KqKT^Z_MQw(IBIG{8We&~!!texy=C4?K$Y#SI?e!v5)+;?`?b zvthV7(hX+y$>cVMK=CMWOet*M_h+A(10X|{VA&SAxp6i#NDZj@YE027%kOJ4Yg$Rn zP!r~~6Wu6Bv(a%UE`*$z6~*H~MDKwJFxD(EB|ON4g0gfb5%XY#JZUq81${UIdSK-< zijDG0vE?aigl7x!CO~$LPV+oAX-_vdoCjooa3FgL@J{-U5pBexP+)T-KmyOmD9mz+ zo6ErDMnk87wtp5g5M>auvY2R#2Wc8$U?{n%rbD7wqa*0&+iwq%7KU$VHHp`4B@75g zSEtOKODAPhgF&M9wt+^Vibp>yq#V&O3^qD6P>5M`MRCT<63OnXqU5|XtUFYc)aEo+ z+%im?Er25u*nM!Jb%#=kC0fKfVH9g-Z1l8Aq(v5Or3r=%^k*~TrJmhxP?$8K9D(Q< zj!B^2r+HSVNGUQ7W4=4-wmDQ7~tE!=> zM-Jq$h9=ayPn(I~bkhB=CE94%W(2SUWm^z@ci@^5atT9QuAJmS8HSvQL7unI{T5~_ z!w9P$EbwE%{M*;lkqoAycSK!kHXpqTlfn1G4LA_|T7Z87F0fB8SS)NNivc_jRsi;) z@uu>`G!IQ#nyNf8@B0N2Ip;|{u@NHCo@{+(8&=9tduZyWu^vM9R+T2f#kHlM7Sk!V z*z)m-{Yi@wg7Qu|DYguT!5As}HP4z{LN-uRa{Y>kxNw4{9x{{iilGc}Bc<=9hA2@D zM-B=fgnLFW-MDh`V^U^~MXWv`XMMl$GH`NdUXM@RusHRru2+_YwC`4VveVOU)HpX} z+}rVH(3fN~t%Fl|4PLNVsD0TY>pM6Y)&P8kMK+XG1+kKIs=$kY7?6}&hkn8$kR>MFI)5t=X{@T6G12ePnH+dCi3bC8$3`!E>&+2)A{M?MHO^{)Z64rkWV0s69WFI7gbYmp;=i9gOo<>a z0Vx_iY@{HyUpkxu!HS|fa1fAyE}upyJrFTK6PrjdL?ou$PjiQrP}LswQrhJTK@rQ& z&(wnvZ`gxSR?CO_Z#ZWTYj|YD03?@OZ9lBRjiwy3QVoL>GJr-%HWBqil5h$_=xG0F zc!3lr_c^IV!#9!cTKyPOpja>-*bVnMD@+%X!M6vdRX_bv!#J@cZ>KL()KJ4`t&heY z6f@Vr0}-Wa@J<1Z3bz%9*T9NI;>U;yxO+uzrr3^0+QoJn&oXS!Q&mkF>j)~GOeU-aVgfJ@HL)*bu6WwAaid5SjlOk;L zeOtK?VU1K|#ULMfWlc4lBrsjyXw1|`poyI~(PU}tY>--06x@z5NXDbqBiZOb9UOI>Uljf& zX1xcOzh!qNs=}L{=4w&&bCPu?x{X>|@$(uPl`Uz+zT>hk?EzJJuf$cRePJ+B67z3^ z_JG$bugIWUPefwt1B#~`T8#-6DhK9WbOv78%5t6BOTCexW0xJ#A9dIBoB_lVwB}B z1aJ1pvWy;p(5n3>Gx3l;b$e+#i)_AJmIO~fY)2#8UY~AgoWREo#hq^OPfqLS^#9i>yn*y^Y6V_L{dFz)W z?+BP((9#;bouu@lHWl&U!$tEZYgZ(S+eHUsSAADa0QL#?i`C~_PTYw11-ryRi$so# zOp3Arpt24&qT%$^80(tuPlEX9BfkQozhgtVh-&dw1$_GHd8YLjLAeODn&1-e}~yC`&DV+9J-sr{mDvZ9y)Mh8o3WYol*6s?f4N=B^@<+7u8 z5qKzI)xR^N4-s}pof0yorU8-zB|Ni&Y!UtjQ*mF>641eWI0RaYD*%ttXz&+{I*roT zkOPcb;Zzk?KY&w&GE!R~7@M;is!0Cz-Ke~&F1zS$+-@DPYJQ6A*G^Gie+;w7{8luVmby&6V zPd$PxrFRC)D;3W9fI6ua4uSZ{)(I83>1G1jH7dq;IF=e2&W;A&H8d2FXs}<0G;^?wPkwZ>ZbVm&nX) z(5NLq=E{NT*GM1{TvOj~!?G!Y)o1^XwClYGP-=#sDI4G5=843!-E_-r>dyd?FgQJ^ z(psBpNR1Mm;;Q5gOiIykOmcq=XL{g54D>Vw*}X??RmNi@Zesuz923Ybu&ZG(g6zhi zTaVm{pov!DP(}#Y^8FGKbRb4ID-K!=C#%5)WwLTZ*E=^RpXm91G&4|r6uPvxP(n$; z8(YGfa=t&H~PL2_PODWQZi==Wb_?X0vGtK4dLPDj$+bVg)XUx z^0YVCWTs}`Ja4Cx+e4KQhh49 zotSS0<`R0CjVK%Id-My{2x=lltBE%DW~OE9TRSnfrj}P4S&#btzUoMx@?L90{tV!@ zQj}Ya+eAH(wO{6rP{T~0hh^quKb~6V4O)wSNO0x~h>S?HQu@@fMllgJHi!y-_R8jt zn4s_Dj1pzyVvNeDAyOiJu|{v$#d8@LR@a0Q08^6Qk;ai+)_H2Pb)(jf2|bvBEThzY zK$K3QqKMA-`C$Tc8a8%_vXGqakxqrAKC$1{7`19WoiPgaHRqtK;zIb&r8V-lWg;K1 zLIo_!C-UUn(uCNnjVPr#hIdOteM2AQl#k{;25#li^~Ls&;LORU^?+?^Bd7+2D|LL- zjnt4ONjT2}N+t#nD>wiYn_w&o{WCNXT-!&jPlgWwrhkKQWu1t9P($-Igv!N}t}0E} zPu#>nB{l)+{(P?($p|}#%!FoI{;4U6y5dH$3T-{7nPbf?I?#?7&5d&rj2N1jHB5SW z*}-7uBG^wk;N&z%hpbVWD2;t`(MXw$V(BgS27_P0>PniKDjmTDHDAQWG&WV8GPe2lS#wH)k<4X5%s})E2V%F zNdB}LVI68fcuD%X!Hb-3qHj^pWVjK8D~(OM-78m$6Nsko7gJ>yNXaP%7n<{Aw_P6U z6NfykS^Dnk1+gE_WdhfKp-G3E>ZcN<)tMVUXXxbNZtrqj7JT6Ac`DtdhEaN zjL(d7?#+n0WJ?2YnoY9uo~q2qh$p_Dm>gueei%w74QrhpmU3fT@2>IFNS>}eUm+mP zsi{iRRU1Nzu%W<)c*OC20}c*!zE+Yum2NO8FIUay?QRf$ZHMv;8szKTuy$+;P>Bqk z$&f2V{_D&pda>Jjg$j@&RR@?gF^-_^273F&_@9$p6~MHXohk8+O@TV97W$T!Xz$#w zA|(~j^H<-{wlwzWjO|@!jRQKt6JXg`N3D!KJCGNDbpuZ??;4*^DMg3kV_*nk53S!J zK*{W%b?vh4$D7(IeOnD_XJ;161!atNSLbTk zdeS&xa^g!s7Fhe(*uamZEtt*d+RvlBX3Rs^=fry&sotYWFy#- zQ@sizmS;T=o$-|uTra%h8U%Dw7a$DPbPeiBC(X9H>}(hG1Mj@Pc4jEm^jX<9pu0j! z0yZ&P^&u7LUXB}PdcWjOWpNTIISa|axXaExDC$uP7OzioE>XPRCr(pD%nj$`Qv1r5 z9rybSpXD$sRP@xMMCKoTgHo9-a1MCD*sNMiVJ|1+k)!el#(5lT+6tzpOfRo0JuM14 zE3SzIP`lKA&kT!$o&)E6>Frl1_|JuQ|s~7|mVN?{a>3F9QV1kmo z^B!xxNevmDIq6~OWvG_Ga&A@)?Vdfm|2P({DuL22N7NB^=g421>-HxZC19$cgo>v3&MNNvhn780 zF(i%yUJH?>@Y@u1!YB=)&(%4}7T zk`6w8=7nUQo9;-v$Yna7V@;reF^&F;KefHY8@`51bKMN2rt0OdScv*2OkS6}p*OgP z;wh&J>kMaHG|UdlrddQ<*{=3jX*9sHA}zlfuQ`eGO_;SoIPqdzF7+K zvy5)#f6+wkDJ=`Sd0$%*MsY1X4wr=8gJYA|h%^fSrxT5xa7M%punkxbCbGP)`e=&d z8RJFV3iaAt|R3;}?)Cpn%b%qz|* zzY-9Q$m4ri^-&eo%hmC?ng+V3JCLY)ja^%h{;cf}wIw4u>);G#ptm^Z-4>v-I2g=0 zje;3{#hskiQ5=#E@Cc+k2HoGe&6yjN7u7y3o~0Ox3Wv&2dtS|cvD!x8_2 z@eVCc|Ii5~5>RrAouI@zSJQs|j$+QA3-~hiJ^6T@eX(}mU5Joa zm>bU9gtI2IlG6&@W{xhc`4eR&*eWt@>yb@Hx2&KmhN5hBq3rYUxJTt1|7>~S5GE}DK6`9I9sT@+cq_>h1OyS&vj75p2yHRY& z6n*RzHrzlAF%=qXVnO&loxuaZ%e2Z9yIcVuWCHq(l1q}TWyCX@h@ zGhrD=Xiz@mLn{DKpoCxVEEG3}k95}ghZdbl<(D(eD`AoBrr1>?8ewX4{4}WMO}*`K z0a?o?KkLx?!P1;s@a_G4&Pu8!BpbQ6f|F$N&5Gu%q}oCx>uk$AzoZT&^#T=O zGt+L~>P8`de<3-QGF8+|H-Qte!_JyH9Skd+3xte=W<<%S1M*CT@A3@{JTzJ?YzpS)4dE_6{3&x+LmAxd`~+@NWxsTyWXoY1wLFug=q+ezQ2$N zb6DFrUhQpXPuU^@VFzqtx-5Q*eRTWYuY1X%(W)PWqUBxqeO=PAx_I*I| zB5y3D<7(tXz1qWy#J#F66xZL<%;oqATs#Gg_#bpDB z)ub0$+@|203&|9SU^pc>`DMhj*<^lWrveA4M^ZK9==Pt7y#XpEv<8RV6<^+&*VUqfg61L9E6JjmX+oqWfBb;v~J!*X4EI&3Re%k=25vQ_|W zK$E|M)efs!21PvDE468jRR7DWkF4681vop79kj)zvFjQ3%jWQ9q1ro{9%$AqO4#HS z_TbW?Q%zrzvfp2bQAHMDCplVy-gDH?1V~CB?a*zmgHI#BmWSpb&;Gh<9gJpFJMWZJ zP_Uf7RL6U#LzYCYlV`-Gh3@N?x)}V$N%f6-{!Hb)E^)l+=vF`_dg+M|M7qB z760_hU;g~xe&*+)AL|bg#02)pCG5ZdX%bD*;d%P|4I;Y*DwgQ)Ly!CE2PS-WgQ4mL zTE~9>6L8B%e;?efGLruN@{JdoI0D&yyk6;szn}2$Q%?Tt1vnq#4^UwR?|;Dtc^g?K zFe>*O--Bw3zJ9)a=ixlp2E3l?+Qc4xByh18a5iWY;hH_(70%S2o?l)syibSsS?{)f zU}=$bK34t!^G1_8x!e~jH_ST(5@Gs+~GmHE2@3!we%pcjn?Jh7! zhGeUpj}^+K;BM4Q-Wp~Go-ZH&02BwCU2(SY^BYYn&~~?{L3d~A9lv0~s~KIsv4H;G zp^sR7m<56Q;05NBCwB4&f{Ye$Op%*thpeDYYP9fosNC=Y74=7Jh)?}Df{@i(AVSfj zEwZ1$*)m^)n;*zI*5GBr=&e37ztDMs+%0nr{JVwRq+OKS@vPc+9#*?h0sFPY2U|nC zU=C^$by%?N*G0^#v@OmLu;iG1oK*k$_48@AhIbLZpez@5{lK8Ax6^)RQu<3t6!`bG zAQkWSLX;kqELe#yO18%8WWw`JKH0e}pATVDH}c_=p(75##Q-i0cs_A?x%&kT{MXX> z`VwE`X~9jW40feo@Ck*=b{=mL#%9iji*J_^i%ArDT zZBHRq>gL#{`#h_xdw>e9O)k8rvhKGxf)erLC*QcEpnhO}*gApw1G(l;Lea~cP-G8l zq}*snJB$iUh-h1-+DKo+4Fm)25+f60JfnF$>!k^KhZVpH|9ZNEN`(&}v0P}pE-(Np-SAFzFb(+EE3Se5 zL4~fTeA9~NsL|Z;X)x-oGoW!)9Lqj@Y=QP~+M^cfP`jyG-_>cK>GBJHHa}T)plp7Yn)i`bGb`pO9`= z*kGTak_F@s*%l)IvyBQUJl%rsLO;UXYe0ABZK7LO?ukQdI(>9GE92`X!GKL#HXXJV zKB1p41nIE?&5RjLEgjtXpy}XVc8RMs9mV&e$fRV_mu;A%SD??8&HnM5#R?jO<%(#l zH&ILlz_)$p;Z*W`R})+_bpl)!%_h8XSv#ZJ?tJU7^Gpi#pCld_ML}Ws9z+=jq?i9fed+pDJCLv?R*V#PH$#ssr!#}c#M&b zy*I??aZ-{O2?Gq(nHWsFeuPF4Xe=}EZJ{_v=3tAa7Uu=wWQeZ4Pu2CorpnbZALVeER~bkavwWe|$J@zC^k9{-Abeb>8qjQP>!b{jvr1t1u+4Y{z;VKOjAped~x zhT4Fc1c|Gozt8#~s;)|vjN;kDlE9fgSvSle;A+AhF5QUd>Dph42Kq>xFgTymmDt1D z1{>w(oPxZrL5LM*3UYowhuL?#qe1$P(V_j~PV6bZi)F7PZjp1$Z1#*WyAdeCOy;go z8w9V zfL;_X?f&^&+0K|tgD#1aG!{Dp7dg)w1|~?iH5?LlYkb=I0aBlBLS;ZoJ3kVc?;9?% z_+ijMvH9ukXd+CsggTa8mZ+on>77%kjq@btJ?T7 z&Y~K9?Hd7@BimXC?Av!97T^R;y9;Vbwk!-I*~>VILBqei{6ZoOz72c+w7iaa|C!I_ zk^)!_B6h<@R^~f#4*0g{hO)|Kz4j$JJG2Z-j0}_1pL4&2m6qbaK-Ja=o|A<)s)Ss~ zFr*04LCN~K#a(RSf%mA?%!uP`P$fcWH;EZ%e80hJ5{h9*ZmsI&dG=0h zd~OqeJ*Ri!UEl@hvA9 zFo9M{$H^9RaNLFO#uKe%<6St5hQN*vuw$k;yCKm*C^{(6FA-J5iJ`oq3l^H+IY4qY zN^B^h6Rupt=l~Z?Ak$mVazBr{nqW$9@^EvWRp?coU~j>gou zS|vkCDog|jT zlN(52Mpi2vrev*bQvCh=P8@BrAMSeQoP>M1FcgY*fcKjkA_KFRGSZJhO2qT*2eo*o&idPqyu2!;^ z>_qYo1cjw)!ujmB3$ijd94q&nj0y!33``8x~sXIN*0RazAWipRW=)>e!ywvjxmp^GJmPPF?DoY-3kn1aJ$Gc$Rug@$p$K*b_54h=N{D-7X>A z1`&l>xDxl{m`1YMjVu z0GCppg3QAX8?*UA(J`ACqtJbqP2d%9w2Yl0KOYvstCw3Jg?|J-;5%u=AP%G$^*FQl z(PG7*q7g=?art@}UosZQ^VP})5W04$Y4GDqPahT|fM?rOFPz)6+P9uo(6e{lZ46b^ zvr*OAFN5YGm`P3z6i!M0bx~ykjvggv*Ne)qWrvcEg_6{-be!pTGm6R3v%kW5L305q zuyl5csH_TiFyB-1zD_lqpQ)*X^};@VWvXS5E5D57$*QXz<+rL*8H?qcB}zO^oi z09Egm$imrk2-5Frsi6q@+J0J;(|UO+3JIJ=y1ng_5Do>=VJJGSlhwHchWWNb9<;zf zQ~H6Avob8>{l=f)JKxYbTeV>PXmG#vu!1n)_L@za(9gacM`B*iDN0#L_+#&5P{k)k zXzOD)9jZaSZKi{Y9tm+7$Ut|-$#W1OM)I{G6#-6Liq!c7Mq-pV(=mKbFr(toc6|Th zbzcjdhw9qQ6=B)K0oO$_4Mc@hE4Q}nc*>-tVW4;G=)LqO5Yj*ZdYkh_WQz{Ox=SLo zrX&mq7^MhJ7H5sc(8_4IAag2_D40`MQq?VW`ZCy8-ikdyZ-Q(qAlum)O@5r65tg|Q z)cI>?MJJx~kAkhtWeyq;6rli;sZ~zm<9yjjXITYv5dTr|IVeJ`RPpYTX8cqM$1FF>=zU@14TAXltNmyyW$x?`pyCO?q7*<6M>j7}b zof1Kc=NLQL-P*I?UY(&mz`4DUzvJ9(+l_ zJ}igp8TKjdx>k>};eNja6b1-GsOBt!!cZ}Xh5CSQ0q#*Fe4)3xIm8(T2O-z0#SL*m zM+RSuv8h|d#fGqFc>n9t2C>N2+EXA0{Jdl!F-mR?f;PFT{GF?)Glm5+;8V{1doQ2s z1y(Te85ev_4K~qd}v^uv9Kck3;fA{@fY}8_fo+Eri;q+ zT)WZU;OR%#!I}qh!_S^RCsBZbrd&J_i6Hjf1&HKGubeP1Z_|bGaxIrX=ONf~FW3nC+Jyxo3gCAHn`J8M zjcVUCO^9iDo+~ zQVAh!loiy2NRlZ-V`7pvz>l+=$gV+$Y4jyE31CI!QZLuoFQd>?Sda#K4edl3y2L={ts471rZ;fUcElQE#pefp%uM8dW9b)JvTVljH znkde^uE+&fQPsM`u|oNiJZ`LLXD7>%P|mj?E-pz4V12W6;kfQ5s6K+107gd@0Cnzi zRHtF@4wjgOtzkwN`mDr^t1uBwUdFQ^jM0Vec1nECpri;_aeNNKq{58BLmL8Ig^Ul% zzH{i@56~P5f011Oi*$Ys2}yj^g>BJr4b8aYS#Kso-^zV zWCdtly84`F2^JkSfIw7<9z0(H!>t&aT}BbkY3W6$8IQwd#)wAkCuHI}4lbQT>hl~$ zE0q^kprevUj>*B4w{i)&q2pRyoh!181#3L^?6^_1Q=tBHQE+%hd+A0`&_+2HM0CVS zR4zpE1RXvgA+t7Y`b{fz*%D%hOUYl)KX4<0wioW}-2{qoc<#c<4t#NZ_L#>HYj|wi zQJJk3!1%q7>j%zmLL24HO~`JnUKj%mR;4=-atst`JRU`$ry~l4RhMH_C5S-2azqGf zy=#}8m4Bh5IZeC!G7$e4U59YSiFux1+H@gt$W=&{(e?)6jid0;H3Fu9-IgEgSrXteDIIRlg5e! zSW=+g-j!z+2F8r}-7`|RhU{{gW!Xs&^X9G_^X)M6tP za0Nz+q8-zh$?923F>jmod z&2%@vAyX0u=(#De#D_EFhdq1aem-J#hx|y%T0ZR5tV3M$)kj$(@^PlBeGfqTEvsr~ zo-W`BlC?E|({t+l0;|Gk3QW!+0gpp&#?@s<_M_Utr>>4VhPDbhU+P_QT=S<=SW9J~8v=I-ocfA4A89bk4@+o@fkXNe#0mfej~b~K|pCB=>LUH6;23C?4rGc$~-XG1~$ zR8+@oJ+MjRyxnu{`PNHI-w;jDd9g)=u_IQ_+(7=Xu8~LQGsMf@?h$NM)G*s2rCu&A zCUMlb8MR zK}f{{h_I2@MtJ<(qB@&T7wk?$MH^VL8lheL!Co$momp#({e1`NoW^&LG?9e`)1xVq z1c(9AK^cnhZzc3my96~IkCP)DHw>G}TAh1-r}nL<)h^9pn=j77EOu!dJ|8$E^{yJ< zbB<8bXVzLreR>>HHgbl#@H+bo98w08wvIro@ELOK2DBk>g?1)PWOwwJcX_viQ5ZJu z@AfE5w}^s199oBRc45>H-q+W!_~i_8K?cmceWZw4>&5UzY|(P#ue<{n56YGe-USU2 zsh|!Gq9r%^`;jAQuK{M;!YH;mXDHJ?Cw*=%HZQjj1b=wRgC)e}9TPR^e7Ri4_q>40 zGEMbilpn49KokLX+u<1E+j&C+MN*Eqb2m}@*3%5Vq31AHy_M(s?>^pjqVI(5+l$&T ziqlxJoZhhAbme!C1cF}9%#L(%@g+LeG%~dP_z35!qWxN{H16f>B}EgAN8rW=-XmE- zFP%8fPZwz9d8;2U9@Q({*sJYU-;l<^nwWs5?&=p&ctVn-vGR2G@(b)7kXHylafW#o zFf4{-d4yG?FiIAaqvFY*O*XrH#v$|5RT8*^l=jpCQ%>ot2JVarAonUt?=ESbJ4fy2 zlGLx<4w>s-vF#ogjPbZM(dZX;KYv(6<-1e&Jm0qR)fGUAq+8aXQ6!-cAx!U4&fb1{M>LJ_mzj z1&tAsrb>rBP+U)7_knJE*(T>2u%H*_dR`!9Fq?*{kIactw_r$?w9q1OVoE;J!MTE?_ZcH@jha6!oNzmZ)rW47INqD& zAp~|%HbMaP6)E0wp%glXdW?%SlEZ?MD@4Thq4qF-ii!gmPf!lQloyw?40QErhGo+o{!Hd*B#24fs{8$#tmjX&Vi+(Ryj)U7@NsUs zS%$a2iLsAP_D()3Gqtx56o?c2xt(jPKAgtY zObvEW_`Ws^i+#On4%yEOS!Q?ZQs|{_f5G)q8NChabW;D~>^HY>J+0UG!ahx*ad7Te zY4_U={u-7{nwQ!qaG~MY`BvQs!8K{12t1rSMz{OzQr>>yb9R5Uz4*0Iv!AC7qWy4K zfW$l6MlP5kEOkuKmYRj1)2TR6y)ygeDfZhZIK;Pafs4+iq`?BjiW?gS$2;Kjq~(iF zeTiV1jo&b=8D4|C!dE9bh>#v)L1OrYsm^@dsb<{6>6seoo-mFTxngIGC@U~ZqSpAF zqf_tj#_K84^x?ozam6+a^@|I>aQ5Jx&XnR3_J#`SJckzHoUylry)8Z?v=ynDrCXsD zw(r<_yu!HNcvYPYF}rc_>0>?!q^TRXVV#?T(CQ<=MrmgVoL(vpQJAlA!vPx7Xyb() z!1L8nqb*AXW>;2s7qe%Qw#UlPOB91$yf7Q4Y&-XL!X(N)X{fK~+lV zh6-Zysw;TlGO)P|V>!SJr_hF#x6$@NFNG9DZf);!sJ>?_P#WTd`_l!xK~Zmj?{05( zja6L{SFFWFn6wU{oyGY9kfqEC#vq3>i}@Xs6<$HoAz=gtVejYyWSwdCBsQbqCh7#( zz|VgCG%M(lAvZr&jL-U+2}A59|9T5K^8h?C`QC-CPS*iv9xP<1GV1f&L(9aQ8ierbqY8%4AefCS6M{gS^Azr`cQ&NIK`CLv5VoCkckVIKEH3 z)jnRZI5fC-(xHUj(eAB#g0WH(wArFCoza~do}K-rEzXJAw0E$MjbdTjO-Ei(?MQKs ziqc~Bdg+*TIyZHN0hI(1qmm+vG!U9Z)4G<`g6fN=JuH5m0L+QXxy0>y+hPo4u)QF( z8DB1ltE8#3w8AjJhLUbW*#(yO)j6)0TO@RWe*r5h(3;{Q7e6^hLCz(mm8zwm6kI)j zTGRR)ZV1bi}ro%F?ZrcW8kK8uv z7^2(e)|uEO5vhm>+J0k&P$-#C@Ex@_gyo1_yR(7+!Wl%@E-JA{gj#@QAxy@o^S>P_ zIDqs104dmO*e^Lzyf5NNl;MhW=u*(brtcCewt$0|MUN3_|W>_ zmoRap$7eT-4k!Evu zl#5!8!^?MrZ-3p|Vi#9I?4O`s<9G#xe(x*};F&w~;)-R6SLMcah20}tO=*^QM+7*y zp|mUt5M`Xrs#@0RW|E)=u%le+SDXhIY07XrA{dYk(dPs{wj`tHoEQSr3D=1`yGb{~ zZVu~55-CPFdepoWBG5Sdwjt~E2Iy(PV%vBuNeO!o41k+nv6ALxw)=u`H7bA~P#m1+ z9jD8=;&8xC%}oQden<54rxorc=yJ&-c}_>P;IWPPJnUnmXw>c=@jEt{B$kKP;yb(& znmYt>xHfgNlWmmTq4BDy%--kc>Cn4k+-twa2fYglxq!bAd%p$^qiKlc4T3s*`nSU+ zdC&Z=@N)4&w`@!*4#2!Lnd}i(vcj`ISQNJ7^cdyS#5DK;P{IyXw$&kJp(}v-YS|(u zoh*Ji1aDJQ_K8sU8W{pdK4Mo~J{#nEubs1s7-tt)fI)WJtQTevEi!h?HPrXnrWp?` zG9UJhrZa2vnh0~P*STzz*If^4;w`pNp`I~xB#q+2NK@3fHgca5IGR2ioS4ilq^L_n zb7mw7L(PHuvN#WKzh42_Zw!vlIFZ4fYoo(WX!Tji;q#}(GQmIzKI8{&Yt}TKHK-{c z393PaRvo=Qy;+OY0>Gqf#@r=PT1QyHR(TqCWlh=-Z+ug z&t9f~A6Q;14BuYzs*X@7eHI?$@jd9wy6xO4CnH17^$Wbg0}on+I^-MDe3&)t)axt= z&|zv86#$j*m$IOHB{0(evX8+HDr#%Wg>(eFVLL9|-d;6U7)NzK%Z6d>RXzP^Qm=*j zD0|L8N3?ydVc>i0ir0{sZy>R6QF9hH!W)?8H$Sr{XP`JzaYn#;AS2VgGq?|$r8QWH zHDRGDURtc#o59=al7%>HBJB^yK;88q zulXkYQ0^91RdnFSy$pnpN`5V*@NV8zq*pV}SmQOpQ*!w>HVN`c5Y9 z3yrh$d7KFNEg@caU5Yo)%8KlCZt&_;>khqU0A@V5zS*PU2zaRLHfkSJ=yq(U03r{O z6JfEdAE@3vZ4eT!8sT-oZY9Q?I)q*y`x86>PSbI%n~aT8XN>hlsDcu6aX93H7+q0C z>QD+X(;x)faRz#LEx+>6{33TfKI~Q7tO*`!;;6;G4n7x%symFYUP?b7H?nTu1NCDV z{hBn!Qc_{zxF?I{9wiH=N1?57^5OGOU*ZevgE*C~Vz(!mGKvU_<%_>of%|UfQFrJ`kRF)V4H`yXe03#KWFM$Yg8Z zlE-?d(Sn@|co;2!8_`Nw#-iT&*6!zvW8T8`w>3oY@OkAL-*K0qG?khCt^}nt>YqD< zCg`MIL>e}JMBdWN*%_F**aS2Hu(u}w3mv|9F83(MgiV)Y2R?XK8llD z$)r?mgt%LUxJ!Eyl@lLpw+#!+`UwweyeDRCmfsy!m&W(CW;7qhpjv5 zmyD;>$D16j%kEhZDZ|`ifx&|~RkrQCKb}LP6S;49wfyjj>+KgqeN{Bv$C~3u5%}p% z>yhZuv&XgK7o5GjYawD-Mrq^A6p4r$VOlkmJdgr)a?4VdxA7YWZ9;`IG0d!h&mq!~ zsKVZ+XHkWWLDXFfalXZLxG!O$;!d;NTDl>E@aboWB@x`uYYO*yjOuahZWa9ymkJtK z4_uW|KbQr6sL`XiE4J8|ONS|XEw4AV6(+Qibk~z#4?6F6A04ggS&edv*lJ#Xo4Di@ z6qoQpVQHJwT%fJHiY*b0hW(VVtN9k%(2p}USSkY@%Z#E#!H?n>uSgDM9|i^k9`xdN zgS4D@jEEC@mC8OFH$d6Ldz6Z6ciJ=Y;-tk5s`pY-#sDKAq8PVCSHgNatB(S=TZ%sR z1)W~JNw^MCF3Mb(gJJ!J9^Nah)O!B3wrC^xNO%#tYgs+&&G zW=eHq&~iixN=#PdTj^t++a=EAMovCekQ^1pdB&#m^do1e+1ms52CA$Dg>`kA!W+`* zjrl^7=v+gI*Kd5_j=)e{xy>Ycg<)SnLf?EdVLa|r2--lk_V4iuX5h1K-eW|J`1Y*H zB{jc+5QWMjfZHn7*(!8$-F^aF5Q(5kpZFV2ts{4@m^+5Z#-W%aqX(0{b0Z;2*MsJj z+;RNqy+fT*Sn&my225w#V>>oQlS_RkGbIYvGH3@>Fu4mF#AK=vl(t3_7}wD?8cQwV zf^+V%+!*9p-@dE>SLjmm(SNBI{L%f)hy<#Mz(+X)(}mT=zV6nZL;YrSc4J1C z4Z6VDJ;%2g{aW1Ue*vRkG==xBwkT&3EV@FN-O*%3(36G`jUt`^y3SrBU%2Hwtqa#K z;Udpxx#RoR05F%9ZdH8_wx*xBE-9r!JmQ!i8Y4>tRg+j$mkc_yajvleOczOYScw^@ zncI0r6(%1?#Q>qZ`*Z<^I$!h(^@^S6tP>Ici-JT|bZ#)%V5bQRcSucm;87Q0d(wYl z0Wu<&&_$jY#MIjHC;fV0L2ik9hJzW6O9MW5luNNdGa#`P&k`%5r+Su=m$J4e*)Mp~ z-ls-+dc%S>wz`chc8ABY)%`}`H-&y^!$$qhO%xKSny`Z((@V_cy+@ZVT;%O3z^J#l z#&WsbvG)bT?U@R9tAt6T2ErG>7O+;cVuu97y!Xv?C|6~lMy4@5f<$5$b|ZguVIwF% zE{vRrJ@bZu2};;E^r08NZ>Z~qON~{5lbE-(oH_PSk}Jl5c*T9{Y;GilS2`?^hBO1- zy59$b(zcH5iL1Mvwr_lTK(E%7!|d^UKM~!usH)=|E0~bq`gZ=oEbRZMBnesU`c^{QedT8(uLyX__(*FoWJ@dlh+ zF=n!AMb2ssFMg!6c1u`AT45+wZdC4-eI|3}6Er7%27V@095jhC8R+8$EY2@Z0PN-Q zwW*Z5W@HoGL>48Ub!l*lU%ZWWQ6oHe<)Zje;0IzJ~l z=$m6{r9f*Q$^@ETF9-2vsxe{^H9fXmFp?~J&f>)6*|r;81}6~mJ43JY5;Y})h-1}A zJf|FNo-@hC?;A0pF$l|GCkA44Qu|rY@noyp1eiiG`?i)?)DSb0Z{<6^ zQDeeWZ=}=#;JdEJrwx{Y7>^fl%W^9cFAgSdfABI zfb8*k82N(t#bXi@_rZjkfMVes<>x?if&R;U?*!Ia7naf9Jr0naGb>HaiQ-={T&>+& zx>(NgoZ5vy0;0L}E$mV${$v3-fLAjKr|c0`HtZX;Ivq*0om6ehZ!ZOz1oy4jn>LxqmNMlgvjKEyEnk1ttV;Ib+`G<*hF?-PF2hQVioK zC7%qd0S!Qaj`kSp@7+Y*?u3FX&8-0?c4O5Y1jC~*E*BOD3}pj}`|0*414=mKOX_sHiOC%&AhD|QyaBPM2K54mi<{-L(OqiJ^B;!W34+M#%pbV9;f zAq4~BM4f!MA)q%Px%qrtc)%h3gVmcvtQe2gF}fLfXdZOa=&^wh7lx9c0~R5lxP|oX5;aotN<|qmf`5n%}2~IwfRRHMU~9j;QQwg0CLhloN86 z)REP?BqyE4{!Pnp5LBg$+jKr^a-l3_#J=A6`sa>JtbVyXK3xVxk%h?JDWj37Eeuyhj@WN)*ZFcv)u#1G-OAJ2>24OR1REP}IIJ|B?znK$ zI=Vr4b)s~Kxi}#+%bVfGu9OJ>^nt^^n-VrgPR9jP$8wTc$DY$crWjbahVlYAI#oxB z;|odZBII5~bk9*VgdSn6-M}nJ#k*0%B@b;$^`<3rZ4Sbe^SUG^rE2lb&+6SP$Kcuvcp4BDMRd%wsmMEyj=LY*^hqy*V4g zC1Tt*YMYI^1ZuB^hJwXK;9B*w0V4tR2vGEi3E*4P{AVS{bJNXFoK?B0(0oQ1{dfVN zm%Zhf7JtxZsJ9%Ts9z5Srif`nvEX@4748k2-XW|V}l^X!Dm-(QITke=K*wc&Ea7DAd0Muc8j>Pi{ zv$J$%9G71L5nEGW71o1ldi`w3h`8z;vaIW(NuoILIzf)M)D5SIeiDw(ZDC<5>?hXI zi;C2l2N7MpQ`FnGxrZcGIuc&3g^m+|t z7tH6jN68kL$PRUXon?uu(i^fm?s77(D*Ym_!{RyklykF4Yb3Dt<0*-8{t`i%COX$W z_Wn9L?G_-ezWdW0o)C?Cf*zY$4n5YcMoJ)M=DP(X=fY7o&b}Ev4aufCMREIR#Wd(5 zmJ6lz@d80CTe^J!vh6Bnu0uUEaK5xQT7w9?fCULZb{FgK290WnjV!jtCOIL#GH_Ra>SM zWnl2(X_!5|-Xt7A${UFzLX=?QN%GC;LO=P&Rw7{`-;@NdgBS(0?>Cyxfb!+;VT~H} z%+-wLFm1R4_$YQ^)Pv7Nw&#am=7W72PSb^mu2o1G^mqZ+zS`~g?0HLY2`R6IF8`Uv zPBgQLxwzd|(y?ry4>eFmzffTqRVnQW?d6_?d0ERFvT@prK0PcgO7sS7Rl9~p&V1?| z+%((t5zJ`$0#B1G7h`rvLMWffM{>ePgc0ouA~ZRxAi|;6c4J-M*|2iD&R8@=DSD?FK##v|Nd?q?a`MLiXqk!j61n_{e`ado|o*WOwNN=BAn+ z&-QHVc;6o{AXBssGEJQX5||<|T)DOTN7Obgh!2vzg=|-V_*9>Ftq4OV$Iv3}=lu`Z z?KY}I=aZluVCiKr)L4f~s6t3$2+aMa%dE6U7}ob-!xNx z>Zt(Ld73)lG`d+Z`>SPPigZ|@L|g7_j^XPE16KhwXX$Va6R`Cjo8z@OL3##05N23w z`Cd6WBu07}>LJFC2ZWj-Vd_k&RJC5amFPV8jjgElVDMU=VGo;K8{B{nxuXK@ zJQc8xy56ZN!Yg56ZYjXq)3shWtmY_SRMx+1kDMFyEYNh6#?Vq&-^AeTjXL8ptNgAQ zG41-GZVKLAh|S$MM-`EqkOKt$dJU{-q8e%!F|et&PCg}hj&i9hmIGU}1c?T`u$r~9 z=1L5t5esz*QyAb312_y|96E~Do?nJ-sl8idx6T_{IqJW)|McmeR6S$@SaE=~foq?J z&@F@<1f^hRsn7Vd_@YAsbe)zqwYsmf1o>L8(-gRc8SjdonYNq8>;PzlhOjOKMgmMq zu3BE_^xElgBfTt`Gm4W&`~6+UdN#Z50`a+u7Ir!l2^b0(8FecbMU|TadxV|seVpF7 zB8mapEjlYHQv~gkO?~5GQBXI;rf%(T^ni=V3`{}l%JkyXq2ZOv^+8w&pN0~QG-P<3 z|EF!$d{7V~y7K7)(Us;fzkF^mT`J5is#W0nM|KLyrI>V|5+clSvY6R*pCXFCwKnXb zPz(~Of&yKdIHU9tyaZ=HZ64@IbHK)zDG`h_)>R+N;OXuv%0aF-?mlKdwUy><7`PI| zU?O6AI39vr78o|Y6p30mrw~LGh}qUhRZCV#!3M>Gk#tNf)!;=+mVQ8Hnw)>&i;wPD z{Bi~Yys-v4&^9?G`r}<`ozJ83yw3>4sT6?d%J~vgUiAg-VR%fJ*T>S4^d_AF|XK-qQuDY`5S$dIxGB`+bLh zRkc(unS;*`-H_~IMyI^RW4rk-VG(0jYPvA63FB0eT8&>nI@AL8cwbg81S$GvFL;C* z?Kw@ase~161J-w}BaAqkniBxglq%5kUL zVkzP6htEsQ(Kv;uY0l&WVh=k+0n^TRKZrS+mwHA*X=LBkH}X!_wS~5=v*ciiU>z*v zv-T&P1?LM`MGZG+jm&*pMmVXdDm0%^QnUo(0fmlSdBB7`=GSxi-b-xJA&ZRj^97gk^l{YHSG$K(2KWT2SuOHEp~d%bCEukfS6$U zdN+J-NEj;Eu`e;H#pF~R);m$;kdx~=hu3M|V>Jsi76MKvRI;aPZy|;-B;`U8o>CJdTq~iENJAM1m!rK z@_JKt?Is$As9V@dzF*eF`oLU8M<49BaI>qb51u|xU)k>LVboV&~rA@E0fpha?SJ#@^d3%r2SCuJ3WRgkSi3kYl_QucI#r~`9aKD69r zhyhs;<6R^DkDM8EyUthEyoKxKYk27C^KxYY54WMU4WWgF;*8vsfzPi&gkim@YnCw3 zs-S~&%8Xo{A!dBJt=OVAID4C-K#awo{){0}22h09lvE+k^BZ{t+v)qia5Zwe?+~kV zcYcN43@Ih$RUq-PZmI5m7_KlM>-J^cS~FcCd91WdXVoWRI)l|wHJuaF5~Txqt3*A^ zJaOUJXH&EobQ;Lb-IpM28ng9$_}9Zw+T#VHp^OMU-5Lz-o=etc`wh0_j+|&bl2s^Y zEoFAx4|a+d{`7g)QV@;S`G61H{06u+H*qx1k}P_``jAjXdlVS~_F&Iy@4G1c+zO1Y z#s1>7g6> z<{P5RO#{1elY-eK*Xbm5>pm3mWwj5^$h^#Ow!5>8Vg%nXqaj4aHG3KLazZL8!cDX>4eXiPv z74kOPD-YCazCeJ$q*k=S-8U*|g6@lJ51b&p=u4y89DTXB(5C?tefjYD_cEuFfg`;QLWy%XH?dX=CZMca01PPo~hZ;q>ss^fKZKd+Zhdw880OhJv z9o;|<>5p4nuyXF9rh5Af_@;!pdQl$0p`NSKiaUTsB0u{kfeUul1&k*Kgq4}c5f30f zGjjkz@0*B)(coZ&&L_ss-$3jqv{8?A!vL*C;Faqp^AjGS$MS8MAZ(+|#> zlCfY!BV}8kFW|lu`#P@lrdegcb};n#v$%(8k_y#6sVN0RWXuL~ByhU2IKxI6-arT9 zdU^TtPQ9|=q5ZXCQ#q->sScZ;;I5+%_*4megwPCGjceD6+HisSSTDP#b^#LZ^~nrJ z)*9wIfgc{G2VwN^GP4hO!9QQ9=}mJ}OR~dAY;u{%b>y; z>~>25%DKhuWFd$s%r|e`8`~F}mmad%o*>70-Sa`icQ>aC<;^}|F_lDEhI`gcL?`%s z0do=AtL~}qT3#4AMK1vO#kz`v@GWQ?FYN$Il;PgjI_<^xP> z&qWja4%1+J+nwnRR2Q3I^yS$mm|}U5@~G|X`ST2JVZL_GT94%n&R`4*ZI-!ejKuM( zKfh5RzHHXaxxy!ex6fz}cs^8RIDDw?=KUx$Xs@?h&mzw^DA}k=tL1#b=RNf^gPfy> znuz6KNOr=RFZ@}2y=71wLDx2ng+PEHArJ@>BuKCz3C`jkBta5vkpRKnWwD^a6Ev{6 z1}C^{upoZ^M1yPkUM{V`S3=bSlHGt=GE-RJamrIh;oIeYW=S+=+~ z-OK9hJ(3KixmRW3tP1iAv>S?qi?tmToVN47BsL`bLUIE<^;G9gfAa}N+!#EoUGE{! zTY|b9JSzFft4g4QX9!I{#8E4KY7}4BkSC@P0aQJ^WMVR4?z=;}ln~(T*_t75d%-Wya))4#Z9T zR{v=G2%ss<4&0_4oKEKtsDI}5XxcxrzJs;HTB{9qb;b3_BKl8sn8RK34ns zbW_suaGZsoM=qgnsq-o1&F%6O8t#{Sp3$4Y&iK`H$QXq$pe}|JQg0cG{OP3}_e9p} zPuP|~?9GYf1A~qphPe*bA6D-X`wzfTnY65d!5!u&>V6PiAa-MZ?2fN@apx1qr^w#Y zQKe3SQon;MKHU7op0=mp5XUrH_UMMGMS0QR2K}fr-pj*J z2B%8_9((mELa)k+Qljz=<>Dz&ckPIW=*b z`bk4tXG;;z5T~jOlAZdxtzDe+N$~4VYAvHhqUJI=?Ggjr-0K$J`#jut zb8*hKVa(g^GI2_;{bk`=FOX?pwI?j(P#0O8wZ4~(TsT0sYg?U(WoJ=# z)@-x+cWTWBwqLDSfdo%*We3d7k}YL;q_c$S*RM{lk3N(yKCRJ?I z6XCMnxXTuG2ZeYD8GM_31!=qv!HY>++1lGNNuEc}Bn$8LzTWIHW{g|74%Dj0qi~;j z#IqONV8HYmDCj`oEuoMOh@n?aXiyVrfjYhyQPxxr3Qzx06u1>gr$mf52W8 zmretu!NfiEq!lsT!{T>0ZR;kCW=K*NJC%x?yxQCO{jjWSiFpj~vF=E^?}NX5C|;?t z8!<5;e@L>Hp5va2c@Xe@!1V2~3%pM@#}RE2QbIR*Orr6?60A~UytZFbV| zS?t|kU$E$J+&?XCS~bzLNk0nBAJr)`xtyz}_K-e|d0D=P<7DhVruC!1G7X* z>^p<{mb9`X2@I*XyQG55SYO!~;(dYn8NV<&Oy|uekWqdx>DC^He8VJ=WY@7<(SrB( zg+;)@vy7{OC;@gVb~tZR$A#=+dxxLf%fE)(Bol9?8`&OpS6PqA@1ve_5+X;6S}wWr z-?2%2-tL315a4+HU>FHIF85odZ4%HT3to5J{>-irt}Ac!!K-T z-xMD`|N0TG9=bVoL%~p7dq>z4ovUq-v5+e>Ny&NDQG@JSq!Hr;jfc2NV@jn(_-)2q zjk2)+O0gg;cfo69#8_S-Wj(H}UdJJ>P z9)fvbRi)AjlfR2(Q+N$c-O|2 zQqe3XXtZM?!jf~ed980^40JJndUYlj2s$71dU8)u|9~zU*GzN;-OrH`GZJ;y5i?0S zDqwlDqpLbMVf+6Z@6v5}^J;6;{t?ZRzPPpQzA0SD(en69D{v&uU+=;MLN2=mqwWCc z1!gRK7=XRp0Y2@cZM;;-CwJ#x=i>)Zm;o1L%mc$wxAK?l(cq2-FPbA z-o1Y>Q|B(@TZPTs&`nFUCYWK23d~`8c!h$9{b3y>XPP+(oAanN%!3efm54>vU~j=# zI2MH(1EA1r=;y97!EvC=VF3_g4}8G9kO)F2SA(vA!AJqXJP>ozCW5^IW6l8B?%q2% z@ZSqmT1flz%`f=K)T3Yvtbo8WacY>@tV}fU3|3C&`+5XF0A7BwfSxg)|Cee>C6e`Giy6|~Z6=SMf?PdWL1xYc}h zNRNx1S2n-Z+_!pmYK!k9MK=z<0350F%j#X5$4Ak(HhFOd8Udb0j7vgBL!bOKYNSQ9 zJxyQ%+6i&FDB9^IvTysB);JfkZ-0N|3~1GS<*51T?cK0uB73(<*|MF01-82(9Th-+ zlL8KGN$+mjUU(j6fnTTm=@M|N(ykVcdgS}PL22Qucj_O5FQT@UYtVPdPR@2UZJCt` z;HTmFObP0tkbKS_+7mKo+ldSd-X7YZ(#tQBE{%U$a>(olx*Brsy*H(T1KV=YhFyn- zU(MJxiTX7wZ&aP;6ZF467z$Ztdq2^VEyeWByJ0O6P5bXZH$VVza9kIOyBifohR&Fd z|L$)cy&?CG0-g7so~M#0Z~5FtV%Ms!oebEk1m^pyI z2te}U0TmO@S-F>c!biJ{Xw_Cj_MKUz`FlGZy#Div_>fxB0#d^W1nNf8!m{zB%T^>Rdm<9uQ#@XBiAWUK>bdc*J=jM(cAS zj1%|yJI#oy2_O#YD?xQYrZWcd6FTIfx`i}SqBA+}aC#rcIT+I=H3y zZL7WgBWVLdiq5hjM(lhvsh@%2d%?i#$waFp1m3lIvxxs=NaE_Q$;kr|lsjG-OHVxqPI_ex3}p@p9`c}0 z&~Hvs9EAt5$WEOo1ZS^O_dUW>W(?)0k!C3(8z6n!q?RNT-F_E?!T(%U`}NuCWL?$M z+73UH-df?DJjH)Ww^om6{c$JrH^(jPS$$N|pNO-WC!-~~%UoQ{4%+={X`HH| zWh{~{fJWC7)THXGR8o(LbRg zWNv`5cTX_o69%hUZv;-R(ml{^Z$vl#ma z_V^!D0jYno_v441{k)Ra38Pq>PZE5JX5$TKF=F9nc@mpn_fPaLoCN=FMG@HRlMtj) z@p{r30YY^OmTwE^!TE2Tl&+ zA#^#FvUSqmA)~H~rZrty&_~?H zMKrA=1YTOjg5DHHv1+~Q$wg1>cz#Y7Md*?KT^PX-mahay?D!;MaO7HKGo*hG_~kwx zxTN0#4z=w`Wjl+Ism}RdGz@nW zW@`NW@8VmV^ggG!cJaj9LYjZfKi!zgI&Py*NiWkli@^h~nnP zq0Y*CE<9ow7t)e}1L;W&C$9e}u3AlTDnFH>_q&4=CL3~Kt&z$tyZUMsX8uYp=6w_R z(=)u)L;HXa{p5QN^sD^6RrH3xDfsB8!%Uv38Zis_SO37YP2+zCN?6~l%{INf!(Fha zUFU2MoKJdc-fqbs_skuCka-1PM4#>q{zg5ZYDr9+|IP2nTa}|S{y|-z0NvY9V;13D z28IFonx-OGxHHePLUra@2LcEM!w>xG`Kft4bQB3I9#q?{YZA*Qoo0sQ^LY+P@l?nY z-Ccc78+bt27CAKb$0<_FWYwOIcy)+2dx=5dF$6)8&N|=x(T-wwBb09wp%dpaAYD+W zd@50$Z#NDTQ!<*VGkPW~ypdI?-SV5eZaD-B74%Px*Gmd8ecG85mE~B;x%T(%&yd7# zW|Lzp)%q?LJ5K$N=)^aUG7&X(2A|+Gq4t&p##xtq_enesm&PBJptbVK8rx0gZx_=t z4?AltIToU#cT}h6>&cJm+{a`a6BdT)G@YOJ=yZv?L4_i!h{u_^)(t{krjkG93?f~d zmHSRFf$aVE#7j@aj{7sJ{X?m7(xq_8I$t?@Z2n>jko-wLnO%9n5jD1UX7xwyOY)g`z6ygIkA z|3G6Z#DTl|c4CfdQ-M}(L2}#v`r3PS$OSD6)k<%it;oObKcxBYU>f+rcs{Wj`sFja zw$=2`Sb4x})ARab^{;y5NszN~`Tow;$yRpmhm--{N3DkXZjJ6o6IpwHV)$tw7%a$xh*HE8tN@6EgC7ia^N zIa}~lEVJ_fx$#9|JY1ItW6p-jTLHb5%v)X$Wi+W>dAMW4`TfLc`ZJf-NM2w1#u4CdxAyU+vmI=>rs%mtz3Dc*_Nk>+jC(x8S+|Hi z@9XM~RvWMPEEu6UP`7sDf}!JRdd>A4UELFf*SpI9uCX`C)ivx+NHl%!*}-k4SRtfY zdXOj2Z~av1-B$SdRB;|fznxbJ&VN0}2x0UmOCTXzk~G{HHN`s)0N9Kf`f zoB-{KyHNl0_2^{+@f7o{h`w*`yWGV1X2nC@@Gp$>g=z}Z&2!G3yT9qc^xm&j%$L`E zb9V-JTyqOPOmo*j}*b4i<*!@K|0z zUFd0b1KK6ELB2E~s?=k_%s4go59`W1+{?D2n-T$iK_LrL`l`w}Xn2%yNcD}x8pi>= zNvB6gAY>3sKpX-kRv{MQ9tl;v$Ov(&y%1-S`E>Cii;Ykf#%Xb;K?TY>0pJg~=I*q5 z#X*PM97Vq=H}<&U_{{C@4aTJfI<0MYI(NFKAH_0uU@nzKLo5D}*}2k@=f5iVByJMK2AOf` zTOfUu&1FK%_rK2SJ)xY|d*oar28zr{ya#}3Q1g5I9vZfoY*`fr7KD8@W%YjCnLhS zjc7Go%VVs_gZ96>YSYVx-E8z;Lo|2k`Wc6PE#~qs5{+}RL#lOXOB(10wu_2r1f=;u zY-wfqbp9I8+qZ~(2ugi5SybLonwHLE%`>z()nEh-iu)M{jqpn;jgW7r#W1c1^2Lz4 zV2K{-dqkrhR!Y+t^csKMXTsY%(B5;3mMkyS8#NpI06QyQsx^`4xc!R?5}N#4kE?4{ z&LamtNr@EhF=M&D*Gl*Hzi^&3&{P^MUHgnN!O`xYOArh{nfFP#e5{ zDXnW?xX)fWea867vgVwtwFgO5U3zZ&Jq?1SWUTrsTw zEme%)B3_)a-c#tQDco3lZ8n)Uf%7xEYDW-S_QV+b+mX?}%Fu;Rlu5ny#Cy2uVGV5` z2aCOvt$ytnc16*55jE7T@`8Vp=suLA@WoLiD!)qe%*3>q+h!Iz{Sf25Ig#b-;DC|Kow|#CUFdeW_{JqNN8buZ6Zg~m ziERUU=C^s3e&v0}U-fyOklU!ATZ~wZ}+h%3SlKp!cN9*ow#jy$pvkurc z*hhSR&JyIfah#z|%xaMq%egA1VQUjtPaw%O==1F=J}KdYM3^#FVAHeYQGV_6hXNit zuoC%a>}3m2cAJsO;XFU8rcgA~v-|}l3aU{YhgnuVp0!~w{M4Np)J^uyCd=oPUP>|* z2$bLNkBT2U_aE%jCBffPr+6%@%A5Q7BKl9Res6RwTAfSn(Jy+vrpYQMKZM*@mO{x} zb>q}!MQcXhFxQt>KRDkoK2@TPY?&<>)rNo5cxoEIm8|Lb&O!IgxETuHKEEzej(voQA;Rar-?Q`v~xCWGpg9rO^M@ z;qj+7vctT~e-P1sx9d$ij@5^=Ln9{qf)bz~Vn0nC*FPc4=UrE>Wfa9G{DKK{;0YBfL#wB;q6MA;W2>)ci==f8{!1#11lBr5lh)1inYlD?P zNMGr=3SKeF`73f64NkI+lSZ39Mdj095B{hqK@9%TPWsvh^T~}rjZ%9sJP3N1%iMtA zdT9D%V7Bzrz-pUz1I7NdKokHSh>FvhIF+-R3J^@E7tpVdi#hYU`TmVd;*kdG zr9Wc6{+x!t9=rI@D$ziZ=CG3-uOaoZ%a(X2P9NAIFvhZkesWA);{zFwM_RMBRP3#L z7G&1!`I%EH`&ZL0^{unQS|okpq~F_0Saq}VlOQ-Qa6sm(3$B_uTrl=;mfDKF$gpg` zC`D<<`rq>e+{7O>Auh3A_8r8t0(N^BR&(lwBd_Egx__mi=*ah?o-(y(hnj+b_bl*? z-=nbK{w_jm=r_tH&-9$8UcPhhL<_MPMeoAMHLj)T!XF0Bs|5|&`P}|AGgW7K&g`=3 zbB@}{WCH1z_$yi8I{EGb)t~wAe3|`_Fay2Q5b{%v^?U}ZpduS?GW`5(;*4ZzA5tB> zrKl~UI>R^%A<;ZXa;)Yf*(ouiM2`1)19JOQzy0qtxA5>W{{JM=?(fJ8kkg;_`0@<_ z&mDGNP$j@j_X(O@3AMPoZf4^me-Py!5wNCEt%u_fV#~ss@2CLDc_5tmI0nj5+@9d@ z-bJ0d@Cl_92DyV_nt(Kv=UjW=nc%fTZ@KCjU)7cAWO%ZqEO8h`5o4q3(fzzT{PjM6 z)ynOf;c5?=tl6yV!xO@;aF>TB%?&*_ck0jEC|f$2TTP3|f_z@E2TN8rG@ezh{Aplh z*=UaINIp|Z+Vs`6^;=u=iBGUm;;M2yvRi-13TxwOUWM?l@>U&LX{VZfj6G_MK5Ap? zY9&S+-u`aZIF7*e#aAxlr;^-$%#^wHH0R`GQ~u|WRd{`Nm^G0bX-9Lw>i{2g7F*oY zug?jXNTrf^535&wZr0iwDNiU&cz6`09w4z>kJ#^{tJU>FUkm}RGO|VsUL6TDucoSJ z{Fzx!dQK~hAN8w3mOMNk zbbI~U3gEKX$Hlx4rIib1Abq`S)abS8FzG(0e>t}s*H1fs4G+_1;UeOv1gK>*Z$#BR z=9lZ8(>K&6g@=72-RIpbO%lKjC;WCG%tFqOk9@!!wH6Z0B5VFz$9-mSi=>NbK;Brt z?eMVjD5NHVT|RA#(v5_Qwo7?n$=!)+%$?E8OU-C(=k3SpNv8q4;RvgeXVL7&xEqUtfrCSr)_$~g zTn0GxDRy`-e?4X8Y$GmzWAM4bp+{BQ=Bu+-Nu1OUUh-QpcAFvv0_&^DD6>PK0Lv7YUyt{Z%c2wYOk6>5ul7S9xX6y_Dh#$z6xv`$P}_ zHY>8xq1g|$`;@P@J?%gKk6!hS53XBr%2eNt-DGOpOByXp-fABmozoTxp;m^!>qE4U zy1qUBcu*!}>=#3z#?U0JS7)gDvO_0ftnyqfK(qh1*eMlv$#i zHwSnBmOkfY6DI6d-1IpO$UX7zsEllkj#6(Sp4DON#k?PUu-_X?v?x1`!)!@<{wPtf zN4zDJ>STf{ger(1e;0Q{9)~EJp-f=i_W@gh9+HT$xF8A2B`>5fVE96FM>Z8Fl)xfv zfr>jOTpF+9srf>0?NfiT)V?l?+ChA8T|suFa2UfW?jJvRvo59V51){lfdYeG~=T*rI(@soh!KPF{DWk%3B{_&-}XFs~c zxEPcEjmQnkS%}w)KWi4F5YKaeZ1I?ovx``4#jOXVceq)>f~)iJl?V%^p{_v_uJ`*v zM!gbyf)=?v)anPb2o}N5djpzDIe#gWnb_G*17w2#L|QF`%+Pd&{K1dX*SyZFjkbES zZTC}-5I(7pH!Z)*7W!rX72Ct1tc&*s9XzfMg@3Es1*U$C0ZXgKrguAn=&b!FJk6~z zQujoY+rNGqj^AOE`?uGb0|o&y7u0N?chzR=#%7%Lz3NkEO_s06FaMI7jJx8+q<;Iy zgWL^ut}SxQGY*23Wh-Lac_V{GXH)04%Pff3B2Q_|O?J{iGJiMnu{)=#Asfd{=o-G`0!b_ed6_uj0*T{Wo+;z$SZj(D+3zPOXy*Tf3;OTF1sm%6 zs-{giIGdyR{|OhU==g~%`ue=F22>MKdho_E(|D=i9wKKrJWpPtY?trXhY*sySR_CC&7y2DPU z1DP>!*v;KmuMB+@AP8|?3LBfdI|F&%9S%aWX(wgc(AVVsjt5xu@k3fm+tt(D2Sn3(9l+G36zCI@r|2HtINoFCqt4JWP?ZjIf+c7}b1 zkD{RM0Mbdb4u1sd#)2sE`1}&NF_Ji$2w(=28zi*023?F?E42Mxs4*kO0+ExN{bHEj ze}Hcga~0uId_Zf^y~VNX}C3bz`vX@RRN zGTlMm*J3NT2NS7Ly^&()0@{fHlaZ)3NV4G>uoDn?wdDrixItV&fiqU*NDJa-NBzj6(f2*g6qx31$#`zOc`>~BSVhD#HhG&=m*-_i!2qYpb zzz|sW@gXX7j2sbLwEocqwY4WI(A_#QQ21=LGF{*-;r137e0e~-;DgNsT~DlB$K9nb z_#BW0`JvBUI|AImpq$l*@BT^HZcK|M9PQPdCi)c@R5(rQqMEfoJolU~8Qm>ha8#-t_Z$nq z+`uyb^rM~!fcUYRYmWmX0>x3^x^q`$)Gm7qogaLaVT|;=ZA3yem=3U@HZ%h6DoHR5 znqF+`US_zky;w-yYra)!!vn@Urw5NHYdats-p&1bWez{OIL%G_jfeTNLF+9PXU`Hn#CBbZ^0 zv}Q-x|8BTQ{p|(1!UtgFcaX@Qa>SaqbGr#AErhF(ZEpE64)k6gqN65mHyTsA$Y39kYcgK6r!9 z)xhptUB^>rWdr5>I6J=G?tc-M0)6BhJpY;DCb@Uu!O*(0KGu29pP<{WA{>PIAOxCu z00F2?1fx($3}$!aTs%_})pr&}9voTE2+(xEZUOg^k%XPE!V|lh%@Pmd6X5G@81teJ zm*k|37WL%E{;_7WRrmC^!O}_qq9ZXFeO=edz=H2~ed4aC=D*t}Y!jIcd>h_>T?u=u z$~yAhv?>!h(vA4yn?nGDo)P-*YRja@1*h6Yh#9U+;*`kvcV37{!rMz zD%4F5e?n+U{US$GgG%RN25{~dm@`JJDNzH!$7p$}aO@wwp|D8sk-Q!u=Pb>2Dd+h{ z@)1$%h4cw?Sg8| zoZ{1RPT?fHo$ComkwMJ8c#fNyo}*&(0I}umf?)$kIC1%6u4$HVK;LVIJ;*T^D}Tdp zRnE7XYDQm32(#iNUP-F$ZpFimL_y*_xVy=9wV0zNnG6*-w1J{I+F@YLy@+WMoKeGE zo$6G(0v=$S_}^y_kT`_|aj zH9mKn{ZM|Z$DG=^fh{LI=(c$H*KJ&)%V{nJbscs9O3DF{O6b2{c|sRlato)I+~S{{ zu*u@>oKv*l^~ERLf5W%6jt@3&8Q2|fH9WJfv@NQfS{W;E@ju(MbS%wrx#RayzZJaN zxphCg(d*tbz?eEKiPl4QL`l*+_yXYpgnFcGU0anX=|rhcC>u7{c;d{Rr%l(R)u(0Y zvRV{saHb?GeD|tgj=GccuC(goRYL5SGc#-lt<9=h=rlZdVP#eK>j~E`XcK2m?Sjw6 zui=vB?$Fsb!Uce-NzkU2zrlC9v(sKP2&J2G8wNt&5Ikiv?DxC7I_#Wd>Z+WEp&kRV z=sB-?wP!`@K4aa;{op$-2Jw$O2xjk(0=g!!H(;mFWhDB|ZM7&bZSP;cHLrZD6l1fJ3JK#BuIo+@0NqQx;@nd5L+1pA_orkunK>?hb6wi@pbdM_Q^e^p zqB@`p5YTm&%ltQ&xovN_VQ=^p0a>~#Jw;qCUG1GB#+I(qyHG!AWj&Pf*5nE9gueVG z$v@D@7Z->u5s2FDc#+k`o^@651zGRwfiA^LMw{T;-H&dL{yJeZr-CD?e3+2n#3I{_ zW9YXna3qB-#m-+b%*E6f!q=zE9uIStwNO`MN8Q~Lv9m``6oGt#({g@9nJ(-FSO7M& zpgX=X?Jg$(!?uH&%~9KzOuS2^Mdru_UcL>7N2#I8<&s*?NH;Cr1WrBF=Y5x+}C#P3RqpkMuDCe?N_eYiPEyXJq#5S2Q06W z4G4AxUmPPYWOCr?cSp9v0MhQq-DKUQYIBbl`a!6upBklRo!HeH>`wCrFmkWCo8c^S zZ114i5`0`^HvH)+nfl}P?2hF@9YMkR2$t2 zY;4%l5Fpe}=|X>VKWoUM4-{IGIJ~iR5ejNRK}R=OWAY|RyS(O_Kh8tF<{Lyya&wb{ z%qtyU_NwjWvI4q;+1S=hvw0Ry9`Pk>H*qYXrc!h|_y}+FLkVEy7 z5w{PRY2dZ*0;cDhREnNlsjaH-R5e>M*ts92*Zf;7LeY7_qbS+D5#5?5`=z{2lAqy`i=akYhVxTJ#gb@*MJ zPq+vq9thQ|BeaF5bVUVnM}W+fwtL1@t$rEZ&zZ2p3*^J;2e-o@V~`rYLCsb-bE1H# zzuj+Ivb9mC$i{ed;MF#K&Xzeyg~#$Gdsjzrio+xp35;^8HSCvI6gYDR|KjZqeCqUF zFJ)GwW5a`q11(dsX5G+3w|5U$Qw+Y^ZiRJ$A>H6o ztg_7fQIEt{eYb;&NWo;yYIZZUMzjRX06ANpH}!>vukF4-Uy2_QWMf3$g2-~9$T64p zu1HVLu9M!H=A5;|ri~e>QLqtE<^*|u0J&ZoZVtThMZ8dEQoJ}m()*>bCD*Z{sY(0T zvcw`#PIN2t^-;#-%H`5-DUw3J_RI`{G(D=%mmBe-}A)~dUM zV7%p=b8f!?Gp}6=ntlQdJBNLvz!WqwWq9aKh}4N-m)f3}+|4GX;A;}ahg@xNZohpI`>ESsi-bs(&274Cr+{mQjMbRqPC=k z5YFGD&03spmZq02F1hT&gS&F+)u15oD*32E9qr$v2>nAj@>N;jx^JoeTbzdIkLk1nf|&M z8i+XDAR`IbjWNVR`5Sj_p3(|+lBoUbqXk!g3iI6X(yQEhXNL4|Sb#^+Fdg~KT>Vhz zOixHG(fHLm=t-3(mCeL6-uo{bpqWij<1cds71~*EpD?n(rfESxDgv#;8;{Gz7`OZx zkzt7@rkA|j7r%cY=Nggf!&+*v7W=m8wT7rq7qJW8_=LF!vIY+nY1@N?1JK_E?!LZa zlabudBh}8k2a20K0P~<~%kv$@fg7e*Er?eE!!s;L=|`Xb%r<7z1m%#WgH?AvPq^ux zWEHDa(?ahnL*M1v^*O4>-Ojmxm(%Y>6zZbl58NlKOtZ!bAF)0drEp=F9D^7vg+6V* z{h;CT@{e8Gs$=U}E9ntWw@C_=)&mW*YegOMY2;dH=&eq4Q7&n8d%JryE9F@4R)ass z0m-5Sx+FZb|CEoratmRn>H<;KR!fQ)u<%bT{5g0+{TxajN&Zm1%1Y1a!SChs-l#Qw zTcYD&BqVL>tQ4y#L z*~5w{a*R!7OTpUgQ$ra|gD>u&``)R`-+gv#J`sC&(F}Ax%UvyP?Hg>G;q8AIQ2Yr# zrHw&dbffP|K}=1KEKE`mb)vc%Hv1(hlzE+QOkg!*j#9TFWnt9U5jKt}`}>Aeu?)vj4TT6+;70IgcD>JVEHBDD@a(%;?@6KN(FZiuVqYEdb@^AQAoFWt$$JShOpZp zx7Da}^h>mTph!vg0@(4jiG^s}KZ2dZaFDbN_I}EKwT)DGBXTU3Tl@MDDbF_2m>T^A zJDAOmP3zjju}MK9I})2y6k#9@1_*qJMJo+Ew=aA~azqjUKH}+U(=ggV2)3f34fnBL z1qaqkPkwibNiKJ2y!VD&cW%HIZvn!Ys`6D^?oDsXyx)RkPHGr$lS>QKhztFIaBA69Ubl% zRzY=2gbDDBlXGj=Gv4Viwxcic6PyGGPOsw72x#gaa_}_o^d0R%?I}{(U}48hvI!$1R}YamQL7=Md&qJ#f#< zD<#jr+F@21Kc#E|`@m1|-sI2)djl|#)1YB-peq|0VsI;coQm;DcnTYH$418(g!)UpY9aRlL zV-4lDKKUo26dz>6d<#FCz|ZDBB1Ykl7m6y(qzV)_K^tImN7v(r?(D`(Dv^MX7ZFcX zIIs?UTVB`jQ#fqzXm7v^bqE)c)WnX~=ri@Ft6QnlCW&H|OE!E1>r8Kjk!+R`U|HcUZOqKJf!H+)R4)2d89a>4B8}&F@;``1KoH) zvE?MO9FZ9e4rDJ_XKP^Jx%*S{1TqQhhCwC{NT1KVbTrw8c|1NKO%JSsK{O9s(=qA6 z$d`<#mahX}%1rPH=4>E>SN|T6g74)+f;q`U8Gltvi`f+Dt&y3hX~AtT8JXoj4pVca zYN>5$mKI&j+>?)6S+!Xp>4rR&zX|40+GZ=K5@tTu-Ye?oOutD}xpaL37Jc_Y!pg`* z!b+x`S^*u=q$Pr#=@UZZalYgkEAoIan ziy}xE=LpfkV3FuZbE4pcix3rSr@l6)7D+dET3hCxV}8^pAZd5i%XjBK^)kN1!P&>3 zQ__=dMV4-0ciVh?r1UK@uy1<5-o7IxexuFsj%&izq{f+1AbcJ1V@Xw8xnW1ypD|%{ zu*6zce!owC6EJ;|5Ot)IW#@A8D(=8~hMFLYo!PDmo(Tf(-^$t&jA`_xW<e<0Dl{NVTQ(1iK|f zUcik>EyA`7?r3Lbqe2Uo=EI67xlSYl6^(pQtoy(GOiJx@50F>#S5gpC&bY{6#f}Vp z+TiSx_}NsFgy4E*)iLny&{R>0A1foJ)Imbb_R1uTH#k4^L6+}4W#m0Jkh3d{5RWHM zBmmaR8AOAU2jIWcA}XR&SZ5Z|whLPz`5M!`E566$2tXh$<}_eNVS90P+y4G|OqQyJ zB>|;gy@npVkojr4z_sMvsTzAXj)U`5Yq=MGYHi8ZpDl~kNLcR4zw8-!Rp>bT%P%vf3cnQ47r)_f&G!@%Xk$bnUs&u6rSXW?63;#>}a2IOXl=D zTt881Iu?D7^}WvhPCfoOKi<>p5GGtWA8GX71twz@o&Kt_3RIVwTvU`4TVoE>s z#^tXGrPl)uPkW}CT^y6yac3Nn@5YU#N3|R(aU=Ij46+{RZ3wq;#zqDJAu`JhK+JA~ zO*_XZdd?RaFjO4glRL zfu`&x?#Vi)>}KxCA5A~EZL@yxN=Br_jn65iY4F$2rih!l|L`>MqVt%xwl9A}8&g%j zGjGD)Qj%ukk-VQ}T;NG8fQikwiAceLkjqE)M_Dqb{W zA8eZLOy^!Riak+!@96N~@-)kUWNPUDRpFCN-EI`SqV)dQp4H|7}S(36n>rN?~2@5i|Tib3NQYr8MRON93mhbl!*kN z3T0tT)e^-Ax?nv;-;?NwUK~UU{ak3TDTR8JCPFkz1)v9G-ft6GbELhro93rSoS#dq z2?5%%>-<^=j?YIMAfzqVy+J`uIj;3U8i}Pz=m@l^G5`Mt}_B_ghq^};N zNtU;@Ok|N=uG<)aQ9arX0Wudd43y8Zu2xPF160$)q9P$;_i&BlIV(dhSqEbR6hpFX z(X4L+=@WaL+&#WLC~XO`ZjH0amWxuUjWg--5?Gf~%LQ)ZHAwZfInS^yDhJ1sP%ORd zB!HUr9Givsa%BuGO|$XJ?c(6=yWv7Rd-~#Rd)X9C%)gU}kZ^U&zTj7BlU?Rt_aYvL zJ}~hi=pD-7e?8^^W2$j84vR9lqozHNY@8GseZcWQmyEBFM67$U?9$d++~O%l_pocR za3_DUVv8}GPpL{5N-c!FDM5HBHvHoc`Ms``WYU=tOA;~t!TN2P4#1MYfGJ-x%v_aG zk<)=CfaJ;>ca1reEr?=*oi>C^vRgW=Cf!5)p&RQ3iB43U$qQMk=Rq0WUu8w3WK^@D zqLtGN1tv0K;Gg^@p15%;&wK=Aw^@VYi)Qx4ABl6BS#{EklJFMIY>ND@)J|Npw9J&o0uPTS^@a|5rh}6_&48$}FO@C`r z8({Oz#5X>hP-M~*SEpL%XrO<&WqwUuVk-V>ZL?+S!RI&G2H-`TH@5ghY}{U~SV#9V z%f=e5%d427bPn11dPuR@NvwqoZZh@ZwlZD!t0&^!Kl)IZgrzQ11#V4*FE=zPTh#3Grg$Wb!|`31r_ z(<<_!P2rTNh3Xn1Dn>vg+;jnX1gs(}TbgNidJY3$H)%Q0IE^jRGqMPXzlk_z6=lbHC>umy+vg6BqrJ)Q?P^=-~?)5NYlJ$ZSt< zR!d+W&%8PB$63WrguHnE?)}3U3$?Ru6$~iBH80N}vlW~6B|9&6Td{{IfX=e5*}0j! zV(cN<^4_9#MQfYgTQ3tCTa#=Uhe^<&d2`Y=a zOxu3BbS(xyJD&YfWEV()c+u@{RlGgNcCXjBCjy9dGw+Sv$1zzLbC9k20Jp`Ao7RYN z_hiCD>}yva$&edYXQ#e`rUdGTDe#bU1OxA;uhuHAITJaQ;7bvwUt$y9GMp?YewswtK zcHaOcGue5>+1_rtBh0Jnh_%aDz5%il-RL2@GiFa7e(vtK!7qiue-KkkO~rchI3-X; zD7_qK)LK}?ST*8wF3rl#pCFiIX(t)-D*U4PjS&H8+}3jOQxw21ae?|2i^sTa4AYs7 zZ*>`)#l~$`mjT)bo~Pd&&&FvgA~9*>PA|cl88T!<42+v(3+bEukxhOe zc?W<!BSXCaYvRPMzlvhf+at^k zYZoDCLHy=Mag`C6nXvx|%WGD{+id&quG;i5y?r}P2w(%~2^&n)c#BmOk2FWJ!Ju}r z_uB2{PyN8dL|7Zu@sRmbvwK^+q37;;3OQu{<{?1%w)t=1Ue5d1`;)&(Z&dbvOuqy! z=2~|b%O{fEOqu;M0b=(W2|F~#OJO_)N+fqAw<5w8>VMp(&@^aassAZk*BM~OhZ*)u z@H?xh#Jo9jqUKAK?IQ|_qQ7+#2?3Zj>1uIY;yHiDL!26HY=Xh(89X6BEThgghUp^2Q7unz&2 z6Bro>#NZsZ(4HzZ1Rgl0q8P+(j5yHd94&$5!28UE6Y$3fcE2>*uu!JfGjyfuMAU%< z4;mx1w8Y7(PKyEi@PvIhY@#^z{U|pt8vZd`=#Kp;F#{WKurLJNMBXHL5o*a{214@| zihw$Wfn6A}8_&=O;!VbG6w(I{s2fE-FqlY7qgC$|yfnby48Y$G1Vbf6k{OND5$(d+&FxFYJ(?`+ZZ;+!!+&z~?gr|}dA32} zCx^)&W%p_W|E1<8Q$8vJ4G%DGinn33m7-4}i?sBXdj5eP_dzIUNc*TE9Mq26R7Y#b z=XM}f5OP*yK9g#W&4P&iz=@}zQD%e%*}3HY_55XeKkYgMpyJsVdHn(4?YJvDfq?r- z7p=jbJ)PEBIq;G0WG6*#v0y~%`dkI7bLFA}Z?ou&X|r2HV=|S@t(AzGDSWXP7C{c1 zmsaf7o-9{C136LDO>m3WcQ1BpH;qa{%z=Yt(^_XtXA^xMZ9Bkd6V8!oklO-z@kDnq zK}|OBrX=RHF2((IGZPb39Vl$N08i_6mxFEuT4o^|3(#NIOtW2-pbwEq#qc+SdOi{} zXxWQ7i8;MJtB#N1Q@0Dm?Fx+mmB6hhl2(XyVX0!AOQ&bSlMGw8_Ypbs%`xG)1IpDlt-|!-X!dR<;_c5P6vUwepHhi|Q zVeWOXJKu6?!=Tc3HQo;3qBeF)Q!x+;J_ejW$-KqQR%%{cN%iy0A=ikn8oRUTzQ$9@ zt(`!%wwzlsy${(L1v{%*8hPB!PWiS0p5FHGjmuxU%W1nyVwc|>s^5vd&|IMaJuFGS zQFj5PS%V4O-!OwEV-wu*!zAX4-!`5WFVB^xTijd-UAAy#^j)<-GB7nkZG$rG<>{LY zh#~{Q(zfG*K0M4VS+xy0sW3MKaeJsXqzDgK(+e=C?hJ&9X(no}0daTR6Lbm7-j3ug zE(+UW+mWrKuQe#J;iB%F&>F&bsKJ)p;GuAHw(3Q2{M$&bCttwMGxQY@1|yXDmh@kc zy#uEmj0)74a?d&Cro6 z6I?~mgf^b)c*bz?RBzIas=lyy8UYPk+p*O9O#4@x7p`{Llvm68FKo}q{=x_i1mt?! z&Y$}J#$pP7;6b(yFw7dLt6ainPAbGMCrA$hb?pN^o(dq^4CaEn<~OUa7UJw&db4)Y z4Hp>Q8hW6UyPirM15-O?$5-74hISX|^py6Oc6_`!n0?~u?C&~h(~4>E78XCKwPraz zX_exhLoC7tR%d;a`+m+4MJk+k8B$zh)uy>ZX|YF&vm2)-rQ2C;v&TOKA(8zEFsl5*m1UuMyDhr3?XjlX1nR4q`e!>YOQXbWA6_U@s zv+t=NjGdI=iM$LrJbj9XTL@#+lmPXZM11Od8bT~v4$v3|*pY7o`}>lr-}9TqkF zux~k${w~(z7G5A$K~@B(#9wOToW*d6lr%$DgbCv4fvc$TrO7dXo)JRWEJ%}tGDG@mb(BWRu;<_UZ*&Y{UpUOuNl7>!BX4ZZKS#YtTomGmJF(dvCr@n z3w)l+eA`LWLy;0C9EC%d-|VQey9;V=Lv92q?7&2XWLY7XegZ|H4j_lM3?qlL&qT)mDLV4$rCJH+hK-Vo~Zo z3W{Rk^pzhO}-T zW&pz#TThpyxNxBYrRRbp=q0e+&y1cq!Cl2qX>vl(t*H&=zTuWML3WvR>x0^peWRoH zC?hq^o&xow?7R;9W}~+YVgd0Q(iKGfCprHxNm_547F=$;^O#Q{VswzdX89KThP8}& zi3XXp&I3X%eava5q%=y7hVda1Eb-Y@r*t+R+PP`}6Tn4Y0D|jX1x}egD7umZjso{K zzH6z3XGY|eUX}S@vIBK9)6?%1t%7%oeX0Em3aX(xVHfWh7SAghxk$#!60N>FG)@Ta3x=(w7I@d)|3@ zn-EA$Z7AW-#D%XMwA$ac*7e+1`p7K>meX)u5h* z?xaYWbECp0%CeWo@8W)rqAkw*Q`o^?z^mN;D7(c4-GPx4jRcRb{xFP}Yl4e~0Vn2b ztAL9A+td7Nj)zt}TO`Qc)qlY;%YAOTU2ck_fdecOk zO8q^N^<*qyf2dD!ySovKNOY1UeK=i-9^32d(>l|}N3TEQ#=`pDg|3U)Up(=8XI=UL zpONL#M7v7mxezgQoMNjy#riQVRi=cW2|I}Zj{%><1L`9`fqI%bJ7wrqog`-(JEmO3 z<3c9S3@zj|da;9iRvMJte*k#-E*``R=?=hAO%p3IZ-a^$26bs_BRtc3#6#s})HX`_Pfu$n;5Y*uZ-lA(Z8nhaSp$Zpyq{;bUQ6Z1y~zC83+ zot4=x`CMk>NNUrM8OaARGqD=m%+`G7IG@?hV*@uEO#K<$g)pz8zH9BcxAEdaa~sOc z^$Ht;B_M$D+*nSz*~f%rXS5s{wp}qhdO9MdCR6GHi)Do5GZ6D3%rUKt^VkBWf(LN1?kM`lUtO zTI|-h=9f?eyUtgjfSHY8>^KxAK}orOiXW9?vT+jUZNd1Ba7CsreCrpYS**dEmGrH~L^uUi1v`M!<;+HcN^V@!edHhN+hiz>&RT7v%REXn<(M zXy~pVH<95U=jsAZswzkraew!56fd4nJitK{V>+Af%$}2;J;G}iv#s@fi(PXcJ(?ol1ju;cc&1OzJNO&NjR10FKmk7I_(0#kDRc6XtO zw`7%a?~YM9O9fp96|LIkS7=Wbp^y=c5xCeZD^1qDZ|l_5^*j|uM;s4K|X`v zd&2;_R(R4P*8*Ver)H+AM!DQ8<(XR#={y^ht%}I4 zl=nJO#R2vJGH8qn>VS{}$LIl{ZS0 zg5a}8-o$uq3+?B*l>~a*1?I0-xi|6vXTYau=p`D>w~)QiYGHz=9BoP0o`~r72TU>avCLD;)%q4Oc)^Jd0usIR}D!UO1zLK>?zp#(I~3>9|U~1?OI~?PNFY zZY8F2=C_+8U#G7Fx!Ho(`h>a>N`h{SWE92#@tVMV;#Y{r-}7X1Kf(}>0^VA-24olR zLr4Sxq~WUu2HhVa)Oz#xJ6@1W0-a6q$M6?5lNBAwogLU_Jq_nXedT$43h17 zFm-9}989BpO(k&3$x>yoQ6gieg(+bys1`?Q0ExfGeIIrvA2ulS8+)&KkbTaf8!1uG z`#N?kdUrN$X^wIWT$ipg7m%bZ`01G~(6Jw&OAi2suup3IHGBBT-aqQ$i}!{1)z7wK z%2aayP}dDfma=;v8nsc?*W$c>l$9`E5m1Tx9-3soGI&JZqg`M@AXCw3dyfW$D0Ux9 zv|FR|Z?wD|vb?*+X(Q$D=kZIeE+p)`J`U=*$B9!AM${kDy?Snh<>nqaDGm9l@}|Abn`<;=Ash$OLjnP9kDhApp*n#%?_4C%!424VBEmv8 zbjZU0vV$l5);L6<2Y1RkA5NK=CP*=*`n>KD_3ud8| ztw01DApJ;)X9QO%Oc;V#!2L=Wk%iyQDgjtNQk=R!1rt}e0T`tDng_ovznVKJEwPuwIGn8MY)~Is%S>(; zsA~&VD}V|mTIC=tVt@dNI%j-wgC${6m{Uk(-;rGn$OQs)wz68)B#Y~8!-`qZB+Cki zz4f2U4ZyLAGg=`Bd&nXdY@%wz6dr zgAYtW0C&)yqz<#a7lF3{AZuH2g< zFfIdB5YhJVBzr<^xxt)MKBv>2Y~GRLQiLqi8nQy0bv{EsA0tK%_{`|uD{Dwfz3!V3 zq>F>1z^E`QZGRg+Rf(l|P9y`BM#l{&xKCt_w5uj}Dx*Xx7g{`_I)T365~juDfyKdv zj{+z4p)|)(jx#cGV#LZW(6{~^0}vt0Laa^jGZffJCnpm~WBN^dt8SwQt`X^+GO=~? zq&;O5P%kkQeuNPz6zYYcJ!QYvx8u%g1~w?FyaEvH+kjMm#d?G=oXWj;@=f)GvOg(T z3Md9nMuS0pUZBbQcIz=Twqt{s`wk5^a7WHs6kf&?^` zv&v8wJ)xa^Mk~VPfm7C+qNOLgHe7-pn{@gGj_G*>(XDQDmQSdFv=9sHph&*|lPBsG z41!A|gwA&RE&45R!z;u@tjX*zxRZ_iR2EcZPAOW3H~9c(&=lST-Kd7FN+5j7en^zM zm1WhkwG@chKs|Pvb!$9bGZGtD;7l}~GQw@lQu@_~L(iUmEii6y>NFae)v(*%VwYQ= zR)x*8VzaUkQp=-jN^pZz2N{G3DL!pihx>&)C5$q7vt<4te5uwLE3L?xAyp-YXh>qS zLc6>ks-=@$A=w7t#%M^VA*WYrc;T#G^jSvVHNf&_Ke8B!@??XSg450`+w6CuArwyY zrmf@y`@PW~x%!EoiH%vUdGN8&-uOf~z5wz_17*3WS~VAe&9;(Efk<)Js1b#5yjnsC zt#%P9j%iq=6lx_Pk)Cc)I!3Ntp;Mq>ssy7NC$^Nmv1ATpS$pYeXYG_G5M=~9Er)`77}7PV%jAik zEI6yIWG!TLkcd>9&sCs$3*i`(cDgVMC`n0*xp4*ZcqS#&rws^=?h(%f24I?!998vq z$|+rxR)*5kYc9j8QoF38NG%VX(`LnE^%hT*#VDXfOHved7t**oy45$O^Xt+&R9Qp! zAp>^WB6eI0X_d7(W@4BsnlNdC1o)Bt@M@Tt*n&JE1Gg5X*-pfkOGIbk*Z}ZF;FF8^ zb^UUvZe&14%WHsQBK)exrz%|v4$UCV091AK&pb4dm2yGO45?^-rP6dIJF}&VmtLI> zTFbuh>ZCedSCkwTV2FAXk^WfhY{nvRs_ zYjYJUmy}@vMRg-0tkOra-$6D~rcqkLS&=YV!%}0VTO`B=YM&!TQVNeka;=(PfR$Hg zxEq7E1A#IYbgI2TVUSK-;Z>w>QiD|7`o<%ud?Id!pdpeO*uFS5trjfzBT5#tXaa=F z#+s|uC95;JH@yMm8iS=HQUJ!_;d7FR(0yr`R>i-D(rUq0>O80CTNFQmg>WUASFV;uL9) zn*uuHPjQJ~MHOOglr`foQ+>Gm*9deM9e|AXL+Lgnb%w!J>;N$7q&D^8OqHU@F8$c% zN=S9bewm9v`QA2Yssuc86bY*D@5nfU7N&agY5M>!rwY^tiOV#({#CG;oYIhSuW3M!TR)*r);s3~HVLKn>e(r4}j6Dr1QrV8zJnH^5F=W1TAo zWJR)3=Si4SC-Cu-=|(~RtkP=MQWj5fqLpIVjV&@+pslp6=4f9Rc}x1zD(z$jL}CS^ zY}rB;?|sUhTx1Q)Bh+uQ&?Ui8TV$j7hMJX;&_V0SEOBZUqUN&HPHnN89BQGot1Qx@1(T7z)>lcCf{MyJ zd9Yr%L;G<8Dw=7%7F{q%coBrSn}6%LOOiwN5d&2=$N}Faw=3V=NB0knRo1ra^*0-MM zUU;MQC02M#&PT~hc!OssE|Izn6m_;AP)grooZTfSU zx*93MYcrPD1ao{d=IW7i!2_5e^FsO$(r2{rjulh*U>cvSV%!j>;5G3gzs9x%x|460 z7!(q-S>d*A1+~%kTzb;x6IaH_28<%_O8~isuvE-JAUu$%`G|dSR#|uGAO$MO2F8SaX+8zSXLB)qR!+tI23|F5h$%-X`0=%q&<$D z$CpKnXT|tX&!Q~|QgRnK?5=f?BndVn->e?zjzAN@;ncrF$OE*6U0Z_N|2Qz`L=7Q- zt8t7f3Nt-?%nE^J@ZhG1ngqOpL{2MFEg4j>1cSPpJv5OQlk~W}KH&S<%v)%rbgEWh zP5a~`UMdwdx?}||0hP`NJ`8I@%7CBB2ufsHlp?n& zCd1e;He{>@L@U}@Q9)mhe$0EXDt%cQcqdSbBKR68p>l?Aputx)OZq7dT$VAt2`F_` zl}Ad$Ij@pqHdf=mFwMj%>;{{XT}faw;8KL(g$3W?z=eevfOgJGOUWyMAnrOgZX&nN z&RWyUh!&T{*vIL)b8uG69hz8}Pu(nvWDqe0T4PGHOZAeDll==cfL+#qjc=7ok`He17NAUquNLguF+z~(|OOR^3Bq2 zm?xE~cPSe}Gl^BOm?Pe(2Li_gRPF|*EW4T4s_8AgJFD2<1c8wP>E zoh%`hn!|}%Gorp_OU5o86wlp+n|^{4F6me3h$PoZ3bdn{2EDfnG?huq3LV@UBjfVs zSz$m~8!xA3q|XXangI!Zv%JU_CCJAxIqFR_DVYvzEZGfe^R`Hdp?hnzBtjjFm)frm zJ5yl@tuewE*7lFo5i>1kwe1zB6Ogkla#x_#Outz&HXVwz9l%FzIL*bbG|}v5 z4Z;w)k=}$II=kcMATFzJp#4=g8EVQbmpjtJ#Q`*OZNWy~Y6MHCmc31J8mU9Y2)htr zE9uYEcDSjaT8{*Hu#nF;pH7Pcr$#YjJ(5+C^ zWfCu-32ksEJg8pkNa6yrp@3~3oV2uRDgPAx)IG>1%0Uz%aCMH+bX5};d3z&D{TTHNH`>e~+6fNa-9a{lK8ZBN@2RR{0s~b*l;ZK#m1a${p zG$m1mSz-*0N9d_CwnFuWs*vCUB8l`C;1o9DvZB4pNUA`KT%bPVW_~oPq;d#3$^#QB z%I#;QmDXEu)t8reBM!tpBqJE8;x;k2RHRhk$!K#Mt&%GMW!IaVh&i0$IfxU?vKh71 zx5AgA7yw!fY(Win=42yiD*}|=9q9#x3{c7RnGiNwbzC|kmW>Gww97s&R!~2yl`M>1AnLDaeL^B2ievl9@tMTS884LFKp(=gylE-DevoX^^3Xw5z= zmET*}q^jLb3)*S_9)$)(r?pu*C6kYNQzmndAPUkyq!EM)t0fANmi=2Gi-K%4eA>#b zr|5k|>v3eoAnw#4GZnf+Hs+YMF3*y^o%D{LyVnSjI&ej;;R=Yvj$&)KOuo|7@s?VE z>Gq`g-f(qVGC>i8bHwZo&ekHuu(|LuyE{}e(}>+0nt%lw3A7oTrKd|solznjTn>4H z`u3jk((nY7ZR&hhKvgYW4Mf(8A+MoLaAy{SMdH7(k!pmc$j>2&10u8n-s5ux#V$@6tv!V~>RIkF{*$XDmP24Q(q9)SS)_p83(-kDwXxBD%!X0fppyYEm zMQT43U>R%gE#XUaVMSJ5cGf)AMU(W!HR&_Lsda}l+B-u#Ur521mH<`&gN&=A&;k}s z6!J?qR1_WePs(@~fHn_eQMHASE9wgqz(C(c} zE_X1g=VdZVVA5#;Jz+!k^ObEJx!A-hGI%`w7IS-ox}RCCT#s@!7SMEW6XnLO)}j3h zT+6s0tt>GLLTUoo&zhKr^50z^>qu2INBAWGcLn2XmT%rUmr}Zfc4D;Tsj^VpyxOv7 zDgh*ZRL!NO$M+*tB{o4#v*!iIEHW#1LAs*W3H7eDGb|VjzLc4f6W8xR7$+{8>a<#e zDBo=k+N`jm>Xu)d7-h;E(l6~pO!Ec{haga~5@#)dMx)hwM2FT4o_yaV6=0RdtGxq+ z#k)^6;QpTm4Xgm{qjY`OU|7hJFk0gU$oM9DZR@EL6ft3~bg+RUC=mhMuV1s0`+sVb z{UA9QLZc+j+WK-u-=dN0|09dzU{!rWfcqOjTsX1=1|{CUq$l_YlvJPPv1vnjaRGUeG_xHv3lvCs6C?38@Uo=bL5r`*Ehg z&Ep-|hiD#e5vVd_J&9#573EW=MF3bxt4)E1Y#U^$WGbvgewYwetMy3Hw^oN%u!!gC z+o&F^u!zQJo1Cz+dZA_BoCUxpuL886rjKmp40F5?aTXZu$r@I;YA&i_c14Ot%_ypgQi>Dwh?k9aIYGZ|9yI zSm)FjwfYza!TQ!7Ep<9`MgX>2A6uCHyw8qO8TwoCh?jRoN8;7d7y-HWHs!X zbV;kTN3MxcNb;4us1A%mCb`L|>|&Jd)DF(w0ZQmHnJ+CXN2o$w{3sGZ#*Ir>H&dQj zDu{R4+sTb(9j=y0Q}wKgb5@%%y)>`sU=0?~PpPwvYG+N1u0E(jvtiTpz0ghf?wCh=8-v66i9GCo+1f zYEQJGXWdAYek!EB78EK#5e`@*+6b~2K#?XRt#YXYa~Epb$g~TDmY528bd&Z|)t=M` ziPyGi*~L~GD9nhioZOQGdl2fc+QzOf8`7+$q(NO6@f3h%#(plt#0B+dEg}aUwmF9V zoz#sKXjzb%jD0j{VpmU)BF6^iteW(QS(pS`>6el7;~bR<&5J-8VCxlZTXUo&0a1VR z86`Jh-A=NR_M4M>Zj9)(=!ha5+UELP9s)&v)g;nd2T}{R(^HU)T&^7^vIr^I$oySv z%5j5gVmqw&1{ELeT>3Rk?aW4gPTTUw_v(<$y?frr7A?N&J!)+OM;D zDBO#1F<4|XQZ$<#q4bUko%PxmRt5m?co!P=+!xS9Z6zTp0GS;7ePOt(vjM1unA)cP zx_H%r5(_O5Nc$06><+lS50!hV4?h#GWghgj(|Yy|c>6Yo49EVg!dE;6v(d-OAx8VrQ&PrryD(qf0i!uu@`V5UGdByGz+T@9x=CYX{ z)n3(BY_P(tM5Rw43Z>3n7*SVH%*zXuJl59zsQTd&b<=4p<53n(R7~PbX#tjUAfuVy zkg!P8n7hmlCu@nvAzK#+lo}5;HL#VvNO}i0V=34g8frJbG7BpfmZ%nA7GrukQ=Eaj zVxy+YVb)S>(vh#0q&f*|R$MZpd_nQGG1Y=SO7mxDMYgg5NCJ&*s{rRj8+z?Y4QLVJ z8C$RP1F>xl>B5hlytbFkL|G#8ZQaKTNSJy5k~skD4nRWJjt!Ceuy`0BNJh1)yXy;t zBse+)^AsqbaJ@e}q%r|k%J3cHs#+nTI39}tb*24`hCa>5n0mOB77#ESM2kuXt0tWkOe;5;cCcqTsUI6e*= zTGZG++pH|OW=n#A8v%(*GpHs)nL|NjzbdE#WPFp|o(i2timfhiWF5E#K-Ih4ib%N& zz*EHgUE^y)j_B9><(BRiFrWe|3Zyonfx;EHjAp3)4_F^_*VLFQkyyH=^@xsV8AP&; z_N&Cji8~T$9tKRggDjj5Ey zb@C_Si8gar6?`WDJiIAMCHt(!fJz9(7G1qFW{r@2 z+nT4P)+T16%~I&V&w?xEx^v(y_xH@I5x}DmE7rCYkFsv-Vzd`a0g4Lcx-q3IAKr|4 zZ{{o?e}W)(Vb#g3F-~-MmiGXUs(FOMhzQgW&jmb!(|!z!BekiFRVv$}O}?{olY%Vw z+cQ&iJ6RcMaw@y0I7BT`r%ZsMSPB=Gkj*=@046lF*!M;vhX&LoLyehjA8J#GOB<3n zDgp*r#i8I4HVw`zhujfO*ohj~>i1v?b+fRzCmp+VvJr_U5`N_gRJ=~+D=G|St?h*7 z*YCoxxFz2TwIK;`s6N|evK&&=qAaNMwp+iwbOp$tbjt`>U&}E7k?t;IJ8@r8Extch z9_40R@7i#dy_q@dajrn9&;%R0dTCBDQ8nAq01L=6Zr@_54T)vV4fbku1f8+=dprkE zM4M3)h%`JVVCXK<%5zh)aca+%xKO`HtEc9;VCowsDrrkL+qpXzZ5|a)Qw&>}%a}5*tU-5Jb!LzVd?u7JQ)98L%QswjX+UtM)+7f67bTm^>Ok!lUd9;xKX+SOqf-S`~Ti~%Y7bYSRS?DZuVRi8S8a79zaHxWu z2bD}=HxN_X1y?TjiDJJ-0f4rGQ^RDaq6mZ@h0J}+P;kk2v~BKom2F8dxbFVS1CW{A zuS4M}aUA%Q#u2v4$~-GwGA-0sfseKigM)-1*65aTqcDj97k6vS~K^+(vKIx&zQ#2>&7589<-#ZjDn*OWLZQGask)Apx$x7sYy zS*2?^CwnpDfajq9LAaYO1GWhLSjJ0H_)~KV52*FhIP2v~oEN)x`jU5vg&>GUTMIuX z+c#Scl+vU9d!;OcMNI`3(Y`*Q(uGztD-Q;R8x0x;*73U%xb=Zng_|<|0iyo`oY=+- zD1w-VgP55klvO*~Hne>no##gMl8Z9tRT;z@=@#E|972t#Jc$SrC?pNwQF>7`<+2#{ zy#cyPDo9)6qpEa5CDFY?Pfn!~t+H$j9hayJr@29z6g>bBr+xu>2tSU5A9w|yqGC@X z&S#{6+9oD9NOT)sp`?b@FCjN4DUdtnIntF{ZQJD)j6BbT9|SSc@=}ws`b8A&vPMCb zPKQ#Gl9y4RUo6Bhvg(Hm=(PAL3h17K&B_J~%bZ7IbrQ@jj8P)cOeO>Q1RjACFRpF1 zmP@gx&Y?Ca?q*f7iyPNc!K&B+@o=*|S2fE8!|I|5Nxw4Or0W0yc?n0mGpzwAlFU1P zV_YuVG_-9l3N(kq@uQaC+D_LJc>Vfcf&1m4F1bOTy0GaErpb^jml0LOwpMG?YduyY zHo}Qo%;ny;vU!$9nvw9@K1Go->$z1)7K%YVL@{ws0MR+E&~a~j&2zHg#R#(H>M&I9 zV9-k#N7bh?0mEt6rix?`{H&EOwDTegs`i#q8Yw5%Xdnn8xM{(zU!LqqnmW{8%lJG3 zC)Ng9j-t|@k%7;szbBJk-@1%GuHABK3G6NV1AZb6lseV;Ir6`_S> zMPx;LHo{UgBQPAgM(cSXfLe90-xpQn*qVYgGha|d2!`x)q2z zlierC3-GXj`k7SJ3BbCj&Ye?KXSYsT-F@8TbZXFmg#FoX=P+|V2!bf8JIq_c@xk%j zDFIa^!ATxfQ#Y{`rIGZuTe5sKz>>gX8y-nn0BuSjdC_O;QxvUoJRMzxVJ z61xaf@buKvBmuNcwTu-UOEit?BKAh$+Qr4B|n614i7WE}JI1P27A zHlOMg87q$_+qLK%0^ul6V8xthd)pN2fXY@Ti$b#kRg3H>(=w{d@o*3#5n&J#(}}2V zX$CS#Yt$60QOeejC~#6wGB_&{0YSkHXFS1ctt!5ZMsZRzNP-uw1Go}%^9*^Eg%XR9 zpJldQUYR-BR*Wm2VBx5wb{$2BCaA(L%pE6UR4rL9lpGW86Z3xryqR!Zd^obm6_=iJqiI z(8NVK2*I%1Yr{>HCSb9cwP`DsQQK&xR0j(S;i#oYU|FFGXIrzVgjOtbJRyeKe^pY2 z+IA&X=#NyAMn1L8gtTbt1wI`|3?|rSAO}Mcv`KcwBAC;~%(7{cQQNT}bVKMWl083T>Doh2~s;G(V&;5oWw3^+dP^&{I`T(S| z4O*0dZ=mI?ti{Y(L;`aYj;;0%u0E>0rdTMelmbc;lJzrJ$w3v+t3 zPAt@mWY8Y^40yr{GKT}=ygcC$MPx-QwxDofcXRb`(?Egil%`LV zpaSnr*pg?qHriY#tyKq575;Cp&`k6MC{EgeMf=!D3z-HJu2eg*>?2y6!a6`|Ya5L% zb=qjOyKByx+l<6{tE9VcpE#x~gJrEXYmq6?6rL!%sgw+=)_SirPa&AVUu`ERy;StxySWDl*y0vTNItCen)IaWu5$8nNS+l$m zT9%j4Fl6MEq?d6o z%e&@oQ;wVkze1aKItxgy?S@nq<6iqcYM=>&06yOa+KL*a1n7BVG}#$jlQPI{3vw5) zlXK1^^a5sbmNE3>EDO`NKqB9aE!t)IRgR}}J_}5Tq!IZ~Mq6VYWP3i*7^IYGq8&_1 zRMF1m7IFJ#8cXVyK17IM(NzWnc(}d2CW}AqeX(VNZsuu&=f%RLJ)7z#!#|B zEU^9i?guTSq#0m3YyWETKidAKMbOOzZqWhD8SP;lT7~$R-EVTWYhn z>Hme5!9Dv7BBzQbpaW=Ir9Y22%}j&PlnAQ}LbC5$)4wp*BDXCZwG0=`1htyGWeMHv zxsSNAs{tZHT3tJZ z5&_XS(ntxaZ1ioTkV3Tw(g(A4>q7+xbc$*q%CZcKWgi$tFftTGs4$JoQFf_w)OImW z>h@>}2V@^Nr77!P@J6k@jDjExz&8F~QZSglHZ=u-4yZ}gDAj^`N3H_$Df2oWXb69< zDl#{Wv04vKyK;-E)_8suM4D#QYbyW2E((!~sdFN9SG-AjCL6NO;M#R&+>GXCb1RMB ziL5QBeMhpsHR8y3>qEwwF(vG#(nLnG_FS8BS?B{#P|`GMxCF5;2|Tsr`a&3H4iRjMebfR`NL*VBe(!D!mfnMb z--M3DD74lzz%1AE!ijr9OEk=4p@Al9+vLG=V__U+splXo@zcj`P4;ipyvO4lst~-MSWKFQ$M*$HoXOODr7l^V({=`Facs z$9Xh}tK||_8p(WuE?n6sRIGN=&OO^4ih0vj>XC;(Y1%kgNidI^@z0bKlz}*rrct#j zmVuoWkL=nPfl|#}05{9x8W#T23D39KS=dmVf~)s-$-HaWab?0*U^SAz1w=c9=YPgb z^t7$Hyi}G~y(md@4H8mOBDh{LY96Vv3;(_4=;iCllj5`%B()40w%Q8ijLA*~$0jA2 zDTc5KV?&83Hfio_7SJCNh9Y<|Z4;-$MwuAFuuZDSjCAInm6-&I_|BR%H_rL!?WrJo z89WZu`M_t@OAtJUk=bg5sxdb81d6KE)a8)ckE@p1T~mP`$!q(J%-n`v+)5bku4~H( zvj)KtX*mdn(OTO@e@@OK1(IWR1f$4evp<#@0K_ly4%T+wrrgR7X`8oED#w}QmQg8# z8BJ=##Lgl8mP@fHQVxL>oV>yH3fAUmxGkPW8i4gX5V)I=Rmr>!L}+jT`&GXiz}!7! zB{*&}u5Jrnr9-R06EJTv3zXuWxzPdJv;d1u9JZ__xe)o)BArGX^T3ZkVLO+4g<8Ym zMOakR)QpmTUE3Jh3%7{5fd4Cj!=4izxFwE3xFf5GgNRc@jw$KSf$9td0Re#SqB&i^ zCr=~{*T$f72-9Es0<}m;xxr1NKED~7LIo%6{@lChI*C^iP}S{y(()ZBR4pd0V4Y}v~F;$7`IV)D9XBCTj=qb8AJ1&N*5$bX6M zQyoc{^~=uKmg4%gG=#bIo|7Z#1K88b#<2@jdY1#>i8O%*Fx1$+Vry_Vti>Y6KnXF-ERmO)B{WIk%(N}IOXtso9M;W%P3ZvJL@7!`g%YZAFakZ0 zl?2dTPth%Yti^Ga1Fevptf>|nE!M=m%=x~smHrXGkp#N!^il4t)09W@ z;r_`ao~ZI%RyrU`j6ur2N?i8W%dYDEmj9E}RQZ^Bb}}wNSkV49EkB;Z$%|rIE9I5iHNR!qYK;?_}O_n--;_ho!tGTI6@6alW^Zm#rjo?FONjh1? zqnqpG;@ZYTlpDB{sH52gu8LSZDKoE43@qw+qVLNIaV~v0LZ!Tc!Kgl*hJBjS-{q?0 zKIdA?)8kdbVCZ8a(X%T*DzO4&x$OcCP+J8osQ$pDRb0?SMxyy`C&XeoS%$_m?U0a-90kU_Fx?dI@xj-F8m3*v$U7&k`wZ^8mpF5 z>SwM73d3u@8&KY`XYiHxcLWLPF0cJ?q%ZcNT}TD(lv?rybm2(J;6tzja%$h(EWNTsdYSN$t(hp5h zi82W6lj8Eyl#F35P0ZNTL4!h+%p7WQ?Rwxk)OtWC`F0Ru~7#Bm82P4-RwCaaAJtoO464m{-LYN87#*!mNTnP5>Hy9 zsQs!kVJ7txv^p;`_mD%|Kq;j#FBCk>K)IYQCuQxMoU1baMjgjpM#I+ln-NQ^6{gbc zB@fUonrWnFZNPk|bkHb#vXQABRECM)D z;a;h8XR380an8f{4pl@HE+B!b%K6a?Z-W))Yo3aL23eb0$Pwl-=jVfbDLu~z#&hh-n$w2TNR z8(TliXUQ=+yA`J>ER@#7D#U=wPgw_w5z4h3K#J%##PK7S7Qp6?hByZ#W%Tn`XG+jf zj9L=`*4m#0l6Ti)7`@M}1FNMJEi!1E#aN|eP_$vmN{E8}spW9bSjyZ{DQZtOz{{c) zyN0rxCk|j@7UUU_58mgAP0W9ezyr0)g&0`fg&3#?w^!Dr)oQ|kf^5TuD6~PKScvyt zQ_|6$2rR3{$}2H|DV^*Vllh*YQ%Fa%Gkas2|1l4k95gLN3hy++SS$uA)^8oqAmyt8 zS8W@ul%OI-ATt9&Q~UQC>{k8diRU$2jZn-HL zmdN<}Qc)ptJgYkcVW!?(DvDW!4FORaT25Kpfab$z)m0sesiC}uJEPNycxk<++`-I5 zVdkc|z(ReQ)on|gf}a%E+yE`kDl(f|GA%$|Y|xGf@eU!(*f9D}0E2}}iCjTPbEFjC z-QGmE%6QsWDdkT?UK(sMNU3k;v9wlWk{$0dWD(Y?2!rdlDrQbX+Fis-LHCn`bl^C& zb>;Hig;r-WQs(A-#pxXM(u$hCUmd+PQsW>UY|m#5?!>k+fkY;5ov`lS)LfsI3< z4Ru|;tf#gCPA&#vnX_!a90L&xqb==Nh|$DVO5t>Ani{J0_DOCF1txIhT|SVz~J%Xlb=1fDwY2ZBipDWY;m47MeMfT(dqM-*L;b zpl%xwMJYXJox};A|3WiJGpvp>C77ymh ziA|{lFvwjA84p6<0*r&+J8+ThOeI)F6lvKOVn5E5c0*c+ni>NG4@pw}brgB6tGA^> zAg`d=*OQ@}$46%3QJ4*Z%PLy{J7~Kn7EiEno|sZ<0H5IerU_3$T&8LU-gt@7fVk`= z2c0IUSF1K~|3|MK3lu+*9jRr96+0UB_^}>=1tl#HJAwbwHlj>PKdXHe z6>vZn-fT0USJT9#cGC(4>_3E^+3f`97E4LCrEX6_PsSlwBq&CZhi6)4R+jK0zN6QA zvufBtl$%K?L~$V+{-njj)z`4VU;3UmrA}L~EqE0>*`I?#AJGk`XTPWz`JBT4N)LNsU&}9_c3CM#uO!5k)mS9s~ zrQ+Ojd@X9U7#9EpXB*CI=`)W+^gELLNnLPtJMT4WSCDPrHYl|kxi z5Cnj=$xX;KJOO2vN|}p)TTR)7r-Lp4eU)lBX*6qQFLJb(I-S1;>cMXP2I&`dPJz7C z!!K*h&>QzzCP@JHfuKwaW0qNJRx%t%!e1Pe0SLcVNS0@|B~Q&g zi@1(lz=#}m;j1vQ*RCik>;fde_hHDHosv{_rCn1O z4ev5G+7?>lN>~Fs>}PhA;200jlCz*s5V7ya=4P&Ep#)EDDYA$ClwsP5Ykw;{5@{6D zPU6f1j1(8i3}kqkZr3&`g@{tWv#Ow)!Y-<$?Zr^m@S}PrUioOK&bpm`#xCJ@mmbyk z6iF8dvZc)zGE5k7Qs{tS)ydj4LEpz)C^o1$6k7Jo32s%rzTB=PhiIO`f5Kk0ZpGtv zwf%QTnbwvX)0IIzEp61q6)VG*RM29zzoZsN+N_BtoK!`$DE%U@lQnCuGLoRWkr>a- zOvEJ1OydI@()6L0FjKiNpAnozmrHG>K0`Z1rp9a0Z$xLY4|T~`R1wK~ZA^)TZ>bp9 zuaA{}=YX2_Lc#Di0c!BRDv&`sETUa3;ut7^(KfcKOiGG`%-R`CG#E-EwRNScBxAM& zkPE0xL@1DMe4l$Cq!&;-xXMmwJd2Vn!?ujl112dEwwXiY2_Y_AlbJT0*^7I30Do>4 z4ca)^MLcr$Zq3%-&NndWj1cHdgEyAXKm-e~okR`>fmvLk4Tu#|%xw+*jBTV{MlDWK zs__`rHIc*1!c=`d&dp$aK&JR0*tbOFT7$570;&dUy%vy!CXgsj_wFOt)zYd7$fuKL zEN4_HrFvMemAw$054$m-iY-N|7?r72h-4YJJ^e~v_{7XV_{U&@N`^z*Sg#mA$zT5Z z-VtSDTQ;dN?I|Ue95{Pjyf|=UKVe{6=?b>}f{4!k{RwJL=VJxPJ|dRn3AS1ZPjGg{ zq#5oaJyH^@bqmY&!#JTnKN59zBeBKsx$i+{g~{{*r0fx-0+lgJ-blth-3A|p4$v)0 z<`(XUrC>kuFy;J)+EO?}hAlX4mkt8(|0(WkdTq;%>*nuQT)+@u4{n3s9w_pIBBY}hTCL>ohpV_*tn*IyeYK8XkV#9n?(TgySu9qqTD59pv>yxmm4H6l ze8i-+OKOXTeoXMHGRf1dy~=`bTFi$n8CA5b%VCu06{vmKA3k4X&UZ0-Y za|kka?|m>WgUY{t_MDGruS*DjAPqgccM9;a?Og(D{X*?j6=$FNUmvm{nP;00QBtjE z&ryBqW%zOwSw9&>x&ah%o%i-VXD|;4zuYmuAPdoV8^VVHREbMp;~+Bo^LHZt%z}8J zk_32;GtTZ^n>qUJIX~8ltx-V1Ggw=Rsyhn*IQo&X0DH)W)sxt)^N&+#K)QPGq#M7m zoh(l^>o0H|fdlI=9G)F~eW*rRLaVlk|6OTuyMy~H#*-y|Q(E4;DlYHz^|>_huzX;W zrDEElzP$H76mY9DkUAd?1f6TDy@^kKJP*AaGOs47?AN=_b>IBpXF8qryfQK>YX-(4& zT|_0js95^hK5cXOP|mmH{?G?_hDmP#^hxji(Q}I&a5{BC-To1N&2vBe{;_BxTkY-~ z{;Ck}hs&RYq+z-Pw(lI<_k5^-GCj##yv`t9Meep7(z7u2<0ShoDz4AS!Oj_<8#EpY zLDFk9&b+t%>)RGE`8e;tBw^H%fA3n_-<9=e&;8JzFC3pE>ZQHJTkqmyIqM2yQcCCS zsLa9EXL}ZtdTiko4cjBYqUtZB{L1Qo$x(vu()O5B(A?nr$3xtUXf>KiG(&Hm8#eiv z;?#wfaHJmVm&^Bj^dA{c(tvs$*RhKa*L`-M&;CPqPlD%V3t3or;; z^FeJCdGGhl^DNW&VEm$XV)TEXmhbuSJcul2%(*+om;Pn#lf*(c;Jq)WA@z>^E5g4 ziwOq^+syklW!wWpKc1R8!>)YPyMhUPcEjiM*q+DMVYuFC6n9h&Vb2SFj`|;dz-3j` zZRuz$89e`hhZ%to5{PEUWzAY*H+id^|`jfLC_fvmu`yW69-fC%SR97f+P--H`S3nG51c)Y12~@Fe?va)$@x6~{($<{0o&_F+_wD3 zQ|$G{fY)ifaU8@;N3LzqC^wy@1$Io;zw))#_u-c+5XTLukEt&)AL^(AM9U`$9r$*xw(vA znE!9y{^RFA{P9n3fBxaepWpswluzlq5W?F({llm59SVp4^xIFr{m1`4|Bw0K&p-Yi z&}3b0PTzkL=l=H3=h46X{L_#B^YgDf2sb_-Z1cgfx*UBER-}^|#iaE{G#oge#9*fk zn&kJNpj_sD4mbHs1oVyhmESsKj*D|~LcH+CC~sWwvhT?}pdHjMdE=_>IA3WtaxPBu z?_-0$%e*Jn;=r)@kGxS(?@w*`sdF3VD^rlV8~QOBkMu8({jp=wL7WeQubf+xubfxLa6j1R1$@@^ zo$w##Nz#9q^%>F`;x%;f*L`f`dCBa?B5rwY;KD~1aUiuyiQap-=INhLZo6ylg|(k~ zBYXTSQzEW{jA4lLjp_ca#FJfQN7{Ciej7ksDl)-qFN^<-m@OHrpW3^wAuNfM^_Bit z+V#2X^WO7}ugq7#EBmUhdiN4j6>(7JlQ9#npkPc;Zre8(!fg#aSoiw)kC)xdv55Na z;H9HM3lGMdcjH~z`8#vHeZkU~@Y)aVt`_i_c@^LIg_Q)#e_a~O8%x5*yRZRnF37>0 z7tp)k+UrP{-A&>WGIlVi2d@slUg~xuZqH?ZEZ9Za{Emg4bC}Oj*OeG5yhKgE&(w{l35a*SmEjvy!c&CJ=OmvA-HKfg8@@>&nUU(E#Stg{#EUhfwc3uqc zn6KvE8t8%`s`>tt&|oX^=&|}iMKqX3AeyST1-f0Xbz(Qyls_#SzvO@Hh{W}2U%3dz z#IHS@au=9ixF4v`tQGezimfnu=`(Zx+}aBgoOtbU`Xyh4aN51N`5L0T+tvzY_ujXM`Ec5?))|n|1SouinfT@2xHK@zM^#{MUA_ zA@^__ZXSZWOT9?WCvoAUbeyhzK8eH9L0TJ8Ka)VjE4*{K&P7OkDfS{uooaolKdv^5 zG!hfqbYLgwr(5>t2b!%7EqN1SU(Sb)NPuV$Hcy@w^PQ_zg^0uirVbm-@D~6w+P&wK zcX^d?M%Iid{J)}Ho*}fm4Y0m+ht3P?-4Bb}leSu730FU$8a)J24R3@IVXh=*+KI^% zx7o2QQ)|7xMOu1d6!3~>9&3K`fntZ*i&0BK1Zf1^WZhd z+q)mKu`4TX$iFA%aFR#N926We;&#BDUCa^lU!V;-R&zghRP9gBTEO5AOz&7xwcmv7 z&%GOcU%2h1>&NY>?XO+(U9X%KGG;s$FFuF>6*_+H^tbHwX&+>-Z1AEoKqWdjk#W9i zLYdi5z_@jse3@`WD9=>QK>cCO!&^DLdSn2Ut(_2;D3_e&Wy414wYzpf(jUJ;At*!X zh(>HM*;Pcc$)cIH`Bi%-szM#-tW^4)AjIXeOXy7QYPORDdIo$#ZpLtl{2oC~>+vpP z5xZg{3^5^p0X}1xNxF$K$xl+Tn?e?*?GoKB?Jt~cSzN-1jLB0_qdj8_ej^@5OV9}S z+P=HpNedC6LR0z}k@lV?x>?8WAmbhpbzg%FFn}lJu*{!Lgm30{Si4EYx94O_O6TWd zWQ-Edm>bLDQZnJ-(u#-wm34s16XPlK5s}RWSG3dKMBHZfLs$L5?-Uw>g&6O&mjHj! z!_v!Uz7ixvySRhg(Sj<%3CRh*K@KuGlTMQw+7xHJxl6wO*v}sAyP4hj;Qd>-A^5LB z`(sBUc+A#p+v+{`8ZCIt^8!5v?{}KU_LkZDFVF_<07T_v;$hv%%C!CO1oXShgAC;| zw~B+E?nsK@y4c0NWf@-ZC9B>++@I$=cT*jIJV#`1UJS}kEh^&YUt4qWu1X1UXQ#5} z5ic7eeCFBDmDCZYfFeuU(24uG7Nqc{%@jm^&sf6U*vua>Ih_Qfq9KqPkuSDY@Od&? zWM~rYg{Dk&Hs5d-aaPd85xQ|G*GzZSXZ+B* zT_p|zu}5uHABgMsc)(>y{;h%JaIP`15K~6aU%Iiz#1zvp1tgbvV*~z#xdDis$3+{M z+!wcX*C06fqfI2s^T9#;6Z>N!Uh~R+NQ^-MM8}(OdA2!X>vS?P*bEe|)_0!mx4R^8 zmaeS-LF6YHosKJvCsKO^<0a_PBw%%O+lxSeAFMIPzAB&uRER^Jl#1q0Itr%RC@;bf zVb~)rbXo!^JP`&2B|ZA^Pd3)q+>m-hWu zzdNzdQh@%0*{=mAZnGdW8MSSTfS5#1f83{(2{X*Ky@)b?IKmt@X>lfs@L3AJyZwQ< zK92)j7$tKL&LtZ8CilPl%aVCy=(P9MA(9Bg&mEZaT{t7!oTU~%ji|6#weew%v-la^ zHWX*ZPFno;nb}OPm}D;{Dq*goJK7KZ!(Z&RPK<=#+WNT)6A@ULxg$oRRtRKe%zU|< zcKrJpka?802|a$-C)-)o3HjSq?fOtH_7yi-!Whlff<;uOyNm~0={=FHG;ob_ZkjF= zfT+3dr2tPjuXDr};77PxNX}hjGYyElHvvs8r@}&@&BqBXoQHT6#hJ9bn*3JV07y=w z-{CkBZrUAX86W}81mWbaMDS;R?*dQ!0jF8ttzP6!JwPBYl4NIj7e(imG6GX znJy?96zvXS0wOTj>Xz&v5>UG>Br;`}h-1ZCmrEAm&t=cD*i3A)jv8_03m&#PD@1dg zL~eJaI-ZiE-EH-XeDMxLme+j}b;W7Tp%2t?67#Y`j?z$&c1{35&_=P)^qX zg=m5?o`~#-ni*(Z1)e()^ZSK#fjEpYJKujwj7UGB`ONLLgSAzG8!(jmJo>08qrCivEzreT`S~2XEL0vuAYF%6+BKvv^atU z1}yc=oOduquwBfhG=sVKNI0Wq_R1J#GVbHXfGfOo`!C44h!eCM*>;71pU`F5=d)Ux|e~GdH zf9g7k)Wdk9t=-Do5LE_kBKqIM&d%P6Cyo1CkRjpckF#d+>LMKdunRQ|PKnixhk;I1 zQO$8#APNCWoIPc!*?IL4UONHtKe>MJbtA}rqesbJi8cfiDIpQPgL#hCnDC7uX#eU< zySY#hKWI}cFtk+E=-sX;m4LfD-fqF)iq(o#h4KqEeB)1$`}&WHabYVB_2<5r1Cc}B zaU-#zP5L~d_WTg(*;yfmtB^{E2`Q3BxP&xg@@c!}b|(HFh8CfAKI%5x_ty-5*)5TV z;vP)bE;aiRiHAE$vPmMdJHCYMyEfj0Vz@qDN@4z5|2uKCQ(NX2nVwJ^z^yFHzeJcd zHv^-6T8OAI2=c5w1^$x23~I0~ZL6jDO;=)~JTwe*-zqW|EnQu~9zQsh66VrF-+o2p zM5J)8`_-=Pe-x@#Y3w`cohUDwiTmAMPM%;QHgCPsfx53`E zZSmcIYbVG@(X)*}57rj)N z9Ms&sZ19&mIz!9$xD+~Y;zod~{*XL~^18AP2oec;i|6i$2rET&Ez(4&GMG#~(?oF6 zzr(&LSslnOPLJd%BBLEuEi7-TL+?MX}rnC9&R>l*k?FFI{ z-{w2icBTY3Kf);sy<+ZM`OB;ir@CX$CeQ^x&TWF4g>w^kuVi(*LPOl3ZQW*Juv|{eBC^DEUGnucU`soX{KFARy=s)5IvPkyX_PmJFj z46|o`AoipwOyu`PHkU+vOe8yKY0hVIgx~#{!@>!en7Ep4g-(*EZ;j-4zov65$di(G z8~GPV!qlYPFn^NXpkp(aR{J{r=HBG~)ImrLUTAVqB$5Op19LrN-rxCN{MWt7>&6=M z?MAva(p=w3P%_MQwt{Lu>|AkJLQ{N`_*9c(VR;GS08~AKl1~U9|8SqNTxk>JvO2d3 z3e8vEG%vp&G)$K6Ump`<3`Ww;hU6@3B}(?% zHoECgLED8fjY&zP{-4|W=(Zn$$ajjUB>T6iPQXMfl9Fv=sudHbrFtso8ud!ILR4zi?>Mes^v2 zB+xmCUYHXeugIE+8rMv$-3#bfGE4=MKWK2@i~Cac!Qmk0Din-~NPCaH(7xLf0l5A~ZP*L`t6+i^stxg3Ti3HZcQK z2MHY3#;Mc#sq5aHZ8>N}6W1{XO8CEu`s=~C382T`EaV7an@rA6ekWQ{L9?Ic3%`&U zE(c~f%w*~GC%uvZP)TTCt!kP&_%r4X z1cM#x)W-|>pN$>4%11*q7Sk)OXXZ;OP$JdZAG8kqt2-}Wq%Mlv5HTRY(R3-5gt+#N zKU(E8qD`qsRiK~(Pf^y&afgott)oI?erus4G$I&2=5it%KFsAr39BYNle#*4q7}k8 zdtsLmMS&BK3AOE&Jc5gn+mIShS79x};^k!PAYgw2+!M<2LrsV&*+EGCIz(53RAhtt zMV5Xo^NE>B2=XPm7eygQf+Ty1T-s^JPkzM62Fns=`@^FPeH3xmjftMg)&=R*u4tl2 zWI{5oq%{QIIu&`pt2c4gV3eABfnR7!l_`XD0+OZ95n*PI}60fEnBz1 zjkvN_zzjE?31xd|up>xxHlmlVH6nKrIZf?rAxfg*q3M?B4Sfh5SN!))A;VEzJ8s+gv98I=ydDcGct0|_h|vbtFbIvjGlaA`9bv8U&ytC^K}6p-bWb~4b3 zSQP+&y=i8R(R_S}kRf6WYLokhNiykFodZEG3Q+h68t3}Q;@AjTFjjwTG@vCG_rNql zFT4!dm?J0gTFSJ<9sId~`MnYy5k;mGS5c$k?7b#*34(uh!j!>qb!=QNF_qhNJNT_> zTznOdI@S%T!I^?RR-EX@k23{HbWwmho=b2#GRq9GCCzKXig(ZZe2FoNQ2oB$wlQJcaD6wm~76eqym-?AzGvW@w%%=ku|`OLeCX&<+_ zYyqRr@5hWc5;Vl0ZlyLhd^o5?&04MaPNF~NSS=z+f~Ro;Pw^&9Gf&^NRSquiEn@nV zc32T;Foy8lmcVpa<%Y;Hsq8YL1c1)elqHXtXN7^bFbX@Z33@3~l_lsp%((H09x!4$ zCk2*}p2+T6SwnSh<9j7k1sFoq?U1^Re2Qs!S}uukZQ7C?3T-36vm(3?7%3Zu}&!{iwPlqQ|faaF}%hjQ>l` z8X;A5TcAyYCBh;2&2Xuhk`LjFq*K4G36h;Dk=i_jET~0+zPnrifdmh+K%uoD+~ylsR3eqDpWk3{WL#6G1mS2b)w> zF?Siza({Z(0sZ2Rfuy#RQuoB2Sr_T!DCDHW6`Ls;O3n`|No>GWUPDEJDl0Kk%9 zX`J+xE4{T#Dp^JAQ3NVh`krtj4M9v(t-<1?H_@N7Sg3Q+4+wu7P*TWxm-&COlo-=h z^9yIxf<3iJU!Dvd_6D^{e$!#(3cgY_|c+~FyLIJl!?KL4ZX*ysHO_jZ?A^S zwdUBHX)xp>i}!HTho;lSi;nKNAMb(Tnz|p;v{z8Y$Y~su({J_Ce~AX@d+K(F79ZfS;~=|CzDy0ts%J3|MT*@5)4A@d|27epd!slC~K# zVw*OX5X_sHpVfgmN(9*lB?H(c_$*!d76ks+fum%a?`U61!D$xIUusX;;tIKq zz7|A`^_6;p3C&qR7jq^;-6*pEmGC?>57uD8&t-l9_g7Bo&%90i$n}WXLki_z;&wqk z(3VDzV7mT#wY`5O9VL2IGw9P<0Yv}uVwTX%^;KTQA9U7%rmGZox&Cwmc$%kSwc zD35D)G;0gMk!SXE#FK~vZU7vvdCH#B>F9|tB@YnCV$u=Eeh{X^Wv4SujnIKU=UX<0 zs2H9YnHs<)SE#~N`HdjQolOBT-G9o;{B^1H-L>a;M3=-0%Mnq0cAPzePY6_2 zW-;pkXr|32N({F=Uu1fL9>7Bh|J;lF5G+uOTVm^~VJVFY{$5p^Pf8~0cY)ZHY56-7 z^=pzAh@niEE$_?}skjaa>5~#>{Xu>05WnmyLb zz0_W!_)fp;Y=Zvji~*wg-I_f|E~-~NqmemLAmiy-nDe-?!PFEi5GT%v@VN=1he1n3 ze)@|A7li0dbUsPJrtZ#9e`wvMKc{H3KG8;rdDS;pXWBiXNiYBr#Ld+qg5#Qn`6po7 z{9vNKZm}Zn4wZU-x^ymq-}%|>j1!{lQcmbc;hj-|dCGWLaz}cu>7EEeRd}QXBLGT@Up?@t-dN zD#D>5;L?gR@@YRIBuZtrM_U|`$f=tKG)$Kha1b>ri@Q^h>2&yr%dU-55cI_Z#ta7C zu$d{B)3!^Rh=+oR1akt@>&{nFx!?j`tgr|!dTx`+$+!{O)@H8o)N|9%k6$o4ty8L zT=+NYI9~!{I02>9yBO}?QbyCX8S)`fDTgRf%1Om%i2A(29|t3)VMBTrq7@7~>@b(O zwHqdejxz*;;0c|io1>%5l(3?$d;eM@^s8}k0`Mrb9tbCorCq&5iD_*txk5?f(%hLK z{!1rs8b{)U7&W@8>>Ga}8WoC6^XezU_1`Q7^TktL#oR=Vh3gPNz5Aay$uJA;$|4bf zh=Dcmr2jz~t8lbXGZ8tO0GaC}ZYYEpQak~MM0D|L19I}0bL&_+isL6t=R+M%a z{TNEk8QM@{@e;!MAxj(m33ToM)Rd(Xys34W2sup>fh{FsRfvp*{6e{MCLYr(gpEKG z;U5$S=lN94S0ee9sR}wXfJi+|0wHk*kw8chBQ*M2%0frJ$I47A^j{A`Sxn+hIyLOV zM%J86T}DiuN;>2aqBZQmTBPi278P@e{=mT^!19hK(-{~~(6>ykg!%_@h0b-&{QxM* zug*A=-o6IA-N_OmiFWdBiqvis9!Zr583h?Iq-}S^2EiTC9)zg7>4QXn zO#z}cpA_ab)JllR+SuRBL;a~}EvWb%!8l?|ZGggzgS+$4wue;^W9pmWe$jO5`w?Um zFP0oBHLTVK8Isl!!nEgNK@{c>-$E~Y=rI{s+b~Rc!Nk19b3Y&r@QblT@wZv)>i+mm zbWDd%=p!bSwj#Pt;x>V)5f3gBU|hEY5hfJSyu09Ngdcgp^HGxYd&~^^t8^Vo5#enu zq`;953sfuTtF(bF`z^kLe3ecE2!Z_7fSV<3E#{XB&7JT;2K3{G^yGqCU6sQ*UFW-B zJgX(#MQv%DRKiEw;y)ZMK_Km-l6fZ7GD89sP@vpFgQ9V|?FS1)^m3bW_@Ihr@Rc*T zhT8~B3u^{F4~YrMp+W9Rr7;U5TbsufmF$HLZ!;Ek)cB)h#vA5<)EFkj^OFo z`Zg|KKV;p(LQ3}#xJbC`+(Z;v8~uo+`N0FOD1%@mnM8C&e+1d#gORRQxsENIDNTy;^r=JgtxPs z88Am5r;y>xUkx;tlwwQK7e?7j3mswn)`wnX5Xoe$KVZEhk7pc5e(sYw75C@^+9(ko z9T6Yvd0Pr0Ir7;gzgP=2$Wlw0ON9#X4IFfJ8WS5woMqKd9Bpxvgn9xFg6)eVV5yVy zSzlRt`4n4o{=UnE>vK7`C+TQlt;5aUPDnn?LjcJpUmNznmrQ;=qx4_*Pa(z^jC2OL z1L>Z9Il^zYpFD849;$_&*#)XdLUCnxK7RFyvq-Y#%r*+gGpp!2!pN;sQf>ma5 zbIHWCiNY=L)=)1cETc~HdO2cKQe3lGqZgA{VwcJYa&cUSK)=KNY{wSK9}x4UwGJX? z1K+$sa;>Y(@s!_;$~cjdZ#I_v+WpjX2>S7PzWW`y&I!~k{5gdndfe~6lw=neebU9P zcbl-Bn8T_o4-qUpdR?ct&F)2U1=SxZj4&MIV*J{ELP&V_tZ>)N60G4gso+?G@92M8 z*4y*FM)}n{xz-jI!eeznvs!&cC2>g-K^ONe7$%$1%$4&;hxt_t{X3tjG=`_0sXvqM zpOz}M`n4nbpInD$8@`MFSYpqqdimio4L8Gt-^J69>~;J;68r-=4C(ms`HvKehr1JI z1(b14A3vYMh3t8fJ1#wD4a^$wWOnMaG$+e-l;$^G-o1-8iQT5KSq?`JcvCR4ZA+?C z2Qy5>8j(DrW(}vyU4<>qR&3&yyjEe>7$u(pE^d+!yt-uNESik}z@7N?#IB;1u2(^z zSAx~OIC?umtWi;^zd~Z|W0csmi9}x6&h)IaGk><&15BQOeA*bb!i1^B0*`ebbnBrD zD4`RNeif{Y>m9unARZF->AVFwJ~kI4D4Js8oFx<&d+Q!H8#>OOE zUX`5s_|im1|1;GW!97d3?NxiaOwKp1^nk+do?*Cs4yadQ~L-3ILzafZ})*Kk8GfB3B)mp2lQ>buba|i zzxDQfEndIS$m@Jbk1xrW?K_82idu`M)ADGkx$VygP{;9S>WS^q_|HVS+26Fhr(N#0 zIKv<!X|Kc0jbPFN=(_7UU+$sP0JkavU`5g=MPqlRmna%L?tGfL@ zRf7G8^msDRKJID!I^w+5-utXUMu`aa!|55_1&0KYvX>!O!8^PX;vdQUrk;IIfuFd# zw3ITuY^Yo ztChbhHlBwZ8IM)rop$GqswqK=CmkdNO9N3_i2E|>KKY9TxYe(FitNyQ zY4XR_6;#}U$;lbJhN#3U0OA!4MPDkR+jW|)=@W1WuWNv(fN^}Zj9GSkH{O{7c>uvSufU;ewLp=BhV&1^mvY$!c zmV9jlD^p90o%Q=tchAMN{!y7(&{?ZLnFw!8DM&X9$d+qyWKKmVdeD7}`Er%b`qfT} z&X2g<>ue3RAp%WgKC*-EbH=c z5PkBE9LGPVW6Ibn7F?Yt)(C|@R}h`hB`ZeRpPmgRerT~e55}(@U;KtQ`j~IO>d2 zmv9HZ!B&-{V6bxbNZm=+`$zk$LHfoBiRb$|pF^1T>TBKmxV{IvxQBBJ4aNOfc+&O8 zREa4-x9DYA^7~^Rb!&~b`MYjp>`ysZg*sa{A#5s{X(9nZUthrHMEk7B;iFcT@IYOH#r)L!n|DY z)9`oXgFgkH-1ad5fLf%`C8}5n(4Fqn^vRTr?7BIeL6Fk~S)xmaX|6+T(<9IAsI&K$ zkp_h>y_nWjB{5CU)E6#ci~h=88HBKGOP;B;>i_h%sa66?<4h=LrUPud&_wzuDZaUg zoIUUy{xc_!*gp%8H$mfp`Fol^zYcLRYP6lw3hh4MN2YTs{=@q_ekkAdEl1IX9fxZ^ zCL{KM$1YM0HDp2_^fb)0_@>k_a+{D<`7g8`{7L~&DS!T2mu?HU=Dle14?%u5@n?Ol z%+$DC&A>4!G;?qD@%v>RC;98#_$eXI!eC0Wn)?YidEJq3fdLF;snPjL>LfgDii<<17As>`1F7wz1^{=lpN$1t@iUQaqE|cZ z*1p?7lOn=G`8OB7fogd&8CW0+-^=eH)8M~atNxS~Iyjh#EWFC4ytr=d6Q4rhC~npa zX;C%(R<}j#r+G76<2kp#jg=)aL_n92SB7XpqGxkrk}RuUE8A5MI? z7AXS1gjVd(D%Gn@`N)!y4>Cw?h&O6~BeG7`WW(7A%iYv4%fA@TS>Pas!6#^Epp~~| zo1_ze^|HgeaEy&qs3xb{Xz)4i>h37gkK;va?;&&5Rd%wLT0u4)TcWp`V>NiZ zPUE*lO~0Loqdlz8=Rz(;32F7(BnAxaXtMq`RD9yoR!)5de%t(p?dfPs-9UH(Jk!-a z-atv;_M_4Pg9dBHR^e$k^G8B6f1Cn-$)(h9H;#ETsA1N>;;Rd$=JSMX72@X~I&=nt zM{R!QH5GDv?DlNYr9?l24eM#gEAJF*>chzdMR!mpPxELzCgFVpUQTst@hBhP`66jX z4Wf0kt&@IT zW>V-G2n`eH6#lV_)o99`4IngI>q%02U3dRzgg~FRRBG!q4#sZH{moSBc>-NVXh>JJ zx47K>TnG<8MR9{l-*;^e){mw9+54p;xW(*W1+lFkPej?$ej`3eNY&@YPG5Ggc=epK z{&CUUNz{PcuuyvSR4jY+ZZse@Y>UV))|MzL6W)Dfc4lT!zrLw8HD^gcespk5RF{fI z?Y?qqWG5U|?h&x*P~4+zav1PkGAj zS|?EWnpbfyY9ic*AVTS?0q=Auku@KmS_PiY!JJ^U%3Oj>xRs*DIOpj9_aqj(s5oRj zL?E@yA(ETe<<${8RGi^+PwU~LSTCr|B(<$t%aX@T_n0kTTYZ>cpl>b|x9Rr|c?t7G zS%SR8g#WAU(gDgolIpH!tIGA$VR*LM&r$fEPG|MYSz0la^;P8mdUN!KGw)!HQ>9D{ za~w~D7n}zdDN4LU&3A=KLihV5hoYsjMh2#EJ>-9(8~jS4p-T9#J~I_vFK_Nt|K{fO zxM&A(;FeI&PaBB5U?YBj>Q=DiExyS6ur=9}r=2H&+aRw+(cGwXJW6OIe>L?kreYxo z_Ff+IWi#g@4safl*#E<^h*Weulc0LnV{7USj*5nPz(9e~13=)GE-t^Y_b0Q!&J170 ze__q6ZC zpaHU>N3a>(8mljcK9C%eG)48e*hjW#S*J6iypEnx{VXGO>|}~b3VAAp&y)16q0pa? zEbP}CGmpRlk-E0u3!0RuoNcJJf>QjJpo}YFjip(m{iDWKUjo4v9y1)AtEz@h*i(dEK`BtS>KX?iYtGcmTQ6 z?e~P05{lU=lrB$T3JdTgx{b_%H8D#dqedfJ(yxnSaS(ASp7}#?tla1Kuaj3N9B?j{ z>8}$2;-qOI<3U_L5#m;ON0r-(G5`MNQB0k(dQ)}yh?Dh%d02$Q%|A#ki5qw(#=Mxg zbFUYOpeXz4q@w-Fui&j>qx7`#Rttq|aKIOFgOP8yH88#lb0U`bes8-WGTlf)mMOvs zW8Buu75Oj5XPM4ie_nLFmF_e?9Ys~ieCroVw5Ee}2k-oi2I`9uIvS|a?zF$hyj%)DRq6ObV)^cO zOg^7MJJEY`=#`ZM@a@H33xv*Aj%g8c(gL|26}D!ql4!;k5t&NFoERIav&0Ioz70u- zz++IB|9Q4QKmc#utOFy?D$!xWr{dV#<(2Mh589M3)W*MU3Ge;_p!)T3>eLv zZyQkK&s;}1*>xtzMH~rCnQ{*~Bqk{g3V!PqO!OPI++y_NS&jTSvgT?f#Bm()HPN&_ z?u+0ja<7r^15y@HqkzCh&zRAd@is?XMK+0?A5o$Ah$s;KLT#YL@%Sx>l~x zW?zG~1>1`%D}0Le+unoJ&USlx`dtwbzh8OF2*cqamqHu zzPX*)J;*`#_qN_|seENK_&jWIv%W=vRh zYPVgMQxm^+sOGh)r}v3bdeT|W$AKuhN{f}|^}VIqt1K*tKP~Q`b(zOo*9oU9$sq67 z_MBmnqcOi!wep)M6kJo9znXyUUZ34aEWk0EduAa{;{aOsGJZCiq3r8AtBJ-OCkxf6 zXyz-YVcQxQg_>EFgyW`>SJ!k?&Jm!i3Yi$}OxF;m#HL<7&;~MRFr7;KQIS@J@*Av+ zOmLC_v<=uw@TrMRc&?v$z1l-(t?xQRZ!4m|)DpzfkxLk5t-R9SH=|RWGsfmPeVy;* zp|75IrlozfdWNWm-D#dVCSeI4Jw%_4X8nF%3wYNKviQD!2aww~`FT&`(OhD-vi|^m^$ncq96nVki#78K~T|R=)nREKvxqFp9%*DhY)8F z_m5T>UDw;(W*i*HNjx0Vhtvn4p zvD=KK)>_D9tmpmwWG;*W*tdn0)1QD61Bd)4pv(mcvM@f(=lgRwj5NBORIW25;O2Pq zwxwg&txhi36LF`F*&e5(+jby83_iz@PBEc2V5mXhX+HY4f3hkXcxENjiR|C>Mc&utKWw+& zEC9)1Z%+yCC}j{OxwI{H-JOs?|C_BthmcdmiajZTTp1pA8#(D~4Bu?IoU9_Pla)pt z+~@ZD`T{`f=seKUJiQf!RF2EmsEXU#+;xAtPcAFH^9q51G ziP}g%67zQjb&UXTj(7_8-t9c)n65 z!;5uiZtI;$csdZ$+Krut1HtW(kSo~LRj^eNppJ#v^%T^_i_KdM=XUwtbTKMGe6%Om z-PX1!X8_%TfQR%C@|{807t_=6f%L1A-fm0}BP?VR}E6zXbcM<6tZ?Boet?N_nilj0?Se%NZ9a00yrr6If*IjIim4La;=fM1IZ6PMsC_JRNq9e7)KN6#kZL1A@J6B zM%z2U;wU7rfZ5(E0O(ZEOst+t7|nC=Lhe2&c#9iccjgL`VO*D9g`)Q+H{&~>{Z71{ z-#o;dcXI=EwqXvqvEG5g{;64f1w3MBByPLHX6W2%4bcm9<&E^RKQil8+7Wl* z$;~0`vC72_{lM^JU#+nCeS!rH3d(Dli!FVC z?S`N57VHE!{9IMkB|TcY{JMUY3u*ka?dzAHxztg0<%KNhwm2)kTaz6Fu5mXT#T}i) zm2dYC@jfZ?fN!Dxh9tMI3z9$IpDbWMV-|jCL3S6wm>|nk4KD=69I($ONFM4Foke=| zLp+~S%z0579P8#vdJA9u2kx)vPtTUcvgOJlqmXi@lOZVh-DK{Hef0F`>gHpx*X| z_DqYLPAK6(Ajo6a7$tk4^(Xs1^WR7>cz?mOM;uH}hECFg*WgQ7UT){@0^R zWC27sUiahVRN5#3>3({{DW<-wU3SH-U~k7jW9RS^BAZ3o)*V@QCVR99nd(5~LcU76 zto=fUrdXO|koAWcPh)t41S5u>AdVTgiod%{HkhYC?BEDw3QixrQC@)mfFf^KF!!_= ze25FQ5Q^0cz5zH!yOfN8ChJ%M2>9dy+f4IE97HcLnn-4Aht1!{9mI62^;ZlcIiesB zv)#)yRS1E|d(L*J``6>aL15V6J;!Z`l(8+@ce>QDAVUjI#Dz{! z&5GQaMrh!cbT!uJck-#a8TKW6Jw|lH7g-k4ASVctv#?)zA1E8En$K(52?S*S(#&#c zP8Za-&qpWcmjqB1NQZR!-RA}OP3a~jTLS23KiI)o1afTb8ebj}Z=L-dh>H&K_tK$u z8}Fr;fL?{!(C_f>*3AS%#CJ+u;L-OT1ZaUO^nLE)!=LBJehytUjNgzavPF`o*Da90 z%P!C=C@2t{ph&(4^~>!&jxOJH55{Umf%av(hqFBv7iomGzpgv7XG^T(;{DPZcaPx! znYRtN?k!i5#;pm@SneNO8CV3L>%aLuJJkX%;Mv`4MZ)bPZvv~J@QPd6*k;Z?cz^omIY zlGljr?h{3sF-Vw8l-J5a$aT7hPtjBHciH|$z)z2+ z*DpGq^O@Pu@NcR4v?H^#zE=+ox{eJ04F=_xo)UkTGlFhU&C@^wvk>J+_Y)(?4+!)+ z#EU(jVd{e|>M%T=^!TjpCis09(UdeiSnNf(~QB?N#xU=+`ih6@?aOQb3N zEaDBn@l_n_U`ti((+6ISGJs{i_L}&?my4L-?y_>N;SmAT9`se%N z{kulLK=d@$p54<>?Y^V~G$nn_LbnVk9{8Sx8CLxp|Lyq0&;@Bc87L}v`ReA zcD8+ftd1)!=HluK8q!Jrb8(mzX*R4x8u#`^5C=ILi%h0MyZoqGE%1jy^-qB^*%94{ zb}+a|PB;e0EF1&L9Vnp3kG;=Uuy}Pk@1-+(mrX!#D#syGkf!A(1bnhX=RiB!?SBQk z-ZWO(mnqdOfOfuYkT;jq3w?Z9lYC|s^5X^j-Br`wV%?q()Coc05R zJ?@cXzQ0N)L2V0yvKoSZTiK9P`eWdrWnL8gbhoa6#Z~`_* z&s9_EyzdhW@xOs>9@*cta2gO7`$Yd|Fb?=Wcsfkbw-e;+3uaBYxT>NBxUKIz!=hk! zgOe;I5XKN0RM1G}wR`aG4LHl`;BOVF-0dy|6>#eoo#iVBU1hOa54w?;-!(=;eW6U< zUH6ghq0rjezDWe?qyRg9gItO8#$aIAgEyorSqLa8k{o-|gU2eqiO5B1h`GUEGlz7K zI=uy8qX4K~KlJzsLpyu&K7=W%JSiG`czRHWWSBlZTkn(z0oHqbv7_PmiUi;7mM=!T zk;LNs!|)!A@(=(5}w$qnqRMl`7KpL#Q#e);VeWDd6l=DpKV#a{x5@ z<^K9GT+>Zkjfo}{a0`Dl{XXG*^VirU`<2l6ezL!BwIPul80-aZVxy{p>==5P(B+VT z{g5fq7ndN=u6J-S7%{VTC?_rg=3~7+)3Izr+jofqth;3tzOMkH`mYPFWXmCXvJMPa zn`@Z~kUw1J3Q_XQMjk;rF&pMD_5I$?4%}SLW5$OsPsVeRS;t(kMF0E4O(3MZd$c9h zatzXr7kqR*{|tG;(RUp5mR*eHp=*|pxnCp|t3yBvFvEAr((kV%F~gISNB>zZ=P5_K z?FdE(C7?gwAH%AqW$*Y-VyIJY@9s>0%3zPcGS1;$lGWj8IOcRI4$kNM=ZQL(`eeUU z&{Y2qFewu1`OgY{gAKXeyxYWFXQ2wPol9kj&FQnVXJ@x+%haif&+hK?u=oBLXb&_| zvVN)+Z~-5#9ZxA3 zNR}D8YCx1QOIh8SOuI20wOE2=!R_7m=OezrEK-{d1%tD0ok2+v=7DWHn|60H;s3Uu z1w5aQFdzPGu`7$EF@3)Fpy)P%CFlOSU==O;_aiiV2mx&nF-L%BR!hW_uS@3q{vM`(|CiSK<#g>5BwDrf07P_|`7@BV^0D6*>K}4U4Me1W#%BOH=kz`k`eO`B_x+=eZRsc=CG}VL8?!w< z?RKIKZo-A;&;_*wKit~)e`L^ii!9w;f&QrN7JwVCP(3=I7BP=FJGGJ_I}Z_;_HdAN zPaOoA8vX(O%Ug3KZWjL<$8Mz6I}5~KrT0%lb$_Q5C`NH`6U^XKqQvj#liO z$C9ULJ*+LSTipt5Q_*{%ijW(i7(_Zn@OFt|q3cT}i25RA>7S1nFXqtdw=sHt^?3WH z+thr}5PH_63Nes*Bh=!Vi_SthqlY-oTCn*AnS;RO&ZE0Vi^?WT3~;&td<|b*gkq;{ zzPDtJf>ydef6nFcg|D!PL5(1vJ5J{e=k23gP*-xnm(P$!(Jcn-gMD`ya!)^V_^>_< zOwW@dyUqu4u`8~>7VHegJi8dwm-=W6Y7M`9-u5=A+SazZyQ^=xjSyu%^8JfQ)ZocV zf@rsxIK>~ZJNt{uEC>)dxnTrYC_0ajV{V6O;Skq_r}r(Nm!jD3Dxd$bSGCOlws1eg za+_PFX+_1=ooNZlF#;X@`x(RRJ4t$Hej()4xm5$j#RGh1t->wNwS;tbgiN)d6*I{} zGKYnXz`|~_b-;d|)2+4s+d-f1J~Kosl7FvT6J&~QwTjfxhB*9b8FWV`8t5$0)6Ul_ z`|kua3A<_Pn_zv>0Z8+%H!aqPTx|kE{+{F1boR1yHaT5p5n!$>9(j9)RB>sq_+~`~uqc_+)q_5n}4HhxKHeL7c znoGNOI26^@30oS^J-UyU!sOw5Z|Pn zNXXqNiyY>mTXmTnebQXlXzPAeOZ+CJi>~A2ZAjqF_@viDQuOv_0ZTU|#QV0~`SltU zDl5&{-R-a4qW$sJ!@|)DK?50-c})0v5mqmIsRM@}*Sc;6h&fxGF&YU=1j5#uY!%M1X7xQF6>s<@}w4X$va@dhZwZOQ>Q0Wa+$?bmpLWNXtHh{l` zcwo<|Cm7ug=mvs2H||gBWdTBAX+OFk7*lAY->&xCcnil7a90xQZI>%`%hsVJ$REaS z@uC0=YM`sjKh(TU3{izD$U3yv-0)`^QU}^CmsIYtUPh(pq~`7Ggm6r8rA7A z*;_XuY|K}cP*xGe^A;0~9(~eJty5B^ty>#%0}um%+aJDeKIp(VA}E2pdI7VLqOgyW zYD2N$?YC*zOzafV#H*_lZx*)aSs4t2fCDX0`>CZ#-n*c;P(71SDsJD+YTFTwe0!BW5yzaE?62Zf44l&ue_BZtSr29 z?w|z2b+l%%TrIO%W>1VEnO=y9i<+k#P8I%hfL%EOz0&X1TeaZ@G+jM1re90j?Yr~y zWrkytPmV7br!{2)KM*!qaM*#nAyrYnHaewq1$aFmeV8}LV>2we<5fF^_5tB1z!?1o zxOTUQ8gZdN0_>EULF#Kv(TlH=jzD5E@90aI&1USq0-ocJ1%P`NV~sPkT#g_%n%&ymN}f^#>$7)Dcgj>=6#^k z`_Mtd-Lot4qqFaj`xa#P%B0+wT)a~pXxv;3Dhb{*w=|>SwVY~d3PHQbzH&|4-rRKz z5=A_)aLZ&&3I)F`*`zLu>}{kHj$L%!@nD)0>)#yR7~;Ybn|evpZDqixsfJKqW;U3% z1Wd}jnhzvjya2LQJPq>Q*23o7uorGnwtU>ZAJ}__m_~t-_TLcHArmd<4%vul{|V!W zW2fB$*D(+&5(}Sh-KmQfk?f`f(R|IQi$Qhn?*%DOV6(twY@pQPZ*?PCyKYJT8A$sO zGYs8V6xxGvQ7|!mJZr}TrU~~(rtQFe^+VocBuJ2P8G7C9ld{R&q(WdBP&!05GU&H- zYF6%TyF(6~dX@rC?UkR2N{6~8@qGI4cR~ZGD=wfqCL5Y`ma!-FKPvER zxg?WfOgk6lCp2VKKl3af$c|C>y+p_hiw9!V0jb!@rh|Rxtk$foGDddtb3Ru<3d?~M z$LpMA5gQf?^vZOnd=N0-QZC_F{kX^lJFK@o8}?TlY3OI`K*j%OeCN$xL0CknT#`sX z|4hHdM!d{u+6N+cSJPV_@abZQe~513u6HUn?KYbup7cLSeELr|{$q;-z*z#Zv+_vexKdY`g!#VhLgePW85|#L zcunBe>(=;P3odk?V7HQwkx>RRgg-f@=;BD7hsClL!D35@O6hct)`B-&1XQeq3ic;I z{qB<=Cy(J5b;G0R6X55>PzKALyKl=2Gj)M%1p(aJy=v)HlqZ?u2ng-njhb;nev1;P zAf0N?S!#iVUc0~2wiNN=-$Y z8N=%GY$a#2Pvm=HN`A21>3o|FnpcRMY;7ZiQM0|i@LQM?|1 zj;7bK_?5^v?sMO{^)MAJ;~Ngc|<-NKCP{ zx6J9$5J(V-?`>LO`a}fxrKM0eA`tO+Eh1%n?XaGG87^kky&|b^x}BOp%1JZzN6B8h zZKSvp!zOKCjyN|$4?JwAm>hz%-O0ar9A7u1&@SnHm#y#g_VrKSJ4UW8F1zL{vFnBx zQY`_@j#ajZ;~Uh0qn9aPLTJbm0DYTWfW4RoF@*#mcFvcKv6n3V;u(YuplK+&{`Q;N z?S2mG+jhC{jsNq-AaP-iL;6>Le)_lP;JLqh*72yQ=x?#iWPc9R>nGC%0l1S_O~CTL z_fa1($FmLS+okea)bU|(6i&qOQp3L98VYW9K=ABapHKW7*^9mDI$7*&3u;^etafR0 z&!_tOk^pnJJ0DG8w*{NI+{F6qYJGs*RQO{XvRxItM2isRNR7du;~9*Bt0mc zOU11?2OBcC{8FigjpDW+JQ80AWecuqcyy}8ec&6sVCPM$p&EY3`?nq=AZ_d4|5iMh zO8?fAe(-*<`hN-Z1*bygwV7KF?#$-A%nyzaW&B^l=Txe4qqtdRy*x8sorjt@mWo?) z4*tyC`acRS=dH#KCBDG}c3zzts`7_AH0$N@r)|w?Ts#;7Yp8&<>KFgN0{4)QX-ZAz z)A4f z`=Lw@hLsffV^K5eXL0t|eIxJK2R)K?AMW*8f~|RFoHsssykGvceE&d}RHeIBLATZE z$u2QP&u+iS?C!V^ve9y~WW*SFG8plC#`q?TpJZhQnYufF62E91EwWpMHUWLNXRQV> z2jV40`A2%6?HHe{L>;PI>^J!Dz@D7G6N~XGG&WJm#v`;I_%8@d?T7c; zFEWCG*b}cQ)=}Z|@~P&sE15UL#L9n)zW60TUg-O;wh83ptuFl~f8-}QCI8CLvWk6k z4_9y%@O2YNdUs>vk0&R4_{4+0iCtZmPCcP9JIGf|wNDKHi@`}tB`y>fPv60Me1Uu7_T+@==C9K? zH?FA5hKVSOX5s&Rl#;5_MI|Y+HS3TSYEu}dFjwiS)d0ht_X;~a0`fSy^(ytB?@${Q zjr`}sDLB)XQvdxSawdcP+jdvuIpHcTVaPv?;`B+8>pj-Ly=i5-e1?GH<7+ODZ1s%Y zCmhvE0D1=?#ppy{v2gnSpw_BHHX)jZ8(?2D8?G#xegu7AlpdQBJWn_vkR5wAGSO@C zs!w3nDy~?6GryvU-bZ9viQuJ8_+Pw(xcO>tbO&I=z8BmZOMNrW!sxA*$(+?_Z*kSVggWiNFGQnIpDGQB+hTNzF zBrq9jO#NdEc#js7(T|B!MbtyN1#?Ek=`-W$h*aszILD}XmQfWq$*DR64pewI55!Kf z%$`GoT<+}}0^djRHP?t4I{Y1S#e&8mMdwfeB5LeKI+bW_UM)H7i@YqkV)JV@+wom(gXn&gs2t0<5*5mRDp?ndy<=Xs&_6t>#;F4uJBg3$I@mmCpivMJ2 zdyBkF7CHfFI=O>tS})4!3-`gro!U@Ev-r^3p?WRFx# zpzC>o>Wdx+ zuW-G4lpVn&5*=+jvzyz1(-<;UE#Djqa~87`mK~+4HMd(ESP`{=!cZ??RiR^A2#cQ- zClsyWTZon|5HR%AgOYWuY~sm(Ys4Il8$`jG$IRq`^$MaFjVIQ7X2$h;C882omCV@NEz2?cV5AKoWw?!WDW>%U8 z(D&Bj_;&;I{1auqUyCa` zvKyoaRM32^jE5s|EjwdGv+GF{MJtlLBx9QxM8uXk-3lka38$VqvLqPbqf5#yFTr4KKp@A04tOc+dEj`sm_ zyu^$Ph2DT7^Gp9t7i%QQSkV2@++b}miFg^At3W@woB3L9a)(d{j;kiY#yLO5y4ZTi zO<&&mj6fziB>uzd9Sdq6TqFxQ=t{l0f5T%F2c zIm%73>FV6xv$U@)2Kh=erPt+A)0UTlJpm{r-s#T8%ocfmzR0IT$Rt6s}lY%+SB}P)025d{@5leUG{Y1_e;g^ zjPM`}(3@a3Io)w|Q*h*oMmesyEzyultICB=FSL87_% zuwQ1PxsoI2ik_aC684OeUtKP*!lP_0OzAgdfh91)~JSb&d4_oFBda3rt#G42pfkz1f0|N zwG2}E(9h0<&K^f^z&)Z&g@;sKxQAnDnw`?}c+}l#huZ77!`z?6xTeEt&bVEMQ)694 zrg`=R*siJp0&ZihS1vhW&S@SI-Vk|O;#}Fh39H)IPaD-b7rUNwwx4h|!nEAmFH+Pp zqWk#aaEkbJsb32oGBIkslSHgZ9C|*F>>Y0cR28BM v=k|}vs=OPD%NqgSyvr%*QMP``oLY`cQ~Q8t(I*Ddil z6`hoC%Ve3%PSqKjF4kJ<}y?JQ>Nyl8Fm=5YJ3&n*>H2{Zm|3dsK$ zaLJuH4hx`6PWYa}m}=&Opm89zgKNB@L2z>u4OrusaJsxBp>%TnEHN4K%9B%PhC!#% zKvYM6n3tVMK1P=#=J%$q*k+}qVM9WO1;d;7e2Z@EjK0pedbkQD-$^zlqeB~r=H~(; zKB+YZCz`VwMoIk>H2A%_5m(){QXj-9nDOW``K@OIx}vBu)bRO^xUdd)I^BUNC#9Uj z9KEc~^5+JHfq5&*QYpBo#j>*eK->4;WmV!Ns#N;n5;LD%dch|lU8ylqFZ?E-Ygej> z=CWVm`K0RUM4F0@IdJ0%P?`YcWfNZ<#u1q)JyF3A*8bf@v7K6sNq4o4-VTy189Dsy zA5vH#au{#PN%0T3th)o?Ok9{ORx6vVWa{`cCRklKwZ%&2Ws~};#I#2vHPw*8KEhPQ zfJcFZ17}h~=)XAoS0%*bWupnEmiNB=gF+6z5i&gIT#Kao%6*fq?p5MTPsf@x z-sce+RGv~N*$kLZ(o~m7D^c&nS0}43%m3D`Qa%)zR{Un*LAc>k28U+qNI2~6}d4^-oo&k7`h7{v;BOBg4t?@NF_%c9r{McTdN`Z+Ag%cEM@*>zA{}7T}39*f2^+t zO>ubXIX4!DTU9-Y4)Uv_K zGs$F^;Z(5jG&pSeuxHl?HWOMCd2vM!8hsV}L>lpOUDRFP>5C!(zr+~v^Yk)3{Ctuh z0*ClL-08v28^C5E1|nG{a_Lm|_f50|mF@ZhI>aB}m5`*~*LNv)L^QvH5qLiEf!}N@ zrBM#PNV|KI!A7J$ZSaC3Oz*hRI<~Ra0H0m)B7u03LJbpMU|%6Pz>`;qIJta7p$4K8 z8QMNX>}R;mI&<{(1(chF50{T<>8PJ#(5g4}l05L$$zreNw%vo0JQ4+uyigARI$tksHT~37w1A zCnS!VgI@DiVoh~-;7G#j=cE_{g!-k#$%a{*A&?Rpf`XYagtSFT?O9fBf{C3=r`8lu z7?S(z`(}xY^&+$&Ws$Zmu&trVVb=i~vb}?kEsTS9v8VxK4mCKAe1lL#7;p!%CTxtW zDJ+Q`A^{-Zlr$KNkg>En0>U&83MbOjJmEC&8#K|8i;kKC6g>miXvCm$@$=Vk)#t8tVm)Kq|D% zE~t*;Arg{eQF{by2fUT7TO;nlW z3%3gK`blnJt*L4k5an|jCv%F%0l2oilM@|wSrZ`4)JBPHVL=_QA3Q-b6%M1WY1+aI zW*gSgazf^2-x4?Q#-cRpw3)>~;r7Cy0-y#P*Y_SSw^klw z1WRj_n-qA1sG_XXFcb!byaA%c#-ONDe}SN-epX3VM2}wNh}hR z_-cwA$T3L(xFSd;Cdp28g21hlmaC#TOF$4uV-uI@ia>1hVN|0WG9;l!V-nRiIfcT! zK-$V!so3OZBUk5fSlEfiQKArUCm3&I5>=`!EM!#2B08ZN8&Tz5K-D-As?B@FWQ{Tf zlWYPL?`_JfIQOTUz?4av07s<@Dd&nkR8FCo_0}z@cQKu&v3LO}W4u83G~-lymS8nW zltN@vW#%w$cs$4)fMW?<>UJ2rEd_J-G|K`-j)~&r6&)-QqHg*=EOeYXH4A;CNlz%k zCO%R^%6w6?EyzSu=u?$R&5jgtnX&-17N?O>B9$Iom_R|n!2l*k$zGcgR5CDg;k}BW z!tw+hY!DQ+9$4}W`DN1M5Nc4)5(|xOq>#d-MZ|xQ6FJ~K-Kle>c>RQGkx8yUPEu`b z5XQ9_xp^oj5ote2VRsvk-gA&lG|8kK6v*2cO~fij*$Xp$!2O~zu!9--)vSM~R z6kzO-e-^8@Z%?IRSxP<~EjJ1xLcJ(omf?xaDfQ1~_#WlK#wn*;0JO5)~jQwopUt-mLVzEfPDMjgJQg*lj(Rx!n zTX!gk45y$k#AK2B85tKu2c&S-)KAxnoNUqTTzbCYPyPS= zf}F7exy~{`RM3kUm)f9jp%*r`Q6Hn86uxd@amvC$i20U&j582*&ZuBWoa1Nw;+7(l zLSs=jki+Dyal%>PrJYk`Am{Ip08<_z>b`R>T zHuM0iwLY=o!11vNE!LKd_7y-HNQuUwfDa+%Cf1~JifaLkd<>f)wZjVZb2W(~V--7X z>(=*^_Q_GzaMS=JPzMrXp1bBeA)$j)7Bw8hVukcHcpB*8UMp5LwkJNlGYGV*vLp=z z!5j4T9neQYvTDzOs#q^jK2QVEj&?CsRMZ zw-Ba#M(w#)es3A%S?Fob%OQm*y#^LEOuemQ-=7-E9f?|dE`gy1Ai%B+QQ^2RFxiS+ zkM*1g#JNNkewhuWt`^|<3DPFPT#LzW_GFc4gygX?Y2Z`b`imG`>2| zJlPXbqbr~^lDxA4KUB{T>+^jZ;Z(+PgW;g$FI9;W|9T@cI41#(eIF9TXGD!r8k6p_3>{L;aU||r#rSW)yesKk{koa*H zi$u$PWh2_!^=cy$fY8q{=r!>_!l3V)gg#KhRz*;WRbdnwSba5z)Nwkia!`WG0Q{N2 zM0GLqjmJSD{oBI@k8bsFJ^v{w0;>3aqZR$RRFEES|AUGERsULwPHC|bz2*b)dKWLi3q#P~ddA*TI zkAzSZ`iU5b9Ph;WqvJTc@=_^Xw*EvAL^qvBza_7!%r9a>IiGYC=NV3avTrCGP}MWQN0;7MH(C6-KurH89tfSU(I z#ihf&6f~rb5zggaq|%J3*hz&^ux+KCjO8#<+F0SNNxZA0M2QU^wDC{LKOa%r0J9p@ zz_!@5R;J|LC7dQjzD}&#J(g=i@+~lomAK!@8=PnXQE4tEat1_LGfkJkXa9!^7e((g1pMha<3V)EY+oLl)<8`$k zl?ZtSg~|24N-_cT{jW4rFmK`z~%6s8le09`*T5-9 z9;(l~`ydg!K$-YdMkE3A?I*U7ls$KKS+g zUngHF`Kt_ZPP4Coayiq8rn1Zeck_t_qz{!kn?2Eo4^Wke9~Dvw5(I%S7(cx}5!pwL z=)j_R7ZA2~_wva23%L0K7KvmHY%iiFVoOAaCAM9pFu*sk-bF761a-%To1g z5_io`CS>?9Xsin)dDzHZH=9ELj;u{2I@6);>)%LOvD%MI5A?wLXyR?UK*U|!(yJHAy6tnHlg z`QSKN#I|j9N&N;?ckD;RTGX(RZM4(RiUAbCDWi~{Xi{Wg*x4FgvM{BL`WL9t5NNX5 zh|NX_95$6j1SAn?F53jCO5`VUuY6Q|w}N2=h0#5bIYtniQayr51AWb`99IWQVq~tf za4?||?>#&Qs&Y(%(FC8u&tmf zMS;Olu-U0=7INMLj6(i!EXtn+Q`ZL-5}>n;lxTNB*v0);S}ClNB6SX68H3xZe*?-} zWNlm^!f>LAn`_OQI+;%R?g_Cnw?LJk@vSrI^xCfBa9Qc2fNt}wi&7ryk&N4*6m!Y| zEskzK^iDhses(&EKs5=v^Ay!#EsaDNx+o|^6WSsP{XUh{N&w|D4gp7wSxP3ge=t+x z*)M~ggd>8EMx1L4d#19h2!NwD7mZAtRwiT3=bh6C7)jM#&CpeivF>mEW=$~qV zqZDIN_}CifJMh{>7iYsr0Rg7Rmx*{aUMhuqg2KFY2Bk^o4!n%tVL+vZ`e^9Uxno;# zgE)|v(M$f}Xt@HbaD}IQm!EYf zAa*O}ttHB<^a#TuLeXRh1*Bph_Kh2gH3hHcec@?uH!!5Bb?kfOdXYjA!NWL5RapC2 zBPSA*oXBvq9U5@k6i#_0kK`T%O@K^F=f7TWnmW|`ATm6zVDtb?TvA9TaNAU!QF9tO zjHtN9kY+jq4QjkZigtMAI7_Buui>n0TxB9waR50^$c1`X*~Thplo{a^V^CjT>=Fgr z8WQj-qn#*h7*WP6J7Gf2PWKJ6B8uuJxq^xQDA58#@zp5wKoGT9pp!6(z^LtvVO+aS zL7`2$3=*>G2mZq9YZnEK8o(B?qRpgKuEIp_YSgF^+#SJ-?$mHP?)ZgFig$%=28Yu~ zQv>u$j9Eo5byIk-6L;Z5F$`+usyxE!G+EUu=0Gjm3O;b1W+Qt_axB2h(M*tmzt@GF1Qhey z-NT{x9HRKnWF;F5DR5F)yPU`xYTA_FE1UVQ+)(EZuw z_8SX}l%m$cDhn_YqXvK9*r>!XGJvNis)>ZuY<~ot3-KssRHh=4BXhP^pxu14#}wO^PC3;B1$b8n{U{t&5`7K&ZXePOKWX+an@TZ-)@Hqw~-#;|@nh z@+3-04<*gcAEnogZ4b~C))LK!9!n0Gw?(Wx8~&=zyqN&38g-bo8Ux5nYv)y=n~9M! zs7rEid%+)fB0*i5isQl=1;io|%Us0mGp1hk5@F!rjdFbetRj#tQ=eT~sv{?LP|N@v zJX(q#`#BjubLd42I~4^irJ=UAw)7Z0xi()yrn)3EH5eM`Fqx@Rj!+IWd5`B5iPuGXK8Q!|h(OW;)@y zN@0xUyQrYp6Ipo$DJ;xH2|`)AlUj}`938Y_30g#-uMMk%!67we-WrMp_|DYTwE028 zi_8Uf4lW1kI&7M@iiHw?m)AfZs)K|~(3V9st{X=XG#s3esFmiLro(Q1LQ;WK-p>V% znQUmGed!+3ex&X}!rM~08&ctAx*|3=aNKl48=pWkOC-zOpq6Fo8R4~A`J~3GgaC}Y z(0EMT@IjL+GtvU$@>rc%s^vt*=E0)@68M?5MyzjcbC+VT_09nO2r+AS_<@U!HPf%2 zvtU5`?;nV~$d3iu0{#wIC;D}gDKh0lVW%h)n%GGe$lBuPC?2Sd%z)w)5TrR7YmbF( zMYw#LD3wT_^;jx1$8)#xpe5f9rIwpI+VQxUqFAF3sWsGg#?Nig1_XrB{K#qZmwrIo zaX1!-0?a(2*gjfAu|kn1_WB1~lp$=CeOrB`f^$D=O$K~+uovy1`6+DSHIS#O)Q^(Z z*>f4mYaI*h9a_F0;uM7#Nm)w>K+JeXds-aNamwY0^I6ePT06Gl#Mx| z&7EZ2_s*oiEKmh6sTvqkD|vz|y>fbpa6cdLZU34gs@?5fl67OGqgmV3rI}cx6Te z#Y-&HWZP>~n<}je_ZLOW@(Nv*G&*V+?KJwKCaMd-5A|ViVIeDVDmc{=tP{beTc52t z8%Z+`W8r~gCY4ag*cX+N7&%u4-~)mP>NxJ$SadMu#cbPh`K@U7l+#q%SmR6?3I)X~ z`@OIWu13@OrHpH$Nk*Wpuk{9fDv61Vl%QrJ7^8*j)w*q!R-sZMP0}dcGb-i`ad=g8 zNae5K11dBA0z%p`u>xm1)x<)XjYO3DUN^Uc3SdJ)YGZ+k+drNYS@~Xx_0&cb9A96E zM2Sz?iQH1b-6yia9Gc! zMVhM7H4Y{>06{0b#T_z{M6DAl#&AWA0F>KjWbx63vPMHxY7r3KQ3TW?FiWv^=~M$F zoKeY*zscR#m04`s_tqMBkJ1|&)GnMYQR{O*XU^?v2UW>>tO&D^RYjG*=sCFo14EO1 z5(zw-uGP&A$i7+7dOT?l1IaDe7+fvN9N14y^{nwb&a|K==fgg3X5dl|x07oFmFc7rpqhGw|HW;c+^g!E`X+PUcSz=${$0nHR zn}OFyW6lfdLP(%fS|BeL^3fT0t;Mxc!d+`T%6n|vpxYA1FKN{HnJ@U|wq0cFgvu4j zr%_tbCtDa5wPq5&v*i(Wu~(Sa5`j&bg6~+-`NuW$SRIKKp#!zP_DfQ5HF}YV6kA+v zZ5hSt2B4+!8?t{s)t#*lsZ;NEKL)T;fTBwIHeDaP5C^UuEYi)h1_D8@(KmII=cK*T zG)Wn50pwYo(P}mu{@{_0M>WxqF%|ej$GqY0TntXFQ_iRw>-YH!#2V~V!B$p;5jUM= zOaCfq2+U<4)WQMnCScm#m7K`S$!c9z5{UsE?`B8VNT_Lz!D;(oq+5mAqn{QalB#?? z;>oZtgr3AAscK(^V|YUYNYpCkUMq*RIIoo|MWR;DRLiK*K#(Rb0mj3Nz{d=pvYh}9 z6V??7bM-m{c0o4`Iua)aYSF2DQaNhC5n~BjYTST}%3)o4-0$jBKHeCRr4TmBxm+xvl%#wjN=)b0m%)MV`^GH#-Z#zs}O0$ z^_>V})SWY_l5>W~ph;UbQu^wh*(38xK)r(!A7vALi0U|VipOi-7>1hoj5}DWVWF@z zf~rW~3)FrGRyQsLF7$K3dL`=sY3#F6PvrLbS!u_dD0SJDJE47Uq+F2FLoExGYRBAP z7-+3YG6hgcujKA4KYy7gPD;0@WySu4U=SAePnmFGUe z1f_O-*`sCDjf5D~UL_>?&Pv8S?fXn^9pO|}vZ>=Khl8EP(msitGzU!yJQje(O+d3g zT|MXc5Ja1y3IvRG0=7`!fXplEQ?exq6?-A8VC1M0L#@d71WR-qvvYkZ%kMF5qK1SDxtP&ms<+W0}GkpeZ_ znG}`>NS7Q6wmQFdUrCmOrdJY_viPq?rPi@nVyRFnLCtp;$J$OYAXzA*+R8;VPvW6F zb)5|3Sqf+#XylH7x%L4Z6Rkke{S0{?X~bxQC^c;lr8q*tvY-uPHc>JJ(T&f;Bn6uF z_5eC>^v2S9rsIWEvyB0^BJy0)bm&COo>~$)-w3x+&o)VQ^^w|vduMq)-jSmLk)7F1 zRnB+fD3BI~q6jFQvCry?(1qeKMVt0mi8jo zY1*AsZlj+$4x?#rw1C?*qK!Y)ULOagqvD*!zS|ye=mBa2mm(-0c^zd=l0am?7BrD< zTz0K0fE&_=@dVvUwF@IR&H|1Ld^3~y2_`SnpxLM|@`x%d#6pijI(J!?h6X&tnHeM+ zL6d$i>{01rw^mleIz+b}Bn1rWqk@TZ6HZwHCrU_3mv(e{HcM#m^NGY7;^`)>Re5R) zIlR80`AF>ub}amfYnqXlQicTqR2mDv_Hl?l$&YZdoVJQsG=kQTK5+lMLJc{M>3e~% zSlgzyvWLlOIifqD;R2W(Z7PkQdPE1Yo?o=?vv98Q6 zA_s!B-bprdVRiI+B57HvgkWrvs@@NzeHWnlfZUj1k1%k$27xnFECqg6;uNF`Z5*;P^SK*W9Q15yffu#_ zrq+lQxhR?Yks47#y6!@dswfM|H1Z*l{eHnh9H~552cY^8p^I)1av}rUPcTt{Tmc7? zO;ye%o^7DK1iI4(2ciIJ#C2RF0cT@3VWnpkQ3e&*@<KQNz`nmr<vZ+ag^wX0qItYIR(o7 zrv>sTP7m@_{mgab_I|^nwY^2Dd62Hzb2pYZCh9MilyMdz6hDa7y#ox4(NlvnJ)pGM z9FET(DHLIa$KYF$;@G;tJiDRgY^)Jpcr^J9^g}Qa!6xTP(LAS^IyfKl20N9?6cmmH z+p8M9nz%H|p@#J>6c#PgwxAvmK$8i<)JM!hX(|sWO;O;v4!{zml_Vx3bI5xIm1!(Z z1i|=k)e#mss0nMi zU#N#}l*^-Tgzk2Z+^5dNOfnfVixsbkjOI10t{Jjz{sfn5lxn4oxLH<~9%y#$gdqB` zH~*~1{H)cnixLHhx3ZHTOFVq7hE&Ff?FB5BtUBEXj>LoR0b3{uh-Rm3CUA480=a=O z=uu28i`=NPq~pYBGJu0YmFfY_-J=^AX%!Z2dc3G6+Z5Rz2Me79gEH1C$)A8Lck+~J zVA6|ISo3slAuH-?y%}1SFlZ35i0rb?WtrN*ci{Mp)Y+2t?TU&2{X9JT8YuT}TOliodrHvMWKR zwzAJ4oW9ASIggvTfg4xSg)MLb#tK-6J77L8wiwi+0e{Zcj)LB;YwE{=`x&5YPb;;AjHGRw6hVof3F%Q z9`rNlmga3^m|BRah4zGs3DgnJvI0hknjj|SsRKZb2`rOHZ@IxtVwD`BTF$%^5I<5f zEa05I2|-obY+S1aU|D#j5fX;F6AHDKgvd1FAimWIil%u@C0gBLhtYT*fjC(SAc#!q zQ{ysojt*!(h!UCICiTsbHVcGJB!)Hzrzb9VLcLpf5Oh0wN%# zeNScN#_|c))uQ&9AZJX@zi3c15>necg)Asa9aR(E)KpgN?5}G97OIP-{%R-SLUy_< zaPnfHont<(RWd09?+S-oc9DROx-1Kc@HSys3cgQyf8jyjAxw>|&ebq6tZX(xT0wRa ztzXpgGZQfA%b(|1c+sQ@J8-o}W=XGfTvaZ!D(WCpD?xi1Qqq6RsI^BLN8V0$BZ76v zD6B;@TKt7lOfe7F*E%1Or`Rdzw6tYc*kXXZvL^1-1n%f;FFLF!s8yhVmN}=6oN%fe zDN5kS5IHd=aE-@3GVr0rolIwAr)@PSp#Zg&tajx-N|tx0GJK@uB>IqYrxBb;V2<_1 z(5~YSapl1V?qR@tAb2zMaCB+n#sIT2+(Dsj?xL*>uROMak~0emqj9Q^T1M8LN6shA z1rzpwS(qgB(&xB~!<-ah&D%hMWa}NgO%hhJK()(RtAnvqOx;P2Ra+fi2GS$y(%bO5YUd{Q}Nby`~hwbbw( zEs>XIp2oauinu5n11{{jl>l?FR{m~eh6Pkws8XK9PqCSRMu<64j6^e_XftX;`?eWJ zaiccFl>xwGHj$t51tK>UMX|?L3!<3TM9^!}8p3pkL0g*uh$xLw zy4(m;;4I7_ORuDk?%eQe?K4sIyWsEALfo_D8dVA*#Ugr5!V7xTKYvN^a9K_yX+U+t5+}H1!klQx^8Aaz~4aJ?&6LaBpx> zy&Pxdf|LG(<_*el2|+~=yezO|P=q^;=O_pj{H&p`VgORD4174Vek5(3|O&PdPy#v=O8ib39e8`onra~%i%bB`M3*90W$*R3xZKzN725>OmsD>mq^1q-Ilr-u&?@&52`2k zu4qMw$j7-hZgud?Qw&l$=@EQGZmHiBH2YojdeGg$iw?3R60^uQDq zh!r5#pxjGcTRTyU8XuI3J}Kl&sBZgNgv1e>L2m#XQHtJ7%&09zuG*Xza2>%ETe8-L zQpzfap8W;vB*4DlZv|r*RG9?NjZF(;1b7@`=6Zt`Y25Y2X`7iUj4H_PzO9}2^6~D!Rw<&qwk$!!jTfpu7+WVecR)xudE!5||oy zb2Ga;?k2a=ELy#5i9Kv2S!*W-2Mxe! z09>H#CIVmj`~$;Xu!ty)0E=7yP>+FldSk)f4s9*~Oq&9zO(UY|^+h8E!S1PryAwZ( z)Rw~scOnTOv`r^)V|B=YQc^{?bJ+?A85nwvdKm{g6Nkx!4B(^nArfR=hDDh*M})6} zpqBdOqmks8izj6Yyy^qtDz?C{nH*F-6&ZT02_bE1DNxjY?O-IT^nyI=7zWh{+qt@i zb2`CzZju9Xi9!|-`LMzGItoXOJA>B$fj-Nl!-`GqRUTI&8#AkC6B32L)76XP%n4Sl zH&Tj6fzb8YDI%#j@6aMwy&V)In|w$UexV*}McZ?D{L)gvD8+IS7*Ot)MWO97gA$YO z$1Lbj^JPk^X((YU3#t_NI5YK@?nNx%f^e`Yb*e*fBS*z83e%&HpDnS&8c=5>0HuIj+&M8LO5))5~Wrh$-?tP)NnMAZ`%~u6nz!QCF5iUUlEGcMs!N* zW)-G^v$ANQ7eoLQ6W^;_jET(iB3?9!_`$xnl$NDB4Ga0I4v=;P!i5#oMlUPiV3-K3 z#-?w%Qb%vDtUAZEyBPOB~ z8`0Ll)~mp+1P3KWfIb7nz^Fq4!mBo6$E=88LZOStX?%@p8Y8#c8c?kTBU@r$W(~{T z7@2K&P-+XckvB8nLKkaqpHsZxsX>Ds08q{7>*JJ&MZH%5s*?4Hw`s{eYA=CyfFDAU zloG3Cn*nPWRefE!*l|(FRni*f_4++-5AG_fq+he{W5GVQW>qD{(;D@ew75kk0L6ms z6lU#ToJT}vd7lY!=ENj0#O>papH-)U zJjeF5JrByfJj{D@gK`B4`s%$7U-g)5BTFS&=M)L+pn*e}g~FNEu3jU;6Q?myk{~)v zwLm}cNlu|3kl{!1IzWp%Af?H#9gakcV+)E&u)~hS5wArnUIPGw$cYZdH>%uRqI2*= zh~_LrbL@V^$gKp;3OEcJ0N*^DU?H?~88@X=)ZkTCv%-BWfu z0{N-o=Op2RV7XZu{yEBSPZ~m3yGGi|?1X=p0*qef5sm^M-9h1c4#0xbREr&tAgM8~ ze&u7udGTwKNa)4y)TcO3kQN?O!PK%HZha76BvtLDLS`r#CB#JOCMW}^XcHJU zk(mN$#l%c%mu;pB8>e17V!2YFveQE_5(GCyjbH^8NpubKCL-MgZn*XiBBg-`Ab+~6 zFi_+nYWyl`_)28jh(c4RL#eF+b`q9R>eb95RF{w35o0Jzxf}gz3;(LPM`V~0GNkAQ zs^wy~V695gE^CTav3y|0lq!+Fi8k;V0Dmzkvnxn~PXX(zN);mbEz-O?3GPv`kAXpK zK)b+O2;%V>ewo_JqmHV6)aad81urh21)$Zl5C{)k)ZnVME)g(u%2pNqe&JA+ZUrR! zCDk2vIw4S!+SAc(OwDDRhJIJnY2aM{paf#u^-AQ|1%-x@I|YGz-JzOZKzv7MOE=3A zM56unUK#k6V%CYVVELw-LvFGAiEH1Y_FTC;OOf3Ht)rN{HlAH428eCiPg-{6 zfxeMgSm@>{<46lJ460XU5)P+bp6X)i+UJ#=LwiwzA+{%nd8}OMqp2l`;ie4xh2(+g zO%fR73fz!{A^X1Wf0uE!QwRnUa$)*gP;MyR?c#y9;RsZ#YPRr zApKxZ@Hxz7@R8d)MU8;!Ss)dEeVD_vkZ*}Jgv{XhsFR2o9DPu`4ux`?g?x(ay`twG znNJk}QimY2rXeiwvXTHwd?JYN4oFHKMf`U_u#|xcI)Q%6&GLhJ63EQ6*vATbNijx0 zgC%N|HHff?x*>;1oez9S>hT4Q{G8`}E2Ecb=4=`e-GCbj_OwgO5@s$=K_*6(h&vz4 zuZ^O>bEoiE5riQ1U4{m-jsOp&!oyP3$svA;0B#?}8v|!&3!6fFBW)ddg`A-$4T*$M zCL)O}Y?5H;U7D00H)GK*=_o#yjG`e6t12|;_5Bz@l7u!_+U#wo$SZLw0_ESwh@ws5 zx9NA(8M*nx0MHa1Bp}j_Wm~0$5)(KMO7mn8@zx+|(wf0(R<@{gQd-!ZwD5`;(o!GQ zNP>Ut3u2_#o+cTb)`> z>U&TW;VUJnP)G(l3ng~Wtzd3NGb6V%nQEb^T+D6V z%nHlWaNboLF%O55n%adGjj5mvyP&f)5oBvADz6c8+Rg$K%B}-W)Kfakpmt2u8z6eu zuX;|b(5I-pf7r>AnKi4>7-x=rIZ#v=bPNH+btYO<$6~pSX+*FV2==DZq$`j7;N_+!8S=Qt5bw%4}M+WY`H{yr5f zcefe<^?-q=uh1VsBE994mQE%RX-X*B@|si%Wni!g!k-A2NTt@E9IQ^+`NA zn=rvT0~8sWz*hU!C6jr0ZrN1Hpe^c;dL;A~Ati1}RfK6Y9kO2Ek2EF6*$~~vO52B^ zVd}>WiOD6*K%fS%+fWmn?Mu`+2WrHdj|B~!qMtHaOWW$(I)FZN03A#UC{jXCr|v3H z+%pyla_xR9m8*orHK%)3bxFNkf}hY933MDD4QXruxrseey;@YNEhjovOw6O@hpC(e zPyE_t09L~%azO9oGV(-(NyD!J+3F*Lmo}HtpbcpMDh#sl8Bt4pB3oO>KZ)Abdo4dj zrOtBB?Q7nHT04(R!KJ9IPs4UTg`ES6q_$}Kp6?;=u}MU*24h{x%Mg2Tw`sMIlZ|1m zy*e095H3x(9`%d_72!@KYGM4365K+)NEz?3U%W>lgTm#2I0c+>J3NBqz0X?Mk67F$ z(56jPW3LkPn1b*Si$|?YU%4fUW6es)i4YJdo<|c&t#1YWM2VTuH_c53skt(%&{&Fj^wDVnsMD?iVGsr1-^}B}8PcGQ2a#7oKiEEF`4|`* z47w$CUqLqARn3w71-}%+h(xoKW?wdfP=^#JDy8*k-lw@K=^S^$;;OSck?0MawmMfN z&En1~wJH)r92LRGA{Znx9R;Ir>A%YObfi$APq9G5A>%H!5+?{t${NOrT0PB*0YM}} zB9i^0Zidp#3MWE;oTCJnZMM4#$#J9e=+*Mo$gHTvejm$`iOUt!RdkNiuw;9Kx$JR7 zcqHwBDAZ4zMqID&kAM&`XyV{y4h!dLr;V`}#@N8w+MY(~c#w?3PD9aW`a7byhF7HGN zEK_phMN_hT(1K{#NZR#m2PjXyvSyH=6&2CQk_5|xSH)FlAJ(><>lkDR!qsdL=2bV? zh5LbMQ8`l0vIYit(_o|@!IN28!UNA`|dam`G8nT|Lv%z-X_T=Rab>psgTuAsc55s%9-J8 zU3q=5%fH9BU^_O*UZ=2+{A-<_vD-#S?=aXOqIsy?K+`P-W22=wb_*%5DQHI zzV|`fD60lo&f2S6+z(SkRLi3qxw!}oXSBEpXnVHDe?!ssq@)|#5xku#D$n6(8V7$eZ}Y9~nP*#`#aMiB=QNX!nCf1rMnX;QaGDI-wXZ22;) z03)4`F!u@^g1`cIa_|EK+9pFmbOZ~MRjO4miJS$LWtO}lM?rg^;F_$%ivve9wBr@% zUd3ALCqN^4z)`sZj(*W7saQLE={ph(KNj83wNuWpnaw-=FB2JDLEEGhy>`Ttwm8_5 zw;vILfOR14!Y!d#lei+pe^^wV!(<2ZY#$L5$+GYR0x_C{M(?z-pTFha@fu8;0m%Wp z%~0Dlsk^}3BS4qoT*fv!5kaVf%S<&;6jiB05tG@nKbKLML{XS&QOLbg1#G&&$Z;7- z3Jc|LJyc@R`3%A3KJV;El^0%nuW417B3<_!V4@;Yyn9eGBqzmv!6KFGH~>YHrb$yK z$bU)lsSmo3Gp7kQ%|0k26>8g7KJs3&gVMP0ozQI=XJnp91K-}gTgG^p&w0&6i5jLnjj#U zAw{~uMA{puA)!K2LPSff9N_eJiZ2$<_Gl_si5FHh$$SDjT&GJW;?AA4+0ZtJV&d#5 z1RnpS)#iXF!A9Be+QTAaqv9`90| zXJB$QFVx7Iq+AB1JOuu4ZN(abP6t~kxw)dMMyadoQxw1rHX0sVy{SL;h97-FfD8(TF)jQsU(%P+V13432yGY03dH{{S#| zKczp8glq^1`m2g}h&7UxztB6dZes)*~4+>8$FtO`U1?&_1;vT6NAb}-)*!RV`b&o^ZqoCG7>ZuE( z9f?aK9}5x-K$I6P_4;;eqEN0+qsk%7f9YRj0wT>3Hw`)g?qJvqc5MGh&R@0|Wddha z2p~4!OUYAM4@f12wg^Ym(NJnMK{?ORzu4XY4aAKP*O)rw!==zVkeI*j`Vo{V_@qUq z*hFG2nk~?z8^~BJT7MVNOYs1A011(J4B`kVwIXx;0=>Qyj-j-bgId?Nf@r9=Q@B1+ zeUL+$mXZ*F-o9Vi5(!Kn15QXOI40e^TC4*F@B4=TOhKurcmnNSy;;3`-A5u7%f?Zm z9m$%VeF$Tu0vSe`$Z{4{PLf4)-IBRP6z@fZw}^2{>sphsXkyHMu7VQi;H-dvoqnkt zB-J`4ZOAi=1JgD40&As7xuOCLXMv~m0g%B_yXskyLSnOe@SIyqrEXv{QmxbEG>wM} ziAQmJM7Q$tDk55AbF!&+8uG+>najgr;|dc0ktEtM&o$BVX)4qDa06u)Ex~jX*&%pL zKmlw)L@?lZ>CZwIEJCxYFJA0yG2Q#2-jN$Q`=DGgIO7ps>SL8gvbCZIy{^~BMnayp z#gEUPa*-NugfN<}JY;{!dsybI8a+p;3pITKsD&@MLvO;@Pp$}gw*qChb)Cv29I8ju z{^)@K+|>MVB4S>jbcvk$qE(?R1*%wg!hB@&7T9Wi1EC1+_fL%!X^h0ME7GK71fa&S zE7`>Cxlf!|8aS2dGa!p5`N8Bza3zbHog(>Rl2BF9H?7S?M7se;31&{4lP)ppBdN2f zEfhScLD7rmlss3B#VI@$9n41cZ$L0|i*}_4jaWM^2hHN8y^n;=-fSlW| zHzC{lh@eTp^{(h=Bboi3o{gSEWSafaS^*(Ww*2FHmGik9lp%BOSeuJ5BSb zA4(C>&}?wR3+xmqP!cjK@A;{SNGk?akwjvQm)B}sPRcsU=W>fN>#Zog(m1-MWg440FrkRrkMh|G3KP6IH>tgc98lkX zNOX-)ItZvFE#T@$T8WC-d!(_nyHLZ-T4F0rQlqh#dYCy>>!k)v3jxv7 z#YS}M%mYVsW>re!O-nwt&)7W9q<=;w`b8xlYHBUzQJp}dJX#T&E5UQZpKnUAs(?VG z4(Xu)Wos(ViK%6!spc>vA22Lhc%*i3l9HbtqDd;&@d5Q7MVoX~OPKSa&P{Xgy%7+= zs6fcWW0F8|&hHS@AZ&Q9C@TO!K)=70Oxg*Mf76O!iIkvL1w?8Q4mE#t;FyY6%$Hc*Q3kN% z1P_xoyLNbiN0Y`z3d(Tl6BbZ0n4rGs`%Xm5#hs_>h_%}N{jgF>MZav6tAwo;=RRsI z5^7A>px~4fA?OqDM%qN)1K}~j@sWLGSu+}|oiI<@Jg%rVK|;7ok~&g9+NfmqQtLnm zo9fhl)SXx>n2x%QYk6eFcfjowAoU*g8VS>YFhHLYKRV`fnqe)%)&lRv4g+#zKJg+L zg7Xpa!9DM1q?&t#geHY?ij83kK3Z9bM6_4%Qx=wzs8ti!s`mrcTcFQziJOvCs(}|Y zI+6H{l!QgOO2rZGmSZN$-TI^*j^TeD#b7mf;4+fp*^PG=8xiDW+leETVL89iRa7>L zF|wKnE#>3`&_*C|IRYMGN&0F^EhZbl`HogQM-*xFy}y|%b~H|{l>sY1CGsL;aKm+fxUP&aI{WDxOjG8GL#DqhzKck4WZS3C%(YkT!n?8rT%AI z{8n*(LVV3$Qx%)fM6Sk`2|dAJQU;h4ITXI2tWci6?O^FcY{tYf_N4(ulrgOxmOtwJ zrJ`7HZb%@dkI#uD6R{v(4Io$p;YHZd=>)>eJ`W1$U}u88d53IZ$%jImG`6_~wYbd4 zZEDH&gVZq)JU$?gnGC+)1_x`El9*FRi>5TjyRAeYfS5>tou<7s;o?wYZ=rWp+oP0) zCx#-r2y<10A?y&raI5102qRji9HnK)(NN9RDH{q8XDekkH$Z8yVdrX`hQvI+@IUo@ z7dy!`NN6bSDcKQ`xYGJ;pd0!|4tKo?VBS#gHOhuEoee6bHZF5f|5wIA#KbUsk2O$h zV(wD7U0SyW8sBbda^6f)>9xxCQ`_aXjI{Q>De*TbLIoi`)F|wj%7k@`Mds2gOMnxs zm^XzI)#;R6;CR|-=1_{yYy!B}>jbJE)p0{qQFsbWjYDH)a%ePKmVu*`>Gv&^fq;*L z*1o}C2xxE7#T-Vm+1PLswX9X3DBs(ue&fCb0W3PGK1AE|V;>(gj!a!zC^XorNTc`D zB?NdZY)xg?LS6I@-y!$M2ng*ekq=OhCazlRWJ+3QS<_$?n2fd&Sjb}4`G$F;0 zaD7)9MWQ%}E=r;XDCQuA=`=xmB)CbB#Vzbq11Bv`tU{$zTOc2iU{DD2;S2zv4PVeC zs*yG+FPiw>eJbThVaz!D!t>R_F(GtX;{oS=Pd~Ho2?Q=SlN?Pu{hG-{1fB#G1!bOQ zN23uiKWj8iSmA7kFn9AjSuKaP1(Tf3nx|2e*52_*a-+R|HH30@7ApH-B!9yz6u{(J zY*}}$64`atR=pa4k*uKs>y_j$3pF(ywW%9G+=zheFuxGZguZ@&Afjr`ng+E#qcqQm z(um_EizqCEhIyqCWKOju%^c$f2*r6@Nn4-pgy<=negiV;5QTBpajX**o{XeP`A1Qv zB4+L$WeE4@i?-eg^@k_yv~o9&iJ8H@7IMPlL7RYfAu4tQBFFcm+BoXDKBk~LQuB8o zx8Qz7fr=1JH?khdMvJj1E*TL8L4w9uS#|cAf{C$k**rkRV7)XdttRUjC=wH(5P<*n z0=cw@Q~egyAGFHx$PJuGQkR5hoY;TYcq+^TRK*+kZkb~lXZBW#5R7cdvpJS(FGNbb z$1o|+pISIVXKYe+qI5_KcL}S(6+H}E=CZar{7F8%ET96P{ zclq+XIr;%e6wajeNFKI3c7hg>V-6xeFj0}^GkL~({$|oci`V9q%AK^C6*jw6gO(9p~4yT?&T336Tl^Redt3!$nMJHH)kUxG`)8tZWdJ z{o^PvGHVMhQDR_BvaEj9`ccKMj{q^Lo271!NlH|7ZqythFF@<-Dq6uTU)}$XEgD4& zOhO>G8AXGY;RZ8L?INT2c}L*sX3?R>F0I(a=NQ&1?(KR9yUq!q&e_fYRZmjFTSRR& za&*Yj;tnP|*3c4Cwmi-_NbDxE`Tj~35oy#LC!0?%Jhti-Oxd)&i zGQIQ;+x~&{&iNfcVds23c7U8BVoX}}TD=J!ms?C)`7Y8Ud|5VFRr$7_BZm6^sN6Z1 zmaT`+Z4nAPOr{U<%07`JF&t%=qyVFCqfY`3Ftb-nA9u{s$UkZ`<$BxfyV^aDtvGGD z4oI*>Yz^^Wt-%MXt_{jHjlwBm742%^k$Zm@lMm8x0m<}TT4uVAiZ8(ti27`EeI+~G zBRm#tZ8(1fjog(TK0C1ZLs3NtK(=*-ssV7Pr&#cJVDoNXfLXn2_7{$Boyequk+y&S zat~auz)47tbY3;p4fXIn+whuq0k^Wm7>yG%Rm;x}9Ks2{h)F6Fi~&_k@5;QPff;#! z@y0DEqCPuFcWB4EBkDV*O?TR6+U4*a2M4tuH;}7hgd5qfW{;Z&NE42dWKtNi&L4IeJmzHgK!2twA z(nipNrW!QiF^3qA?7#0kk(H5g-&J?VxoX3kAtk<=x|JCjdE!LGi4DHKv3RZ8*8X=b zlG{z)&&FfHSC#-yi}c=Aka-8N&q)gVII7B0G3`+wuf2~SKQMFrES}U!9AN~VeX6~R zPnhM=@{oB?DhT$j!{B$d@Kb5s2hS6vHcvy3w!`0Txlfejhm$8w+=oe1zuRxn_6%J= zP#_Zie{8{yx91Dbp6~JbDxuraMpT8z9r`@oTfKMN!VS!4Prm;C_=S`I;nqirDYS!n z_xf!L=&70K5jDwJv|?J&m4n(h$Jb?`Wq5Eo>#v?`Yk5B(zQ_H;{>P&!uhN3M7V7EV z9$>J~`du=s^T_4y*lSBGepOMgh@||HEZULlF~6^uNf!~(E-I#ewom&Wz8ZMt{?HhB z=1y-8^jQu5arIEIkWPY7cYlO0`R#`;qOnRwwh-Pq{Z(1qkJfu->pG=i!!!$Q*EzQH z`D%i-#0vuIXWp)ocUvau>n*}Xbe2MYCJuJc_|Ⓢq*%P(Kr*~_U~_7)#R%ZwdInK zQHKJ)YodQ=*`Iv(BZVEM=I7{rX?yY3z=~3x}E#3Cj=H!w^;r6Jq zs3y!PUt0dh<-^6DwPEI@Ha7$R6!JYDK2*z?IWZz&sDVf6TuC_2v9=`Oj?ArzFy&^AR=Ee2Q56j(Eqt z{7=c)57xJ&NA&Ovbw2mueGa)Eo)=B5cnFWNLHq8Jd77^K$T|YInb&K?xF?E!V<^uE z`KWpYgM4-e=(9@2Bj|?jjYfn=o$F~r461xz?u(~1)`Zu+dlff zC(`zD`#adObgoWSRo<_Es*3nvK1CF@^z;qA`FDfXH_Qj-7Y<+ZWIj)`>OW+n;k)Ar z*|qg```+g=v&X}ayCWS{Yi;kjZqD}k?te7jY5wsVAJ^|7rzi9M;5~;(`JSE>-TvGD zo&?E09Df-QemDc&|68yoJ&&6E$XY*)_c9A`f53D0^3i|*-Oog)vjE$DKM}@{3y5z1 zc%7_=j@RCo{}W~XVFPh~!l|xO|FuQ!o}Yg-;DiHo(zksV0gU_hcrxG*>0daYpn`7i zTI;#{O`q5A(Eu90|3vM_0o5-Uz=s1=kgZff?1P>6_51w%BY2uiAFq4_h&AnUhYrsU z;Nkk3w_hBmm`2-S>b?9=l_VdQf8hC}pWHUzt&!u`mk;t`ahN*S_Tl-jPI4+>+T%Ec z^$9|QNfyRn~?qYk&< ztjTkE=mT+3lO%->YopJnFFgOSe5fLdy&sJvja%>4f97i+l0BuMwxK*X*s9LeSM?wZ z1}em(qj8$qcGmd$`A4=N+t=gq-rITZs>Tnt|C_h}`1uci{L|Z?fBN~?x4#N`;<{H`Qs;OnYo|CRX*bYePe#*w+@-|;#{0C zZ82jWIo`PFW#5x|KuxG!^2U|ialX=Q>nHCrqcy8_R71*}an$jR?01KzrSPvQXn- zKGMHD_Q#G@4dQ$dh0D1$`O0}?4EKY5-j!!v-wFR=o+SN;S)UdiN4T7jaPL zlQ9#npkRVfZre8(!fg#aSoiw)kC)xdvFi2R;H9Hm3lGM-@W#8c^LOTY`+}u5;k6&! zT`k}<^Gd(*3oGH1|GG4mH1D@Z|zRF^}M+}n4@xsq7{gxwhpU#FMI`U{G zyn6}KZQE|N#(3HwE@&G<_2WFVD`Qa@{70s+GGJbVPsneD9hr9jkG0Aie*7eLu$6f9SpA?74F(j5 z%Ia-_ZkKDF*j;SOpO(#D@;`P&;`+3&TouN|uRWV`=a*l&AE?i)756TZtuT7&Hgo^n z+6w}lcx^cSk}m?Bb}w$ehA8p2wL;l_xHHQ5b8LXN(q7vLOF;26V8*h9*Vgu~x_QA@ z@5&eNtu2%D(uQFEYdhC+t+sSF;IMw^PVjr5oZc?a4^@{-gk%Vf(vTh9)U@}>3x#v- zQkyS?9Z8TV-Avx!i_?wP;I+Qhe?yEb9b?E0on+2770|T^F@SotjW^x* zN`sc*9es{l5S2fn6*$blwi#`XX+&6Hj|3ZOJ<)RWgdrRoq9B}IA&#!KhH%&Iy>QCP zttrp1kYpbHYYW-s4DqeyiTuHid5}9P)@^bmsC8j?UGEFWdeNZ%7~Q(CJFDtF*wfZ? zy7X#^{y-o@&r3Qimk0BIDh^nNZqUtwy|hS(J=}(yhw$!_FOu^~T=+;Fr)!^2;;?iS zt&OOkNigCS-Z@<7A|$>PdyyqiwZ7DktIZ;f#6X)4?gR~W%l`aCv$dh6b3*LP`Opyw z679j}$!mR|#ii&4}XvE7Ii|vb);=>q~d&yrACw zw5UC4t0k6j^#dZ(Lm1WYMi>#sO=8TQm^^Wt9lO;+CU5i#CLd~7Yyff9ap1Z;;fRo)sTzU$Va>x^Ilg*i z5R|PQh)bkP&hoObQM&D}osjh7H>d<)sA)akNi1Sl48jl-@+aUkhMT0jFedqnRP3gZiD|n; zcSrjRCtDVmFd}2}6xC?Y*rMNvN6`^9!o9ZdZglX6(*&nDoTxgFMS68QFbcJGeCC;eTZvDCLRqr1=PB zbHNquus0F6nf=g}fABkn2Cxw09rhCBFPd0-*_E$E5u#n(LGEZl7U4j0qTV0}nWagG zNex|!6L0R6uOIu_qkXrtJ0HA%>ox@cHE4hANJJg8HQTm&kG)2VI_7zS9)tHgO=Ek@ zZ2cE#gL(i^IT?6Zcd{aF|2skb?(`s2a+zDj!A>`lB5Gai;@-LpFZhy`?;!5a^PRh^ zjz69wGB+<~XQvjG@$;{(xp-Hmgt)U)Srdwv4G})`?B@#V2vb0kC2i`&{ag!@_|j$y zBEM%W;cjf^kC>cJqN1V!NR7xR+bZgLGFoKlBH9aGndoc2=`7-`pot@Nn{6 zyAz7!uKUSKJ!o%UN#FaoG^4=177YgdXCjsdc+b90g*J+R8o<*YELw%aHtA1KHtRV_+$! zjF!K2bB&2freh>XF7f6D`~hwggONk*sRg7HLX4=`SW9!-K)H@Ceg z1o+7sW9%yfN>GJ3)JaRx{6R;-h#Reo@KYG}NJ}{_K@=W@!4}9gAjWp_Ce%c+`xJ%w zS;mH$bvcw%2t1|H16n0u#4ckO__2wnb1(BB?*_ zQ_8>$b8W9e89yCi4x6+%6G`|i3E$oRKwO{40WOY`xd-PGjeHmPzx&gYd1Oen_thbi z2*b}Eob#PHBifuL7e0-suw1qAVU4r+iEbN`Gh+uW{`<^qCYMaIml72)SJ55qr~Jd8 z?6ppeq~F^5xk?ieT$s5dMxs^-#mbocayRYx_cI{!C~X(?_+6iDXH_TUZ&$VJL$%mf z+++zd532=>$V_*c6t=>9B3fyvHOjeZxJ(eD=DL>zJmI{~5nF^G;c6i`ca2?XK-|3v zY-%|f7J_X)PH6Ew#G^>gq}|ozx7r3mavJ@H;{@EaJIYpo1T+(b6T1@N&-~s+p7;T$ zS>LT*D8CnS?)=JzK?Qu*o`V#Fa06*sfV2n&Sky-AHvrf3_s|BEwAOJ2RuBA?5YyuDwi@ zHpM0Qc2$|qBjz`vin8_jYb7FV6f!m#WBpqHO$f!PX?--gg#Nq(d2C7rG@e* z4dV{AeJ~LRG_NPS;wj?tJ*g-Rlq5g~UKzD>pLx>k${;%e%=NIfZTTgl7-#!RaVJEi zodKrOxEY0aKRiK$qL%eD$Ma!Z7QaMbzvFV3xAtH7B?~GFJ453~85s>1SyKoEv<5mU zG4wrhp_=S*g^)zuRaxrE0-M5{)S;D9BcnezryM74{#lqQ&akAyQ?X0H{aOvHWM z759%LNvgRWH!bEIiy0;!*rAMOe5} zI(@lVOBhV3WZfTICYS*nV-K5J@Gnso;!j;C5qcO;w3SRb#?8hM@hcFYV@HLHwjmt>Dm7QKNUeqErIz?s&Tee=Ali zk`>A?l{2L!0z@MD6(@!n3nNOszsH9VVnq8sQSs z#N^X<%k513Jq#^E?0nR1w(qYQ{IXjj48=W|uAOT3GZGJXl0=h4WOsZC*>`Qc302|x zcqxVXYyI!U(N1ldUu1ehEr455mVb#bYiIq?pM3E|52z~rLpg%cOt!LE?%~dB%y^h z?w-(hCTPLF#JZ^>;%pnQK$cdd9Kck@&1Ss&Yb#O|26va1`P=AQ>{45y{+a+{*6l8; zl1P1=P2E#HynYOVAbD$~6GSD1wX+riat+ZNybw|0VjL{4?%YCn;YS58Uw?g(nY+`Z!- zPwGX-U{7+}NWotflzN8*uu6ImU|u-Cd7Ht$Py0&}XaMN!FGe#<#99U7a z-&vc0n-XVka{0#7!upcO6<9-br5H<)8=uH~NUWYz9+Jp=bcp9d{EsCw>gGD5dSP-D@xyc*pFg81Bh_<=TIA*Lys%NyNK7B9 zfs8BvK%8s@zGG*L-~F^plR2=x=%vEMpyuvn!C&s^3@zK^QtZINjUZM1kUWU;x>g+! zMI`7gp1UI=tW=?EktRZw!DRB82Ej@H4nyBbzT||=esp4eE?M2vD!AON8E%3c2vP|C zLhg1(__)z%J(`q;q;5|QC&6SKc!FS(=zl$!agkF5KB)>-M`8w^SO>_d!P(P74Nz+% zfEv(=Fa$PkOLusev-#~-#uKRR1)>q(#yiw@rUW-X!buCgV(wh}%d8Klx?|5K*abh& zZ9vW9xrw`1qPm@-A#TvNZnI0NFe;sXd>^YNV!l;cvHWO02phJAUx~DMkv3M{QKI?6 z-YkPdstlEBAAu!EN7d?rWu-Jdxu zoPdeJ)od$tk~n>9B)|JLom)Yil(gH(zd!<0lh%g$gY*U+o4K^w*XcL+CikZfLSpzr z6N4gtRdfSrdyHb`c9%G!(3+zRQqY?io+6`@|(n`nh*=i zOB4=3)gx%}3E|@(?lZPl+JIbE=Qcs1`O3S@%dd%=N=_$B&C%T^hTw=TbJ#eUA?pDt z37vW2BV(dv8H~F&I2Ylze`&8#PUykVJr-n8ZMP{vuD$Dg143lkU<@gyB#PP2XEI5* zgzG2`6Q%pt$3Tq1NV-`_&Q`5NiC)`gH~k@KyD+9PY0;?v=e9n&?MEQuogym9dWHIP ziw~DC*|BDgNIX~|mN%e4vF{6*z!@l-zkje?F8)t#LOY+*xIx9FSp`JceqU_jQEUe-k zq|8&jogcA87T&TV5(!gJFqddqZueuUj#=wTqisSi!^US+2CQLB*)%0(75ufa4{m-1 zS$^YfaJf+h5Se6@iO;AYs|QSm37QNgs>v@*hFN7cLN*dnKDvaH>NyZy1?Fy{dgKyD z!rVy@Hoh{U*?cEaCsSa4;gm`H-L;LAP|iX0!W?+KkTroC*G#P43+PueOa+oZXmH<) z`%?75@gU|Z6po1qdyn-og|QYIa|5%})vAF~M205A^u{Ymaf@)NmY)nc`_#(0L5b`R zaqxJ5J) z+XCO$gX;Ica`Ot9_lF*RG4uP*CTbeTKrvh04LAf#WB}Y?hPC%7^W@dV`zyS9z+{Bb zwTXs+CTD?2=@Vn|IM@W(ERt>$GeCBb;9)IJoz_oX_vUQNK_i;Djww*W|5emq564Xq zJ@#fHM*!Pka(?nV(Ta*P`)R)L3yG=azzl~OES>(OS0Vr^2<@v?O+yEN#N5GLWc=Yx zs1hTu2Nb{>&Ppv*fM4-cYLXLb7bjF}BFWX}#?a14fbAK{?|u~=d$(}&vgaD1m}Bc` z5=8^8jdo;i{BSD!0M<~jeeACVVF>qM7dSL62-lteyxGj6W%#A z!Y8`iOei^+Tge7kD>fsVl7)HEd)uGnOZgJVur2rfHN;6(D?G%5__=;D^oBtUX>_gY zA$Vtt;uaJmBG`_G-FC=%;!zXji&r5k*s)H1yukli?8s$48qiowue6?-FQrI{RBM0G zI`FUVynGS5C~rexK#-&9(oz!Q+Bg1arO${qr5;s*f&!kRtd--2k3?BVg~t5WLI*S= zDtyf4L^gbw%ZUR$<{%@ z{s6cqq~nL05RXN)XZ z7MSgaM;H1i;?5frJ(H~q)2Ut2M3TrrGA^Yxgx)$CdB3YSxN0y;&Aq@cG%e)x=OH>W z#;NNZ9VRJye6Acdg2g)v#KP`fS>5S+&+|*;PlQTWZ&?C}Oy+1H;%s7DG?Gk99%7}WudKd`<`DXM3%94lMsFPlOY!V2{!QqN6|64R0+(VAW9X}lrE#v;Wq^v6mleiWkXgsD^U)I z*e+b!3`XqfdFg6qB_0K3d8Hi;bONh_;IDU?Sz|OG9}qG`j8WR;zG0F~I#uUD6c+_3 zd<4b0{;@a~Aq&Uq$3_EMVsQ^lBlN<{kc~NV60e0!OWeU93z*+4=!i%%9b83?hO_sY zluHoxR|lpHrdG$|a=}z?)9t8lP2=J-xgAa=RizL83)CT3HSK=eEiv%Q@Gq-{+dt0) z!>&@-!g4}sp;cHyIBKv=6RrsfR%y9^nG7bAONKB9FnMQ?HX(^GY%1bIB2imApcq3s${NYw=W7CI&3e>FCiti-)V~*7V zNfLD$2Y8A%VVZgRE?ed3^4=n*Pico0!3JXp&us}zhgEJsj!9*g2_*n@rlu@$#5^ku zwS`gGX-&{ek;*JV*J0wuBYMDy>6{Q)AUzS?wX%ll+{X6`R0SDAJs23!q&15T<gj53xwS%gEGld>zfjMri1?kW~t;$59$BFl)_>~#VDa57H6NF~9d#oVlSlF-3(N%%}!H zG99f>K-OBuLzOuZN!Vb2MeK}{sE91Bn!dqQ10tH7=CEl?|1BZ0zjW78mzp&~sOYvp8wLx)A?l$MqV~2EF#cPjb)j_wozS(% z8-;bmB?^_`U}81@b_N*k(dr_|iFyIvB>A~0S10t|1{#lbn8iDxZ(XLxO+`~agfEg# z{kA4Zb|yt?;}9~T7KQrm%60l35kkv6Z_*ua5iE>>=E4~fd?hk3;f!o!+U=26(BwWr zGZ;t@GR2QpFWfEZG|dx_qBtb2mY0+W5nPLqi{#1)TrTvXT!o401Tm3-5S{)f&7Pp@ z%YVc!cmyqp_g{iC$zq23T82*)%%U$R#j%mKzfLkY@j`kD`pw;5pOTm&Zj~Z(Au4lD zP)1Sabe)VUQ8QtPDq)+5a z(I2x|s&kbe5dJnGrI7V5^Z#N=F{Z2L7tW|9i^wLBCT*ri--M_u5pjLZ=@? z6>l)VC?6sVa*ipdB-FDcwSo?&Ao|b`i6S1G04M{XsP9q&e?6adWP{P#w>Lhc0A9kp zdQ-c1vr?*fHfZ6(opueVbB=v?`%_G<%iN-|Jv}4%cET2TdZvT;dZ;|~57K*JUlvI5 zvqd9ez`05(6N42SdXH04O%HuKVCPd4Ki#*6G)T;e!A}cXU5VC zB)MfGV6i2?D-(gmE2u5`T^Y)fw9Swa+qAKSaNflHtPajm5M&>e3}6@VS-RF+5d2>U zkCN$nNBc^OPP2qAS5QAe5$YtBPV;-fhjS)`<7-|;ZZ%?COpM2UYL_28_V`m`l$8ao zOXkV{Xb}Nsl{z8%;Or5d2c5`)MCl!9%NqOwAab4UdCF8Bw1tl1PMFRfA%YuyHBEN_ zU#+t%nF$jI(o-sR4P~}Fc!sK|e;|hCbHO1KgSTu-;9_|F1`IX9jndEliRYHZ8_YPM zRHTDsXb+@R>*DiwE!{JSMmu4nzMv1=1hdTS!Dk!;dy2ptYE=k z%lts@ub9#wc^mx5^@!O+3gutoc0oMQmPU_oy8e8%y?-SfC3;me%BQmui2mipETI|e ztGtRIbk>2Us}y#)MNq6KdJ&Gx@98T_9@p$>))v4c&*(GxHw z4-}5Yq$7^~But0PPG_1Lp#y!+w`>fNF+3QV8o(u2sM1vVjVO*gn}Wi0|0yf;*QL^T z*Ph=IU4j*sBckfrrPTXs+EYO^ftbAAVl4fwwZ-V;;jCQ#y9JO@y>F;*v^*27f`(m{CGtBH=&YwE#aD$C zF2ux4fWVuLdx;Kdk?93`AP)upxfk~VEKrME zV(Y45DUAyLUR4`UN+jxcf!LI3`8yKzYmyd-p-h)8@61$DaUBBblNQYSL4EBI!is5g z?S6z}u25k~iQEau&Xqe^bTC299_!^^YA;cIr{8rpVgGc-0MYzz&7LbRs#iRtkvUNy z1PSIw4qKy*s zs_$BzY4?OC!2m@NcdZTqj%$|6KOxiR2NU^q%N22VsO0n0rE>}V&d)|?oDgM~bV5H0 z?~Dq}gWffvYGKeSH4x2WA|cZVR$sW$qiRO(`pTTd0+=vYbC93n&HXV`gR{6|K zh&5k|oL|_QasCGloL}h{|7j_!mrWx9zZum626+vmm$&-+i0l~^i0n_ICDhZ^WxFvj zsU=Gga5qHGC{wFN7l}}AZK+wG!VLDdp&_RooH_;qCpJzvSH&mXHD0_e~#h$r| zIKmHD!4u`uR1zclW6FY>;C#3ItwJLrnQMS@qY4p9Tw0VW4xWi}HFKMC9mstlWvwhB zW+NDM&NX*8*n+6m{m2axv7Tkg^bpkd@hn`@#$Lo+L%9VUoUlM{s3+A)aPNLD#a_fz zZq#myka0xheNa8fIKRc)D2-a#A`s^~#iZF^t6MYle{0yYg_7UoYldcajhEgr{;(3c z+q+s`6#M@fn)L}&DJY}$sC zWwEK?LG{YCB<1**+Mu84ddUBY|9pv1ks2C;F0Du-pY{_%qEu#kv{fS#Id#*3hUszu z2a%()ygNmiPKOU%c5Rk|C|^8e%wX6J8<}!3ZM&q2cqoZTR8C-e-T6vN7f7-4V3blU z;1!J(BC(1hhCJd6r`uAVXtg2I)@Ox4bNLZN6%oSYiU|7qFy~Yrt`##NJYCe_V$0U& z&hR2NEtwu1Pf5tS5B5V;N{tLCk~tjLxzdQ{6`G>TlF>zC^@u0!pcOG2FeSjHYQb#fLW-~0>Fs8D2@S3d~Xf3p8NNQ9W8c!CUx z=;GA|e~OQDN81Jm)2zh za+)9lTS{P6h>V5&Lb`GW9@8s?%|H|I4~m2He5&Rv5&X(j1)Ui{gdQe<5S&2-5R$|Q zjlPz$lq26`Wu_JSuLmhvOyW&CHSEG7Yfh#v15>AxPH_m)8g^(cQuZ~Ain*Xa)L;>0 zdB>CK42&nrw@j>r{0DJ`&UMZG5Gcv7&NzeKz6QJ9!4e^fcH(WSsNDuU5-Jfg3Nm0w z+wO?Ti6e`2!zRR-l=T7SgDJ7JUVgdim%KbF=Ta_-L&f<`&qvHtn1O)EMeLC&3_D;V z0jihC#!5oG5VPimRV^Eo6DXqzn|8p0KSORHITB(1BIttAO44-)+~1&r2wQYx>ZRze_aV}COa^@pOhAmeugvkYuLP42# z7aoo9BM*E&Qj&g;nIV6bu2WJ(cw0*;a7Bj&s+IFq+Q63m7GF_(l}-Z)!Ti;Ln5 z=9d!9o$x`1^y7x~W?K_$)LD<`;!cd$at|Fvilu8V++7ShNlOQLGk{9q)6s9$U- zRdSqAsWNP2=+FqFhrC5OXeX>A>U3;=8<(%2vhJutO7{@BNVx0VL=;&Y{fMCX!2>Ro zK~yA}Ky;x$qS)cYcH98i)-h-AQaa6l8-^x{2vdCJM~)^ZMMb}LdQXhC+(HJKsE9W_ z++fO>C3=`Eq|>B{(&-aHQ1umdQv`|;+GM~emo(j>j(`xlkz(zxa^C(12eUq4US7#Z zt)Uo1dgsFWbS-Bm1afMI|BOdw-H+!jMxjjTA@znx-CxfRt%jV64zVT@JoS=0F(0=} zNCum93;L@Gmg!In@~K22vgD&w=98c*4a-TkQ5KoaC!t-f4B#jORWH5oNR-e#va$No z@+0bs09R8ws#5+^2^+4XlhS|Kpw0id%FLfw?IBf4Vk-}%x zZqx+90{V>sU2l1%8dotVk^eo33`$s~TvEeQw;h4ueSx%GtLqPGtvN_;lwd8--82}w zv$cpN>WBCC6M;SHr51@Qsw%^%<6*Cf`ag3Y%GwgmXeSPqTa8FNXNe7k-pEwPeT7mY zTs+wT7(dZe;5&c|&rO5^}Uc7>t$g7K8jteos#stBlXFwFuV_(K;m?8-G z0uE=9-*dSLwd?|ty-Q#@k2T@0Es0Gv9+xcba{VAy;<$vE_FzA8okWe0ah;@!z6Eol zl|xVkh+xJpZu9GD)NrAqEk>S7$r02~*WnSwEc75nLc1=GnKUY8H$%nEh#CX~&Ow0_ zJsbz#$O;h+qvmvz5#Bsw<kh^BaQp(%;BVuX6{!(pY#_1NF0CjgrW+tUtQS8@xOSPXkq;3~phv?o0CxIa zz2W(%N%*m&bqiAU%1E)PTLAe;{MIhAA!R3Th{(_|-_-nvT96n^Dg#ZZU0VRS6iNM2 z57G)jOD2el01N3CE+=Yj(O;d;XkA9|HDFJ}I^mtFz)t~!R_g{Xg&_jN5W4BQsUJct ztbwaP;T==MaM0MGNd72w!K(xnw58vTSxy)ch@XfyzH=#r`rWRvz~y#{(Xr-gl71;h zokI5oi9-Ti&#-r?TCACr#H~M(M!9t%#a$Eg@?=VyHURr$EsGbZX6}+v=y9Fto6#Rg z6vSF3be%kw{MvDrPhPd@eoLw{%PCaVsu6KF;)zPJ#xDgTGSb)2y4&4Z zB|OB=nxqlx&WIn3pr9SGvP?uGK?X-zH4gs*8|D*~DWS6m@Hn(gg+LDG#8JH~BHuAj z-6s2qIxqtSr7)D}xGESMpc*NR@B-+utU84LupK1!{l>_U*qE-7Ti!A|nZOK&wiNY_ zS8(#mXb|kIMBY*R6PfBx%wUSUZN(2$>Lmd3I)oF!l^U{&YV)#AfpvfIMJcHy0d=ws z4&+v;R1BLc!}K;1K_VuHwy0vs1OqhRI53y%FhE2l;vtV#W|t8rI7eLiZ3rBB&Nx?Z zCzXsNoDN&RE6YQWwpddohVRr0!Zb%CVo0depZG~O)qhJ!wkaw`f63WXB|JIeHteba z=MO0CkA>&;dj?#Er5%71{Nbgc3-E6tynVYMSt2E^Xw4udt{BhD4Ml1VtdnjEF{eeQ z7$MCJ|oc?MwJ zWw|RCLU`P>y7$-~A_a58wZ)A1nVf{AxvG*+)W9eM>7z@QoUpn-5KqSl*Yf(Wescw{@X{X-w=N(%>DCY#k$Ju3)wjwb*M!=tv`WD-{MN6O zR|njEIg^oyenlJ8a$-gia`RF06S*)&6vE@&c|aLR=fAvB^_HV4ZXs$m4*(S-ByRrm zbLHk|lo<4~7*uAXLe#J8R2!zj2!vqY`sDu7aT|JLr3jY6#QVZX`w@18^DL)YozV|D zK7~{sF>4EhCz{*jM$)Q4zkFr^=q#z7^Xbm^h>ZHx$8AViyFNNPHb zjsy%e;GE%1t+US{1lS<1$GSav&eX8)-gxvNyq13+Af;i%iD3J~E_ghy?-%cq@ zrl~L`=T!td>vDe?_aLEUbmBBlj>w!9PG8C%7G!k&reM81r@HjuHinL7$ zN0!6iFkwSzab<)h88Q#bLjIc6(#!n0RpW^4Z;Z=eLzJw~L}6(LLYRB1+CoHj7D7LD zwcyVypOIfTVFaarW3L#gH)87C@tu2Mxc{db&S<5Q3HzHNOG%sRWF!IYu5ginJ)?tC zTr`Henn4Nj8zabu845zA|IGc}xN+>(3%-xQb@>`|AZx)2`s%vaE}9mJ96thyR_I`~ z)M@YeI^E1f^iqeEMK6H_@{k&APBHZv&9$kAoq-|Bp1#Tv4}91L_PI=_x{SXVgVlFq$0xIq#bV?|PHgWj4fq7FT%P!-chF!qzA zFs0mTec$}V)E{%yB#}&jx$|QOGvmAl>}SZ@#X@Kr8Pla2E$p6f@rym8fb|5Y0e_;R zPyQ?70!ezQ)DMAeY6nYnBi8v#ndrs9PNs{rWz5%TDhbVml!&_zM@1y3!WgI*-h6pt zdic(!2^-2}7Ca9nF%6j_~Ci!<(s7Yy_|4{=L*5VSQtqb5^ z%X^;ZOLnyK0)C{6x;$aJcAm&zHBlP|q?gr!dNDbL+C%_KvJoj0(@)F_k^GIZBKQ=7 zvqbMpt4hZaM2dvJb^lnR3=nZv+e2lD3$&uLsU^j@gy1X+#`UNWEUA4`-s$%UW@QJ{ zc3K0X-&}N-AwlgMK(y{NzX3rZWA5o~KtvpR0wp<|ga};&0T)jZ0z&|r-%HMSF?LJM zL3{`a(WdSH&^qm>T;qPX|yzeF=8Xs4TexB5NA04P-S zTM-iKrL|MR?C)I8D5RUdNVn8aa2jKvx>ZV_|55I1aNXL3(}hxF&4s@p%#IGqrJzQ3 zu8`Jd_`^`Mwv=8(zC@c`3w4;esOQI0`nZ<>g{s00MDwsYpWtE%ziG@?UP@RzFylD! zawIf6jR{dmAy<@U6xA0c@>pH4@rjrH&Lqejo7+IotU_ z1d2Cyz}3h$sZ0oaTna$|58Mn_()5fUYg&&mn9DO?V1KLfLxevtOG`x#_5xf{8Id$Q z=UNzy=)dYqOtLT9xbFW_vqn_a07{U`k*gubz}fRDCHF5G(JE&1A5Unu-c8^XRcK9~ zyHmOhKGcQ}LdMFt1SriBPUw6k$Et%zNO@?}_-lv{^*qE;F%~4?-(QzAKQZB19rZ~J zm4SCInw}xz2I$SCvb9AB;D%ulspv=q;?^}L#HlP{Xi2$sAZ2YCKXlfX?f5V*44&H0 z-Ug|K)Y=^4Dl>~q=~z^>m8POhmcOCenh?e0+gIX2M)^v&vqcKgR2dmj`lb>Hr8ua& zuLqd|tvtX_7oF@#%zHIXX#QgmVH|GjtgUK<5L6uav0W$PzGSgf%vsP8GGDn{sEPgs z^JA%|#UgUirD^dHF*fAKa9qS@(Q9LV(tqD~^^QsX?Ks)d8IfzLc{Z%5K1ZK!M_e_5^Wy9`nkT~CyfT;kF;9U*H^PxO8ILxKtf#g5FP-+8qI4V#q)k-WgKvf2G;V zX+1<)-N24SO|Sb2$Olswr90y8ism9=CYV_}7>pT|fPTHKc{qRdsr^n|Bt&D4z@1%2 zK*&m6GSN%R2#AbW#{A=wwcCUU+Rl&V?7(g&KGW}h%mKrLM7K$iH){F4|CpEqM&*tR z29M2GY848B@6MJ`X^bNCVDs2avcGrD+WKJ3CreXnOxii*PiI+^6+uWwDhUTUsWW)V z4kTXmUte9C`;;yq%Gi$`P`$eqam@50y9UL7)yh=Wq=IJC}&W&H`~nwEeMorQd)=1T1tNq4wJ0Yj;!ZfT-s`KbCuC1dxtm^=8-f!@%vjL86$l`0jaJ+qG0khPt@YAGea-Rj zuppvE@t7Vrgw`%C*|Pvy+`EIA+Y__2D3v0bTmdXXQ@v{f(;k~8$Hu=2#LR-qVj||vN0f7 z9#Nc=;Ai^|78qkcPH#{U2rAd}Qc$IJ|N5Bg#E~I z2yAIi31@eZI*MI890=mTIIcnYtudW!94fg+APTcS94!o?glXy;Q4<>8=a7(9p64s^ zTM4&5JwY5QWK8^4^Og9mgpbAHIx}Mks=}BLX9VUeL0tN6Ai=Bm%9mD1V`=Q2A7EhD z2S4_uR}N;3X({u&B3c>muOzYxXMF~hQpYs<*wx<=B0A>B4yFU!zLHB$LPt8DVJJiw zS;ZOYQR}RTVMXVil=zc6XuI!Uzm3#l@?LYtNU*7)w)6c)Y{naS@ z>A3!Fzx~oD&wz2P=F}3<&^R~xx8GPLeI!n}hxjIc;}QA08su~ZQB=k6y`Km_RQm%b z?l}MW*4w`IaTl0^g)7@K1bykp_Y|yR#B%=A+duvFfBpQ^|Ni{zAAkS5zX44ALH?C* zzy9*CpVvRa+h4!O@HhYb>7U=`zxju0-GBR+|MBzx`Nr@0`j^%`k5`1|-jAOWhQcRE zXE;A~f&(aD-_%@Rf-PVA)(T~z1+<*sTEFk7wmfgyn1!n-7=souhurz84Mm%A=X<`f ztqpzjF-hf{?_0m~uJ%0bFIF+aDs`OLTIZ)uhdbA1%e{Q#Q+u5dW`@$i{i)x1SC0e1 z$lg4bytVUF$3%WW3(51Tql%-JE*amae(%Hjb-(!yw*<2GM%8Uy7GLyAkk?ydieBFmk6h>~bgv8spKrdhe|=@H3k1{f8_f51Gv9e-zW@Ccr7my1ZH%|@ zwZ%mJ@%l@rBMU#2@4TF{HdV3!n0Sa%AjjgQw6Z`TaZAdCrG@=A&)TfNbgxbNzH3v{ zw3HIWJI+hIePdw?>Y#GZa4<2IRpI|tFMrLI%SCF$P^^)@WtVHSE~x;Q=(FVN+N~xX z-!;jI4L_<}+qK^3*{=1M|6eYW3hXe$xFI*@wR#=Cxt0@2U|}+l_K3-|mO01`vepvo z&#dMBKF3<#f9YJy?``?z0?*V1Vqu(V|K`OktGUK?WO(RNzja*JYA%7KwVI(z}}9*~gX<8;U3-h!vdst+kQmEJ>0o8Oo1W{1#+f%X!HqF3VX_M8hoS{XWNX z-hb&`&i0*;dMN065X=bVSY2+jG%4505Td^Nw_LNV<~`A1t!BG81aQC4vzqHKy{kF? z9{_-xag#4?Fkn`Xv9q`EUR8@BZ-l({FzB_rLt^k3W6> zW&XGS^z-lk^?!Z-)35*K=Rf`Wm;dmlzxdPt1yD-^1QY-O00;oc0?|z06OA)hZ~y>I zTmk?O0001EEpK8iXjD{WV{0yDaC61IdygbVmM8i*`6>Krgapz?mD}6AwX;$K4KusN zG#BXJ=|$)&sS1kRPAaQ2vv{af-~HO}n7f_hkMJ-H=-r+nD>K5)+#cuseED}|kga6atzWB%MC&$+h>C2Dr zkJpcP_kZYKzIyZe_U^HBPjvVC`tkV>x5uB3x1FAzxw(7w$@OEJ=c_lby8oX3Q=#ko zKWP02&G(?)jS^kFOp-y?gce@Q3b$^!%$AAEqz<^y|~} z_t&=%>BHOWmk-^K*T1HRyW@+S$K#9cyI;E>u3x?AZoW^mJ>1+MUpyJ7c=PJ!vAex_ zb?kn=dGYu|ho@fNU;p~>{QCCT-TZj{^4Pt+{_)4_?)lyQ{qZ@rO_Qg0-Qf+-)5I@n zzN@DnrybnWT4>QvKf1ks{`be@FOOYb8h!ZH-R;c_`N1dG59w@Qy-aV{`IBd96=?yl zkMgl+IDRE&rw@#LPi9z7yavTgsc)ukVi!4_|!p>F3w?f0tix}h(wA0LnRuO8&r={|61`OMstzVGwrZyt{K{Kf1k`u;OIO7&!X{G)U}FYmFq zd~|OWO(lN5qX*O3{`By}&G(Pp!TUV)MLLVOS6!$2G?_TUy%pU2)cyG8cKR<3o(}A7 z_x#O0_R0_UPlBT-AKrY|y?FDw>$?OHZ@brb>DMQ{>fQmG@Z;*;v?Bd~W<}R8Ud&$n z!|TWYuQTe2%YXhf|1*8t(G$~`-B0DO7kAGSe9)@bfPzoEF1axO(p@|Uyt_>K(j=~x)1&gQqU{+ zA)Z`8Y{7;EA)j||^YY$x-`ylM&PdX|%?ptqe%ZafUqAZS^y&K9|LERMN3b69zq+?& zfAaH>ySER=$NQJxJqK9JZ@w=t>At_Yy_H|Rq(LA)^3%^Aez^NNeUpCDfu%!yzxzB> zw?xN|->1o5bhnAJ-gh^zx<`=3n*^!p1rO=4?(QGEzkL1aA=1@r+==bXQvaI6wTExe#i#TY)-rxN+{_;il7Vje@ z#hnn!9)EdG6f|Qpef)#?IHAp6@c1h-t-px`{r9BaI}XPiI}~+ z%AZgF@#gjh&G+_Edh2+obE24+mj;!OuHGw@P)%R_?{q6&`77~9Og~Qj$J0~entsdF ze|eT~WJbB^3g&Mrm+>B+R^9DmJ`_b~qWW>ni`(+#_<}D^t^GHw+B}K){Kq8zqzThM ziOha{d;Rcm^SpZoafdGaq5I&cLTvjF6YhWfGv-%VbS4HLf7iY3(~b7!gX`r7J%-2+ z6rNDx1D%KPq$UsH4{RR7AGo{@p2II+8)%LvMtl_0Gl}nw|BVc$`{elj^_z4XfJlh4 zS(;hy{Ogapw+TSM`L@HJKY2Dy`gJ;yFX(gC75Y4W_1*Nt#Q4EX@QO_)xv{t} zJK{;a^Q&%R1Q0KGwoC-_hwn&B^=|RwGU(k+Pjd z{GLQiy!4CXDN;OM2T|lS>mzI$(3H|6nD_H8v9_SQ`@2W}Fp>THzrUSe+Sr^`5|<9<$)>^P{+W@2A z6<(ynhcEJjHC%v%H=p_p-9|?D(?TET@qTgU6MVl(RMZG$L&7=JpElN6ku41LXGcUA_0)-glbO?$1l7w0lCQ*=obgGZa6!m($#}Y_cmX+k8`aroFl=BSGFSRxQGe_+hI=)Q#ZlS4#T^$LH6<0!_DKb z6ruMNLth+U$ylJ#9XSOS;Hi)AZa?BEBK-N;{Le3E!9?@{{g|f5c~8IN`V>JDKmJ)q zKWZQUsG}b>k56m)EDu>nOr-Nm-z<;ti@V!jKNVi0@z3dz=?v%8WO2|xaJ1g?-z9xo z+*9Geh;RJj?&0yP=l3@NDhi@j-569$n@(W&<`FSD-{0MLh%vr?_44-kkOuzc;riwA z58W@_uiejGBDLLh_n-ecjm6Nb_uu>Fzx>+$Yj=D1^YOmBJ%0a)K;>8I_q*@A@9us< z9N>3ZRXDy#PyhU1en?Mqtn&}Yo0mU4jt{5ryYz~G?PviACwy^CTRJ|ZDIR}5rn|xB zA86n&hwEQ%9xx)U=wG}3siNh-x_kO-dgA&0-NVD-2ZW6yG*hg2I{&9%e0tq|(+!hB z?A!6S@p0e1JU-HIntsbMT!09CrpmWw@ohotah^PSjMU=+;sd>yD*;X#yA}NW_T9Ad zlen2<-L6WM>qZ2xTL-#zIEn|c8kq6$6t8Of1bck=$Nl4YR1p6@r^g&UHc~IlHf|9E z<)I+NYI>Q?Q>UjgvVDJhm+tTRPd8WZz2)yS2}bw_#{KmjE}166Bc2{ffcy69y-TM? zqz(bV=QO-8@1PjrZkyyLkh)DU`X*sV&Pw?ChvWTmj8L3?lWt9wo56AD?)EV)b!i=bmKpHp6y5Eo5odl@2;lxFKEe_ zkTHd{WpI3fh~OKfDLmkqXkITyQly8)#LGX`u*wO@-Jz@tabd4IJV*ISEE+>n0jX(u-7{Jye(%%o6SKYg zZ~v|P@%r)p=9l!(-;d+55p`0`{eH(+0xK*D7x+G=f1joQdV1FK!gkiBf780KqGwm{ z#qss|#rR1+{himE3txM%;~Au1o)JyZ=})EQHSE0BUjEvA4e3qv+Jnunja9F8m%dih zZtZ-xdGqPhy!XCx@BZ>d^t6cC-t$r9rO_hlP9j{mh=^r;j+fC%sJx~_hWqrFC16x_ zClN1(`NIfpw1^QXMkt`A(Ye$uV&Fwg1PkG}`L~Z=Ci28Ij_5~P&NyD0U&aA?XQj3H7kfzc>nUmtOn!H_MZpC-v2v?;aj+9^X7>RpHqd|Hm30l7OEi%lBm_E*Xca-2#2{rq@M+_bbyR#q{;EB?1=MjfT zOxSw_`2tV;?koY1#LZdw(EsD^=k76G2_5-#c6Z+|FMX5(->y#Z-T0ZFeO4s8r(ga0 z<9Bzrhd+OJdjreB_;OQ|~J@IStI@!9RKuYdTT;-1INq{qgG4r^!V2w{Q}*pdy5n)0@kPWk-O>GXyS|ijT7bEtl30rZ=xw};qy;( zmLMk1tICQuwDkP4x8)Nc9?^Hu`2|UbN=Hv)ikw@FK?UVW^vGroqTcjjViJV)H1eBy z%E7mzv_kqVhK*4~Uy4O)Qq-q6`aBQ5peM6RE|L=8PFSBst1o%&NTM&ZrWgG~Y$n?) z-s;gX@RApj2@oc`zP-DCLDPQD#E3>aUX-E(SX!;W^0su50+A>I?3+;JIUGI2UA@Y{Ge~fiYxrhvf|2zNeWHs@BQ72H_wm!T>kif z9Dn`!?*7F?I;%3-Sem8#;8bZAdi0Y&fBf(N@#&wtaobl(GPrstO^siT!Y%~g@9us% zz98z@9lAd~{&4-O`(u)p?(c6NAG@!PuQ9EMu=ww1S+;(-gZm%51&qYGKdG2 zbsEb!z5o6ffAj0?O3~|8~6n>G*i_ z{Q5%{G<4r@NEpldLOo#GOdcoti&AuJiM&Bk)MSk_VeDz2J&HCFs`rTVQ`zpUIe}#eN4K!pe z$Zr2TRz{L#Y3^Pna&Zl_&ef#SfGqa~F5bP()keT56n{#EKxR|@?ce|33}|U0lLLtl z>PhHxC=Crvf2*ErOyNIXfE|HF4DX+K8^rMbi4OY2aL2=8mQ%A~gYzeb6%d^coD*D^<)@^*_>%S-W{ziAFof3&NvS9({skeY0M<{r}@=vc^hXsrTUWr_$zo`$D%;_ z_YV^2emDU*PU+q3+jMmK+w{uu80Qb9tI7|IcQ*evfn)x5giA;Y5@whG(o(a#{0^+* z#j@BQDB-BGKYe-g0y$MVOyccl>6<@x^ch5WJoppoxW`{^9!X5e1L#MIJbKq9I{A94 z?e;Q#^)`=OOb6H!A1V4E+Y>gPO!`+Y<8}4){`lgj>s!P+etCQ$9^=2{T=QpWs_{#}}PocyEoQ;ZRR%BdGmou2uIua-cHuk+-o zUw@aF#qr>}+bn!8&T+Y``BFy7^y#!3x?x;QxfXGfW!npQ%!~S_@1FF^4e6&zl;cTn zgHJ!bap`9mZ2CDk-6b-jRQjpYBg*RZxN;G{2kQ|i_(Tnf_&(8TVEUQw z=}DJXnSQ3XrJrU<&pYSxnp{w6NLptalE$SWUZrP!dSUwM`ZU6OpGNqo(`wQp)8lDO zdOVoKTb@jt3p6f-kVb^Tq!BTlO8QB=i&mu(X>(~c^sX3VdVJ_@dVEMnl76P$(M;(q z(}=XW^jLZwsziM|IumgJ-=w2TvnNhOKQW_@Jx(xc`iV`X-{~|Jeh(4H9xOeNlTN3E z7iouQ94<{;tXLb5-*u!5qB-ewb?+FeT)&}{ zwK`oOCbJ%|aXp4P3&?QkV$x00>%C9sn}h_9TeTP%2D&MNx=3d>U^Dq*=(dJ*z~4^z zK`8i5l9K^1J)LNh?eTlC8i;{~D~~;*SZz8O05u&P4iqQs^X%FX8aPW=rag9s(=t7- z!=PMjLIVJyaRb0V;CVyKwLMPSYMo&*T_%pe;gGBcuGmPw5BS|-gwuo)7GUBW&fC#D z9o&Tp6Lba45V@F3{I><}}0jlje7sF5z07rO60#Ep|XlbZOOicft#r%@9m$ zgAw%J9%pDXS&V=V8#Dm|;3d&Uf{{Q(6Nr#tCtr;rB4`{=(P*N&J+2@@G7E0lu6QvxcOL_gHc|l5N_m=g@9xtwu8BEQMbvC8;iGw)#et%t z3b~<}hNMKhU57O(S`<9L^#+{v^G|~in2Tcm{8P95`1z+wesTe4d4kMivoSMPUJiJMH*-M=U~>Caa(ui*;y z4#l<_o_xPU{LJ)*`5X0>o|clsNKUO-PNEl+m`f%xi%IMyli0;1?vhE|ViJGJBz`eT zxMY&Bm?T~@NnA`aTr$b9gv|buS<LTz}OZZh60kB#^u(}9@)e?r)ML?{UP^>S4V!ec7eGwGv745x@_%5MXUj)T^ z3B~#%DAr3T))zssUP7_H2#WO*iuFZMtd~%%FM?vdgkpUW6ze4vn~R{>ETPz31jS|v z#pWU?HY*w8G9h9K#pWU?HcKcr7eTRELb16Bip>&=%|%dbmQZXif?~6TVsjA`niQl)f9HHF->8@Y6>&0!kt@% zikL$C%U9vxd9X^Yr*O4rVPQ5W6B$k6(iEnw!qlyzcWH`#(5oq`SK;)K&aIF7@{KrW zFvT`pR9>nN0aFOLP-O}=O=0%oLSYIw@L8y`5k0}h?i5ZrOp)MgV-=NC!0%&w37xv} zQmsonPE+tkbeJ}h29Hzd-BoylRY(A5(5i&afcAL3=CjbgtRhTPsD0?v*ofk@NVAQY znszrH=l&GhV+u*N`o)cGtpcvOvJu;Rtbzet>uDo;7^ld;oCfe-r43Iqjrzz-QahwDyr>BVMU@WckW^fGNVM0^w zM!4FaAqf|l!8nF1CKk4C8!A0GgDX{VY$CmSUp%n{6PjT{7iMVUw1^dc%(0YiqxV~o zsisxz(~5x__YHQJVy%t>0R-hJ;KC&b;yA@HO_2VYZgh1Nvl+a?48F|3IC@aiBKBv9 z4n*4e=|-7QOhC1Jovt6S0##N}gbF=vVRaMo{Ry`tcEHCd4xvEQY6~-p>}EF-)Abto)t4mKj%cz?bLAXP;Z|cTSE9;U=xHN|l~^)^D~pXp zzd`NvgyU+LbvPd|gYCD#Vj{UKaz}C zpm{h$a|eZeXdw=iRTKeDFAsCRkDw%yxpX!YmL7^|bXe2v8E_(E%S1^s%OnLj_o2cd zBqY(AeuL^B%9X5G@q8<)hq&4^#Vg{~Axx*SBHT0BM4VN^vJIN4C!u5{Jtu(^Q8gx- zvJr+XRZx9*0tnqEvPxJq7(G#&ec<+e+P4W&05|i%GR5vW7>C;bi1(SMu*^KlGR!{3 z(jLo@5*}-W1t^xJcSf;XPvoX&94iP?IM~6g&=gT`%ttL?g5fGKOyI`^-z&gEoC-5S zjde@}$Dwif;xrPrxYb_d9BDWtcca&EaRA)buykXI2?#OIiQP<_vCF+suptYZ5sJDN z@YxrHj|Ir>3O;5ahFColgwV^BYeF=&%M!ium_fxY=qS8>AJf1?5`ZxyVPu^|*26A4 zbBMV&h-jS9y^t-%=)PjAl7>5ImXedOs=q@#o z8|JqE-Au&>n=@@f-%HBhivBNz&F910=#`vQxB4bTfKOd%U~x|dyhlt-|u@tbx^dr}OZ zO`!+eEcii@c-Y`tOr85ela9nqn1&95#ZStn+ZBU70{M*>I$Du5iuqzKtjs|JMtG~@ zumPh`y-u;UIa5-EvBF>)SoE4m&ly}n47~y7k5l+U%2{}`yCS3x0jD8Ik6n5M+*%5q zgE&1hFn2X<;48?s!V=2EU=3+dGv26p6=fr81sn5apum=7(M}j+im+mL4H4d2Dt;|^ zbeY6Wr?JnKJo<+@VSpA!gkl}r6=Pk}^`LPU@)d+AT!am`YmGNO=15$dxoZIp<|wkhpP=Jk<1#++vEj7-9Cz@?+`vB_GwG(40hCV*fV*Fhm=$s!! zV)K3BY(qKF=nHhM`RfeT2C%lk>RMP^Gx8bBDJYGI^`u1qtY*uO0P=LPVFJ;xONceh zWX4Gag;z2G*jhi4rgbi<0<%cUT{)eMdmogzLdT`Wbzu3_AVh!Ziw z8^|WNtA<&R*3@GeKpnT?q{mX+4tk2;3*prFbq1lpn%MfSR+~gjL2#lW0MEra-&g zS`QKDDKN#eFgVFBZdZ)+wvRKcFZk-2x9r<#Vv1PGLjR|q-_ljSht?rCV>V;RC1WLT3u z&F^RSi3qc3QA0-)RmN3QY>8^koRA1C{JjHWenPPkt0KH8$4X?}Rm;8d5dvj75w;tJ z0v>*)HqG6}q`C?4P=T3~FCMmjU-?2RWV+qrXcWp<2?kgjI%W!s)<9V&9DVHhEykxc zo1GECm<{J_dGCuF$*!qkNjfO)ntc!fe*b|nt{0Yb$3$!;1W6!q#+sQwpG6=R=vIh3 zSIiChWV8tL2rS^1_z1Oj1k44g1X$^2wsa0(jA^^5>jS*VR{K>$yIekRu&OxmvxxlnwjhOt7_sn|Yd&7RlnVFIT&= zV9JwByy1*cNd_^i){(x|sIO5mB&~vN@os6&cN^x0xiqK1pp1w(C=y{g z(S0+z>&bc}V?g@CDcyv$nS1U?V-D*Oepz-m6}!hOHi>G1uz4`SmbHTb55|^o(nCE{ zz6?OaJHZq<_<_SG)-IO0>I9pu4TX9XFdqu5-H-LsWHz=vLl@h?Plp`OjSb$A)k7GL z*-$_qOh~)BmRa1IM=+y6T3u+ViY#01DhvVAT-wbhk1K-quGh+_0Yr@Dxx=tlz}6z6 zH181!pxQT+23AmID0Fbx4Sv&Pj5mXjk=Yo3QlXs*QAq_fh>B#Sk1PP8qRYshmc(af zz#-4Dl{l+}?|(9B0Zw=AQI0$hP_eS@V6G4oELWQ}$7mV^wP_ur%&F_*$rr&%*HGx)M-vh%1ZM%*1CsMfVMYh%jX@gnebT zm{}Y$Qt)Q1aF(z)?~H#SDnSqZXpondk4$BEMD>IV#zaAbis;}@`q8LT7aNk&$!jNq z^)p$h$_-TZj%^k|dljS1u~vTR2%NXHzH+ zz+^h8)<(~nB&Ct5V}vP49O~&*w0S;7qUMSIlquLnQDnlk8-5->;nEF5}08pr<44 zH{dIjNV(lm{KVQM5%B=}4~8pWA1t1TW%y%NRdJj%oJ;f-)q zNTXI!D%Tk=^AH}uh>1e>DEm>x{Ce1zaFMo?&UMp&G=bU5LPyF9gBkR6qlJZT;8;jI z=U?7)Wp6)i%HFI$6pM1MvBC2TK5LixCmm2Zv;xUzvg;2MNj zr#bkoh%$N=1~ZG>a1Q32ftRAnLWEa-dBIfalrJX?aPYH8Wu;~)H1_?p2k41ZG)TCLYG?UbPL-OUT8!_ zVU-LqH|W49WVFc3Kd-|qBHT4Ok!PuA1yGB0r&ok%VbY;cslLP!Pge^mqDY7}@( zV*_Y`uvpx4eqRE>ksBk-hMs9V+k;oSp+sA6E#^>sq^ueag?H})X+VkNG{xF?;&u*n zcAikwjk3emz3M3hcujw1Mt;;RHcp8-hGG%YMKIGVb1)U)W|9nAs$_m63y4A@TAnGD z_-4#cqRY%Aq?w$egzbbd`%Zoel`{RNlmBGy(>&zCk~i84C%?#rE}{GT*?}4v*)phE z^##~Xe_9!uM*};^%p#ANHFm27qgzfQEp5JsB2rR@oS^JZXaH+ zqfCjoT1Ah|bP)&3h*6TsFoR&ruyVU$TMpq8MmXtZvSEo?-zNbcx1*Vg6hECXm921Z zZdvv)Fbzxr${GS&WcH;8)Xq+e*i!C_YkeIzG4mM=I0`p#&W_eaeBgKm?N_D{$+tbk z52L-%{aO6y5VV!-j#B%~W1!9`=^1A~osgJUIY_fv5~CYn;wv(l&_mcYwae_RHxU1I z5tmsw+zFbRiDWnlqlL%Olrt?F;!0GW+u5C_)C_6eUTc|ag?VmfH=txe$aTWKRm4ku zMhGz!zac|FY_UT)w$(3Bg!(ct@+X;22O%o!$yjDN-axOMQ!^ex70yksq{7RS^b8>@ zHFG9oTGGsfqfMNw;NB~n8TFhH_cP?!%_4QPbXN%LDj>}YAPI0gTO}|r6v^zs(u`h3 z3C<1faOG;n0Tkj~i#2p3o@@^C$gDEP7a5U5;|?Mzf0ySaT{mXW9bYkrf`vj!R)M{9 zryUrRl0FR9y-Q%*C{>&`5F@Qg3-6L)4`gBBDp_5z(&(`1#+VGmE7H8ktAveN=10k(M>eaj_}x6x2M(sR z8KM14Er73gztW1!Ml&%B#}15vs8m8`CG^gAWZ{nWLBx~t{SK@KEJ@#Yz{ysoZ04YOl9jW39&3Z$SYbsFx%R9X9h6<3EOq2zXhX)n zNM^~;XA;kI>`Elwfr;zQ)a;UUy6;xe6w$6Xe6qWQWCrpUrIqxy=k8=^$jky@`?T;R zNU-JHE-fN%UEE@(%_s{lB!n}~esVYY$v1=|DMT3bkV!%>mu{J6D1?0#6hAjX_KC+? zSwTU>k{)zFVO?CJ?hL@F7KHUi3V5PMQZetSm3L+lTLP?;&>>1lmi_E&cMxQZ7Nlq> z@=%GzSmFMRK_pc-2_dSN3P4!~dm+~@_nGJo_q5T1K`=!u+RVCe$qZM}XUu33-e!wE zqexV%NE_-)#vC&Z(MA$OhOv=*W=qv7!ggjxKp9FCCCk(T+F2Z01-VIsxwVdJ1~UB+ z2}XqotwYOZbp$jyR*VQjU_MipvBWwlyi9rP-<$Bj|>B;A||kwY;rZG|YqJ2~mg zoVzg+&rTA{hOLS!sFd)Ob=ue5k_n|*<|x+Cv6;`^p}kguIuXuQF1EOs)5o7n!Egw2gI&|)yQoai(|k$~1VYH42fD(xc)>@tL#v)@@dU0Dw2 zmILd_W6O!fT*OHzb$VrzotLBvFocQ}5U$T~;3_vOp>Q4(W>7iWvUti_BvT}~8%r*T zIi!ypp|O4_DMq$1g#(x8+O6x7R5720sc{O)CvC|ySlNZe;oudTZuuZKrJd(gt8ar*Q*qgSt1I&H3>r1#&KvCO;?OzuKd7q zWy7pe;~L7=lgvXX``CBXsd6J2Lvy^}%2z+j?*XVlg&?-pt#pr>6avz?t0E>`Ou}v&o zXkw0>Ae*($izc>O#auN7XXsf<=EQRjIo=h5;MJn8oUC=QYRZPXHGIsqDAaCLUO33O zM&QX@$vMZSlo%z$LD?2udaw*FDQ}1>X+q*qDX-)672i|3O&SS0S7;7;~B;pBZZfup3dTVdc_VBupXZShJq4LOB;@xC+^dpw8(KY=>I2 zWXLwUL*QVLm3TQP?9meq5!r04s+UCiy)rL0Qpy5%piqh(pIoD5rR~psFc!ujBU3nJ z&6<*quU8h-Idw-&s}39i71wxkCRQ-OWJxu63XfrT7^c*u)ly z2<%ISh$A&h1}-rzI&GGkQABkAPEvm%&Fnhyr6S~+qJ0z<+e`VBMVLYn_ste4SZaEa zH^qMb;(J*YCzzioEIC@U_@PChe+eW#=(R>Cp~GrVz5+>)SW+%!Bi5!I3GL8MjTefg zWvt^uVk?q1Pa$=17CJAT79vr(6rt8Djcg%NL1-@oTJ(N#U5T(+GrZXp6m%%_VcEVu z9qWFQA&gq4k83f;aWjO~Hs+TbllHHz$Ws)&N~;M__eCK$P?ZV}(eq^^rGVIeKAeNc zM2iAVB8k1uY7b1bt=%+h%~Nsk?%Fz780Vf*-GtvKeq3_S&5i_kccf^N77&N{(&o(IxXOgdX1Md=t(IoR#HPhk)?vRxY| zPpXNYt*Q|&awlQpk_lKkO804z?e>%XoDblLOcq5+Q&9?jWszOP*h0?iMYy1dpe}Bh zGl_c8Y9jZE6abAta=-B#1^w3aY?k*hxEYXe+QXs5q@L5wg3W4Tp@=J@x~^a|qatwQ zB(!7XUF+K$NwJH_ykU__%3yl3KJ08C){yuhUAPkKRN2bDPdp-n!~2q)BOs#?kX5Co znONt;yhh|f$#UP^Y;0u!oufZ0p=#L&gKHrlR8h)S$^8piCJoYq$VYK3rIwl;>&W_9 zcpgR86`5*^)XLUv&s-wzg1XfpiGzq(;26+DDN?;|BQXm%gc*ZMe-~QD_%cj$9Mrm6 z_PnVcs=zurKkR^`vJ6)@Kp5uq22U3X;wwXdfc4L;kO@C-v zMVKYLL(wtU;WaZuL=Pd+TT#%MGbh-Rsn)!A1}4Z?(B4V4n?bD@nAf$R<~jtzFhu6V zVI9Y@3nIpog@+sRaOX!6Jh4yB(B(;s)>*6xad_VN!iBQl&EQC%RV^Sc%51| zr$p$olr+1dhj6xH34B-;Se&aNF6}wJkGnW9%E=PqySeoirBaPIvY@hEgV?&t$lNRK zVH|d%BeItIa?vo?RWan%*nYs(NQ4nVI^39NpPuP~PKEVUwgGZ;i?tJDu0|vvg(XoG z6Xq~bc9iXUG3c1JXtE*F+KYDP_N%N~5>;jDlo6Lxc;31|;k?}(OkJX1s+zC{IhCa( z#U9U#h|n`pMCTS3VYs5`Zd)50>>@E<6p#{qLRXW_Q*@v+%erlfGccz{gl;3}a8a=Y zQF?=n_F2cJ?3@4XK%yOY^@>F+8mm`r9OsOOVyEeWVZQ zwW0bgSAVGiu2z|ObCDaK%LE$h-Z*?5XBzt=hu!poyRc$e;8X2~fKinM4d=sB5fj$! z6}HX{2hLJEV}^0gP!MTO8+L;ka2V3XtlgmJqOtA@Rpz;{iKwYJFUXLK(V4Nrg}L`haP>Ox4Ux_vrO5#Y?lwmHFK_dK1AbKdHhbQSe{ zrOwV63bJOjsJSahFqfv^HNKdExSEWiT}R}s8<5Ua^B#C6g7_yf)J)98ZA5&|0mJpQ z5wn5rT##UW7&91$bw>vo2_sbdlI5{`8aBi@OA-?#BTV|ieywf`C%le5JAT=?UkrO| z|G?~8Ar0%&XmS?1%C^BXVyq*HCvJ9|FN|@&PqwE$L83C@7GcT!ez9Oos&EB3i6EE2N|VR@cQx$a7RE;@<^lBH#)DJCb} zZj^`_`hK3cD1tNU>iyW@C{{(_N0GJ)eykcSE#wQrQc=`)N(M9BLvVi)5RY}xo7Hg& z(c6biG7|eJs^c)V;eg#UDsQA^2rtu`=&ehi%$9-DblPtewQ^GfX+IK;(-cc%6~d4y z`u`Pw#y)rl4_+p?vgqYeO2F=KBq-WQ*nmyeuJ$p6tf78jqQ^X>)POw0PP=Ctm{RtS(;=Qz z8tOTGii1+lNH`iBQR|?1c_aHu(GbAbRa>s*{49C`Eh+7--C}FPH%E4oE<}iKO#!?G zvIDf7==3hgZ<*o@vZE-W8`fvxcG8j;d}P2BXNt7!3u{9R3vskTSTm-A~h zt3OWkInYi-88oMQT2wdE&TS&QtJ{ckm|~k=)NRC~YL*raq1vlmI8poV7mdG)i{zwS9m6kpjypm0s61)23+h#dN1Gt@g61)yJ)sp#rxey$Co#+y4SaN zkKMmGbETgk68JA)T=h>JetCBF?CbB+AL)1g@iF55dbkl>_xV+M0}p<9yubVVaeJs8 zkh_Txkk7BCU2Tq3tCymTkwpRC&#(IIuC05e>!Z!aooThUdbN?NAw)H;_SDGLYR7%X z(7alM{vfFJ(tNgZqiw4lFEli-)*>(2BA&SYY*E(9!pV)*DiS*@&z5cl^%z^v7Rj6z z;q@25EpN2(Z0S}|=A?DCsJLhW^|V^oaJF)zjjJW_)212AY(!=^m|`F4o0|yKon|yJP;2|n?;;yEy>hiWCMxfx(!nTbzsQ{e8O#NY%)wG<273V`3l_^I&algOH#l|##mp>F zXRl#3AB#DDFO4+0A7C}%L*aKv9FY1e)Du1kL%k#Dv$?^2Eiv&xPcyN4eG1|?s0k{% zqB#^@s6LHl8#JLOzN_2Cp#dSYaj+MVFtOgrzFfK7NPU1+-ws7XmJ(>B&%I)5Q4|jL zUa1lObUj%>Z#fgaZKr;YItIdCm*m^Nfg@4pdRQ?=;#Yks9=K_u>o2%ZvCl^Ghq5mQ zi9Nv3Ch|x19&o8?WX$QrwScRro~yp#R)SMFBM_8CRaCt=gfP*GAOWksPPlQvOX}R^1!Vpz>z8q2gg`(CN z^-KVrR}^Df3%RJ*9y9#;9Xh{WuJ%~2zd-hrJDuXmDsNO#d+dBht_1*%Cgi3YMKozO zKcjAV2FH|y>X>tDYb7{pmo!SpI(q|ag#|}UlmwKnK_rSH_o@f*g$8?qL&P2RWX=HZ zPSJ!7%+`44B!)H7A+cPFK&U<+-y5P}eq3&-W@d(j<4D>SxaZ*%HCc~@cx!^6p!OuZ zuR%y5V<8eCz(o_P-|5kr+90F19m&MKOz{YnhpSPKJ{mvKgnA@X$mt5MEVmjI^nhf) zP*n7j(((Fmsm?$oyGbI`6x?6SSdyY`f+?bcsUM13`38-h({er44y~oP6t`(JAB?$_ zNG%~kDMb`_N)#-Ixz$o?AdA09#1%(0hJDr&YC}zlv;9N0C=g`hrk02={BO81se@E zoI|w@Ni0D3&A^cMOer(9j0xGn-iB$X_4W)(*)*Ol`qiXf13?pE$z-=>r`ffb&1q;l zRJ~Y(_ID3Ka8DaNCOoY-%*xJtD^sLj=QpY=>% zJ5z>|)v(%{rakFOWbX+rHcpS?zUgFD!LtVG2Icwkg`$w!p#jkpHSrovl}$30x0V`2 z>-Gi9y;9r2dKL@`Fl04f?U^Mu3>s+f9kU3CLvr<8f=pXZ_&%z25P3+A`mZAayH}HF zUJXfx_+dJ#X}Kp^=`PBUv{4WDk$Q$|jMRI8za{L#Jw#y{Xk%Y5;W&7ih4Tw)PsYhpjhuogA*vm4F-gLwGG?_}3`)y|NEFEqO@M?LYvVM>P}LKBGVP)% zach{YMkK)~@;3RbspK^aI+iL5wqp$GT-8iQ52!vK$R+sh&5v-mnwc>`9Oteo8X`5Y@F*-LF=t zLT_S0iClxJ)T3TmiN|a)GZ+I(pM9gc$^PT12deA+1)NFjl{iy9=>)w^iuqv*ulQFu%jlwWk z>I2kjdI&KJdQ!isBucHOr^rb_;NbQw4I2_KToX2OOjP|)a!uHw#2HnuSCbKP)SQ~2 z0RbY$1{Uq>ts7#at)hJo6){KmwuQ5U0S|$dHC??^>nVo5pJJO1s$OoT`f*md97eBl zg~Cc12l^r9P>!z0YLes-7&ZCw94h+MYh8$=Nmo-y=t)Us7a*qe{#s!fU4dPWhqo;_ zZVUxM=mLb)g{ECVB9dPpNl0y;OeF0ot@`w(u89)$rnPM2XyB=6?rmH#ejcio5pRj5 zW|FU)!Zr+oN~ajR(2@pX^gxkvVLYRH!>L8skBQ6{V?C+{iVY2BMAhmevgrIbMS&%l zYPnKs!D>B6nOp=7jh1`wphaZr8`~5%m?FI^=J$rET`2)zy+b`TP_OJjY$l<13q>MF zqIDOf`zi9ZqQzx1S0sMwe0#bdT9hULEC~RIlcDjua8E)~y~C=f6dj$Tm2z{$cA|2a zs!rBgpNOgyU^uP#Z&;r+Sx4+>i)@kVsMWBw9QIZ(GYdo|Z$mu+#idYxpD`M-UeqBE zy0vW6Zm=0J;5S0Affnuv#hYSbo$o0i0&t}LX=1-7Dt#pN$xgS@;(2F@gNzOJrV)fq zQmyf%*SZ!XkVCBy3s2eSSFS-zq>72g8qQ0r*MI~dOyweKO$O8smf*m*B_rXLF%((u zWKPkBxD43ictTYl(VAP)4CHCmI`^8bHqB8a1+6zRv<6vDQK_ItLc4aP)nS|O0t%W_g6Lo*`uu&UO( z1`(5kqD~D?dvw{2Y6|KP_yYP_t zcfENp8>0P0kq-3{ygn&FxoIA3NVaLg)I!-R4k@c&us|DSY)Q=S8|Vt$8$Q#}P@l|a9r^UKyNYZF)%O|Tm>UVGMW|`@eFo~XZTm}X z!~)gY5<-)Z4SJ+X@?pKb%cX;{hOGAqn(Bi;B%);rvOc2B8bmI!-!u1mx`4NNpX>z#O6`J?sB*J8>v$3ZW>iF_wgk)8YH;*Cvh(iI(iBC*_CjQUqq8T1TOYk9$O} z8snKOHn^`C?%QfEcvK}fsHOdRE-6sYp+G&8X2MF%Mf{(fB=xZal$h-(0GiT{>lHsK zIur0VI5Q>Sw^>=To;t*wof8@oYc++#8()lA4MqS#R;CKLwO$9(X~H?$ux6;1YIpQw zOnbez*Ey%ByvD3E)~8_#*@p{M>rl@U@r?2P6!>zwWX*=l490P<$r0~eZbW>6 zkUvmw-g@%`z1Fx3%t?|awQ-rz<`J3=>p5gbWl^VyJ=>zr#^59;TTQ9f=LTXZ%A~Yv=`$p3HuUw-Wo^+zpo{Ma?gId-e@$iLFKwsx;`CU>hiS9q23HYu?|D2 zF?={_LD-0d3JBE6$rVxU1oExVmXa%sIiHZZ;TR&uNH^L9ztq$%fdcczdSjG;qQ>Z} zNUdEd!4Y}o4I;Bc)_~#4KrLA>@DiF>MCN)CpF#lb=+zur*6S3RVNJobhDusO8f1D} zYwe(7MxHcW@bUWB8V#(mykg&wT){FH#p={kQDFdMTSC1p3IoW3;QA&RHX`od7&evE zM{f&2Y%52Zq+eg$eNA~fhJxxGN9)!bE~GZkhh49c_ftZAqQZxIf0V?z#<;p{PPL_u z;i2ADsN*m>$;tImFSlsQ7Bl*SQZ15rw?=*;?a*drv&l&=v{V>jRYM+Bpk{{TZeb~; z79JdGy_=kB0s7rgHQQilPsyaCQeLkU(Y^Z7o#48YL4@lC2L#`YAyHvyC`@Br&!LO4 zZ_(xhLRgIvwcQ%rXiS&dV9BHBcL^72A}(kcKrNLg;!+R#LWZDts)iU%m~buG`VfWC zkS}4;xg(OOk9czx>y5Z*fThD|#I-v)tm}&r+SC}+-%zj*2OLVV+|$;8jewt5Va#A?k%(W(`bV35;n)CCqsiEeGH%?hX0&Gq=rfCe-J z`x#XOLk=Op=ur$jx}nTR09R!LkE)N=paR`ANsK3_F{C&GS%#aUNsvL_CEGRb2Dn9#Q<4wuNIk=k&N$&a9;^X?SYJE7bA>(znJE96w zy-mR+-kJ*#x9bd2DWl++dbS~KMQqZmHu%tPiRU1Bv%XA)_t4SxP}Ggf?zK&T_l^>@ z)RdXnV4g)|QqwDTv-b6}UhLH*{WHa=JYfgW*STs*td9q#auK6(HgmdqQQA0Qx+*mr z8%UGTRalg%g(dU~H9A}4biYIW*P;ZKQ_!OSPQ3<7);L?b;WT7Zl1xkfEo6A9dW$8A zT4}k3Fx4mYN_nf%l`^OT`yfm81VVt)n5tDD-z9h}6PkLzC3GaJBLeGey$CKP|GeY| zoq2#x=Z07?r$N3%F@-UVgB9pnPYk7)jaHPM6#DgBHDVNei5=bXp|4+x5E<*IKsePB z_~&ARK5ZzU*rD{e2J%+wunuKC5|^Dgtg4UNrqX4`XO)m{s6Lcm-Y!$CT7Vn}WZ!8+ z-z>;_nnW1hcI`RA`Kc8ZzjC zk=U|Q%VB%)9Z#v(iH0}iGf9Cho7WnmK^TUaz}CA};*@6|oA@MElG5=!pWJ1!tySV+ z9mY|$cG@%~t#O6-mb4oM-Z6}^!PF?bJ_k!s@f?3$pNwM2{hqxlD6(CDH&W%uyRFA` zH+Tx_C@XGhu|nB#xwxWl@rhdv-;?49i+by)1u;zQovOYSUR}*6F?cMhM-H9(hy|#j zn)7FehVuO^vQcPfL)mr8bfYk8(^89Eis4z|u6MM_or1GAINB^a=fE33`n>AXUxGpf zbREJ4{6?^pVJqAZTFR8bd}@OrW&0G|S1>ix@5 zQ4*)f7P-(;yTF1Y+T7N|H01M3gL0-w4MsHsilmBTy1@mHY7$1}rcc&46{!)YJ664} zkATp3-ammUX`LRR2Lz4>~w?(iH@T6xec5Lz{ z5*Igp&-wiI^~_L;$Bdl}5nNnvV@k>{;^=gt_owZSyWEW_MT;t@bFxH?Eg&p?|IKj& zj{1KV$M(shx@!>_v9C#5$~pb2#b_CbE@_e7QSXQs{G!njpS}OFy<@k~rgE5By%i6> zqJ(u^(7bOjgQQLB+;45ylChz3Mz}w7H7dK;Rc_5w5$I?%3zRJpu&@9IfNp+3Y|oKg-OufLlf^iU6_uv9$}j#LJV zz>tru+QjNqN%B-D1LQXXB}qdai!_FohJl*u2umnzNIqch*ytce>u+On1&)@KXnDG$ znZF@oh9w9#GgXHhAO^(6yyAMP#ZVp#8#?P{7HSHS3vfVDt*0vz*>VbZL$7kOiE@py zdXkioR81s5?YW^VwlFJkyiRT2%`E!0AN{VicWP1jP-QAgPXC6YiByF+OCL#YsjtLp zwL-JXTvw7}gX*(=W=0b@7aHsy0~(0u;K6j%Z7ts>KX@+A*AQudR4lE_R`p4pXyd&| zzE#;`Sp0Lf7DHmn16d4{$W^~tlT96-sZ0HWg}aIF<`T~($HLa`)Fw`@$7bLt`A~np ziT3G`F@4Z2m9%>J4Re4RLr3j;W72JOAf3L6mrL0>#|qR3fe7PswgT4|!_H`vDMXV~ z&IeRM(vIU_8w&ffT-a7>#QUMon*C^NX(;=FD%zSgu?DSESQ18!sGgmR*Y0*A*cDsa zWDkQv&1un7dB6Iap-CPDcj|4sl;y}(8o2UILtWKe6*yNvHcfR(vaH`T{cT8(7POlw zR4tY}idP(izioX~gp5NPO{(=VOrF~0m8`(}nEXgxSaP$Quvd$C4TTh5qiqrI8sZwr zUt@f8o@eL{D2u(MudX0UZ7IJVL5frWrZEq|8LFEc3mqI9O7t+!u#i{_g4Fvux28am zsQPMJ(pNL;x%Ir9nh|hszWSLXmFYR-nHYIg($eUBxLhOWMzj5Xw!<;th0-Hsb$ z**3-Al-eaL8Ze#}Qc~*qdJgjCW7Z9UM1o4Nh+1tHKmec4Mi5)CD{Jcgpmm9?uUD2O zt82_9_Y_2JFY=osshi6i+moTt8&*f~jbXGWn6BRAE@K>9qcWvQjF7#->y8##Hj5HN zY%0a1Eb<08*rcWUIWrCBd9_eDK#R;J718Fho~Z|i&<}k{9=hZljpU#FhuI|DCO1i0 zn9#hwPK%39PcCq((^6lx&-IY=#+E;}CC%S^Lqf={c!eR_ zve$-WeY`^59l2}0MNDW``)S7;s=cAw=_T>3J|0a|_Z=an)kg(O3QXZg^-X0F6);J& zp(Uea7M!3dLh%w0Oa}dv-6uBghHcQz+8k<#iBdKV(T!41XD?8#7e)w9?4hd;+KwgT zEp5HtHcKMQSRFaSk5Y}T8nyw|7oSFb1v9T4i4f$VZPLRIGvR7UO`+vAc?wW1t0B@$p{AG?;dBj046RvZ(Fcjr4RuN7 zTXRYCh8lIalU@l!RlQ7LA_^+xXxm{pUEphtJJCXX?@IZyKB`;-CVBUpLegNf4w1r6(cEEH-SG&xwVL>dnH5sK^`RW5ezEIFM9(LFk~A zrQ6aVeHbXqZtBup&vK;yhe~cY6q1rAiQVQK8%71{ft`&Cs2X3N?jUJmZj@I~B|PYV z%!$%Q?PLLL#l8kao5#^WR_{pH)Gti;r4U1XKZ4;bjs4o7)Cb@HiH!de)K<>UtgsFbf7QR!<={_x;mo#j=xsM?ljn~^u zgF+uoHC*7!k>sV#8yTqB+*n|ssYfX_()5`|gqH5b#tjIx84Gutu3ob;mI@V>wkQqD zHK3w;$ewAcKwNJa2E9+ha8b4o4H2x&S@+wU?7o%ih}0`8)}&``$ab5-Hq{Y9^Ei@- z+hI_sf|T!5U!M_Cibj*s60J%bno?6MLN#0v8YC%jqd6H}zl<4;TTSr>@DLakFTij~ z99k>+1uCP^?5&lma%;>tisR~mgE=mOBGx!+jVDyFKG)(SbgQNgnyUWg7IM4QaW{Ot zKA?CS39&;aDg2(+Ffgiq3yt?c|H#QGdUO_dB98h21iY2bn!^;SoLZEYbLni_wO zaTQHv%-moDs^pWhTZ%B$h75>m1X&hsXy_UdL&ph$4P6_l3#TGG5yH(I3J?qU&9wvT z1xj(PWdEoS#iNppdW>{zsuUC;tIOIW4Ni1H3LCvB*>y8CCq#KtFO=uiUc?qDNvOU? zL{97|p$+x<84gZtokea2STKT2CH!>kLag>io?m8jB6Z6z=~1+f*2c#t3)2^gXzdir85vVHT|IOamp2T+z@~Y zo|N9{n;%@Y>7hq|6vg474UM0LB-_U1yd_dfmPRV?*-*NVe3q8Y2=$IUL53TZ43B2; z+Lu0v4c*eglwGdoGBmU!3Kq$?%9^u0V;55!1z-}LwQoi@O`YHr2R+pXP|FM5%`V!A z8bLs&wxdtCDU(WYn#Qh6a;v%IUcEb*@~CoAH+V?vC3cT^NF6gY3{4dQq`|~1a<0~k z&K??^jw(#nfO^Hop%j}owiwV34H+6_k+-E|X;a-*NkrTFK3f!-vSZ&5Bn&sOIDxKh zO*ONot6h8PRG$O@Z7I2qm9pxBh50?y2(96|tM&1M0&^Mz@Vp^I4b_=)ZSmg1t3@eB@F7<_4ZWJ&ALxHuAC%yYgGb93 z;jW>fg;z+o$@S(TQ#OS1J44Y{Q{#_@eil@^1`kdyjQY${va$EsDI0W4Um!DBkQQQ( z)Zn4M(GD~dqZBuIxCq_aa%cmdNjO7lLX+_9;AnKYD07j8Yvo^q^*YLDr7)9vmkY^C ziYvFDbh&KgjYW#!SHDe7&gmreL2y)@SQn?jL7$9y+EB5Pz}Qa-T)rX8KA=FoQT=&y z!Y&-P`g$N#Y68PH(U6*}^}_euke9&#(bl*;36;<uzY zTIUoBYwKV`&A8ZbQeUSM(sSZdVUl?2gKRAVO_TCR5(M1z^+6CGRTNFnjWruoPQlJ8 zf4sq5ju+*SJ>4XH%hPRaZ6bl6d?)p;;DNjtV@1x;<_l)}(3(a9DORg<4&99yh=ini z$Z-KEC)q4K^gcMzFNrmQ=d>j1wt4Pv>%0Apz&mP4vI5M}yE)AueXh4br5z**4>l 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

gS)MF#~7*Z>B71vC`HHuIcEZbm`N;| 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 z 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

kc7}El(}dm9YG^&~gdu!1jJmnHgi7zJ4U7*diI_ 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%0D`MkB(4kL))-c{>|TC$_7oy>pQ+* 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 literal 0 HcmV?d00001 diff --git a/icons/128-apps-cantor.png b/icons/128-apps-cantor.png new file mode 100644 index 0000000000000000000000000000000000000000..520ee9c80d8634ba444aa9845e1d5a90e0dec190 GIT binary patch literal 4264 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 literal 0 HcmV?d00001 diff --git a/icons/22-apps-cantor.png b/icons/22-apps-cantor.png new file mode 100644 index 0000000000000000000000000000000000000000..e52725c9fedc6fa1e7b15293112c3c882eba3cfe GIT binary patch literal 469 zcmV;`0V@89P) zD;tsgf|LO(D}_|IYnuEAL5o;fh!!br)9j8-E+m>W7ZgFrSI)k9`*;kn;NL=7g(9-6 zs@?B2*4mL@E{kcYRLZGplZa}@7&A@7%$hai2oX7B=DT@zW>&$>%K&;o5R~)z{PSQi zXaG0_psIR9MCaobBm@~gZveQBMjRquT(voQcT=S~6asOm|(-FC^mP$*mg=&9-h z5#6imW14X)BC$!>L@100000 LNkvXXu0mjf*P6lC literal 0 HcmV?d00001 diff --git a/icons/32-apps-cantor.png b/icons/32-apps-cantor.png new file mode 100644 index 0000000000000000000000000000000000000000..13a3eee78d910ef7a18fd9bdb6e9680de3b315ae GIT binary patch literal 977 zcmV;?11|iDP)uee`mCkPN_;%f(5DCND&*4ibq@O(WDY< zB+@2W)SE79$)ZKWh9*iZ#imh@h+w8PgoM&s2@)aNO3g?l;xThRi@EnY=gyrO743$T z+~nlkd%yqx{LXj2b1(esO}U+c8+&9dg{Q4MsQ~ia0j>2|>U+&IAd&)b|IzbN6|7iP z9&ErQaPj3#5J4Pc?uF5J?^$E+bH4Z7=XNamoJQI(V5fj7jvLgtFvZ<5_g$Yb#(lqz zu>{%*fM3`gGlcP*kt`GO>EtHh6Hc3L0QyV>GU;R_@Hf$qoWO6O4~0VP-`z-YQIWyS z?uEl)cJA71QOH8T4v-7|vWg`P4Gqz9ybVDGWWDCpiB>zFPsc~VK$8P~K{(9vilwx7 zTp%p4s&g0%bhKGl#sjgy5 z$rRc<&LaXFYd4TcBtZlvzDf9W074!C(P%e84AJI82RPhxklC|lfe2GeN|-aJj60Di zh+qyHn%1TSAu3W|IH*Z*7RY@e; z&DU?=0U?>xXsuBqXeA`IkVqsDbV^j)^hQL$rSRg_D`N3Do9gNqpP$c@XZ#<2Ya-)qT(kbC_=00000NkvXXu0mjfL+rdy literal 0 HcmV?d00001 diff --git a/icons/48-apps-cantor.png b/icons/48-apps-cantor.png new file mode 100644 index 0000000000000000000000000000000000000000..be3fc6edbd8c1e092e1ac31715a9955adf719421 GIT binary patch literal 1356 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 IM6N<$g6TfH{{R30 literal 0 HcmV?d00001 diff --git a/icons/48-apps-kalgebrabackend.png b/icons/48-apps-kalgebrabackend.png new file mode 100644 index 0000000000000000000000000000000000000000..4c76e18f7a1bb9348c132ea0b0a2190b7ac47348 GIT binary patch literal 2645 zcmV-b3aa&qP)Px#32;bRa{vGh*8l(w*8xH(n|J^K00(qQO+^RS3kMZ53sAgLyZ`_I24YJ`L;(K) z{{a7>y{D4^014GeL_t(|+U;0-a8%V9Pr}o-+Cj8f6h#UZ6)Am8XPnwvrj-KOz0ZB! z-Mx=}XE$#G3E`0kL;@Hh5JDjklYkH~fThq1B?y5EsgznRg%)I>Qna)d!pnh#?CI|; zo82f`aJu^k%;e1cX7Ap6&biS>t+(~I-gfslZSv$KjpO>MEIU}`xbNe4 zl)^B5?i~j>Zk)<;+4xxPYTO<99(_k#{T5QdTbR+&h0)uCk6qb|fswU!>9e;=M-|T6ulNUw>MB}n4 zMsszZ(Y!3t$TFBJoPzNDog666^=5Wd%wI)ZM$=K1W8G<1_^MMBb7GCn zHkwnbWcQ~{uB>2_^Zx|K#u~p$^T{69U{qMR!0f~1_9X|^5n2%>za6?iUF^L|iYzl)R=Rgye^E?Hgs7Rk`O=irRh z&htGgkA=|>ESJ=S4VwR2zDaVU@7KE^Gt3}3{!ka}3=;(#y_Q+_VdUF4fFTs}7l3;Y zE4(o9whpN1=rKu6G~z2)Y$ZzrddToALb!UCUZql%34=Ku@+Zj-tXEi~rK>ufL4D%pVqVCu3 zoU7AJQoh9V{cL)D9~h>>z)x2wUh*q<_AOXwa}WgL9|*`#5-O#5@n|T};We-CCG*Rc z6Ugczr)X%%^<+o7FaMmvxQp155gl8)=4W^F0 zzG>uOV0s9xK-cvaS2jr(jW;yNbV40KqCG(OfTgdlBg?BdlQf(99_~E?gHl}v({G-L<{ZnbGbLc!}O~aNGczyx13lyS#Z32i|aI66~gAi#t1V zZ<{-Zm@haJKQQ^7A!qI=qEeMyE$!_xd zv;t~q=y#FbNnCTs6XUhx}GZYSMIQDN5Da3+q>ht&^;dh7(n+VTt*uZ`ts^4h8TU{j0I zBTz_6kq?Oa0X!cGqvifyqjm z!)nwDV5O1FW&%gc9ikY&8U+Ny=;gBKPy3OCi0VI~B6?kFYLbMn5ujNB^tpsp+G0g9 zr=mKA#$QC@6ZDTbP^bC{RyKLY2;24_a3FI6q%A6>2eaN_a!_W>O0 z=UcS~M3E-qm8mAFK;qc}IA#vQ32DU^S5^nqs#usjDFqQt$2HmL%#0XxAPxM71E`03 z!~$R=8~}~F$*rF{@G$}++Bq)1uO2p*={MDA$=vGBzDPHoMK} zLLOX2;&HRhwvyK!>A@0x78@V6PcoM9E>+1S{G33bf*EO z8!a8^xz_@W0KU}&Mgawo=eDNkxgqqPrLvn=u9v}pQE@u}<#`-NpL++B*Q);D1~`M# zc(YRwhal1F@{E=ss?DhS09_G;gTrFdbHW6Aa{Dg&d{Ak3(s7@wP*IZ5IdX-OBja;` zpENNAAF8(DBo(BSqel7+W%LY%Wrou-7|%lTiPKjIpjT)|#j_bOZs2WmOsDHdt5CXu zA+I8H&^(xOv;5u-Jf`C7cw7w;%}2r2PU(TqCudN+>0q3lI)J5a^NNND-1v|CNAdjU z+?RMUPJ06SW1QILi_9aoIrz{#$FRy1K&9lk9Kh$2pF%n>&=r7uz613cNo5Y;DAaBU z-}{-0j{{#y>7e%*$HtgP4+ln|Pjb9f>Jvz;X3BMx!oM^#3?{sXn#6Mt;9ygQWbSbD zydmjcYj%O}g9H5d4AHniX7ododRuSnZN06xh1>rCDF@^V==w(u00000NkvXXu0mjf DB2WpC literal 0 HcmV?d00001 diff --git a/icons/48-apps-luabackend.png b/icons/48-apps-luabackend.png new file mode 100644 index 0000000000000000000000000000000000000000..a41e6a93eb92a80fadfe085a96c81f6a80d8325e GIT binary patch literal 1546 zcmV+l2KD)gP)_1hr4dNbGrAv=iYPL`rt}#de6T5 z?7jZI*YK}Z_+MsMQbJrS6&MHdf#pCy@BxqmTmu{izD;aNDFbR$&rd-Pgbg4C$N*LV zeZa>)-Z=}n9QX|AbSPd7YzFE)KYRq-2GSE0K!u*_E5JYi@DsYuQDCnsp8@<0WIEpK z2PrhKJrOC;zkdK511OIwkDA$EYH9#YF_c#w%;??^pSle=$e_ zKzah3v;ZRsINt&w7Z?H#fc)ZfpAsK)vVl23f4UD_&jI$uR$f*DtAHh{xNQ!=L0~uV z4#?|{#Rh=FIC}j9jK*`~6yQo=r$eDEU?uRXMxtb74e%O>;Y+ep_l+g{fhv&kB%_d2 zYe*{z!Tx)I)gZf!wSS27&H|A3SWa9QL-|K^gOZRO_>_o$$+NotUQL82EOSo)*GH9i znb6h19($yb^+01lg-3xufnz`(aFP+8TR>`z{T>2t(ub`ePX)-tvH`e1pz?=-+DO=x zQC&A5sMn;3I(U7uT&TwGw6X?xA)xa6)V^H@v>b>gsHZ_5woE!zEo0P{$j;Ub>s`1U z*bsuP-yP?McL3Y;;X&QkD`UVSFN2KAZw~K&DL|Ms)|T&l%xf_8+HLv07wC2Y7_*#8 zjhaszDh%+*~Gr zOG5&12}rJwc@KD=mxAP3azR-XXcWLU`}CO**YJszdgV@jyJQfj9G(hD*Y;3gJ%W4VuJL9WsdQ!=9kP4|DibCPPwLw)9t zg>h=oM2Xt1z$VXlBe2$Z?o`HGq-InNycnZ)p0H4$)F^;F;ADp~$rS2eS=uFgfL7!A zLZAzH3up!wg52xabKF9$i=sNGDmk)o@2{uHB>I8#6le`_5%7lo)@A2EGGH;Qv8WFW z>BlQ?YmFPW6lgU!sL`w)*x_lln9^(+>-J{iS_g@nE@{-vyaIR}I3vc~=PhITUI5uf zRb+a4dw{N+DZd+I8zUd-)V$ITJQ1S{_n~F{W-owdZB>|wY#eykv2a!l<O6?0x0gwY+27KZHkOBM{fcqpPMoymbez{CvLp<+vNHwK}sA?dXx|KI&`dX<)m2u;K*0fWRr7%)l+jvvXvTh z9m;1ay=eEFF}+d`ycb(hS*xM4Isv8kM_P!i0~vPA$%~j2TOAxJhzVJNWC6D;m?fTu zz_7C0EkKinUAh1aYF;5IfD+&WgEjgAlrov!Wg>x-sMCZx6n2!Duhd{VWifE(OvLI2 zz2Yz=3%GGM3hfG`yqllk`^CCODsV0Vn#XBLzBj>SD}GE9T(NSLa^N&=K8@;lsYbF9 w;5wzmzp8^Ci|44b)dop14k;tth&L(!0#l7noT9P1zyJUM07*qoM6N<$f+L8z#{d8T literal 0 HcmV?d00001 diff --git a/icons/48-apps-maximabackend.png b/icons/48-apps-maximabackend.png new file mode 100644 index 0000000000000000000000000000000000000000..1438cdb635792253cc1cc416f6cab3e92a28d52b GIT binary patch literal 3516 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%0D*WP@&9DQ2f`fPO=qu8kWaeooGG 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%0D&Rx<>@whvc6T%NMC%GX!Q}}toq-5dyMrhB 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 Hu0mjf|3X(R literal 0 HcmV?d00001 diff --git a/icons/48-apps-rbackend.png b/icons/48-apps-rbackend.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd3601730f17289fcdb620cd7fd75d77840e80f GIT binary patch literal 4716 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 literal 0 HcmV?d00001 diff --git a/icons/48-apps-scilabbackend.png b/icons/48-apps-scilabbackend.png new file mode 100644 index 0000000000000000000000000000000000000000..638d6f7feae1cd347fbcf08871c688e889f4818b GIT binary patch literal 2620 zcmV-C3d8k@P){CdqXPR z#EC;fT}*5)HrN;&y!Lw6d*9iaIepm0?9~{Pl2pnkS@xXEcfQ}5?|kPwb1VSK|FPHs zdV9aXeSP~-RmZ0vM}R~Uo4>~EZ~VCguxr;|9)I#Dq=W%C(DBk?@PCKHS&3#5uBv4X*gnKb=Z)6D0MRqOp&)_?-o%Q0M+jThrw z-r%`&F{aWwU9B4FqQ$$>H19_oFpLM)vomdRjPD|e~e0$6Le^A*3J#{&VjXc`468OmmP zE*9g>WD>JMpNwIVDf@h9ILx7*9(Hfqgl4xhdhHs=M@Km`Gef~xnOm(Iz##;?+-|-f z3UR;3v$SDuayYOH!B95K>@r5QY8qd^=N^9e;DdCpTZc^uqNx;ZUN6s{IKhQzbVYWo zdJ(%7g>9NfkJDMT+iOCw+wEqvrY+mQJrLkvPY+wxu0>T86d`Ey`FNnao8I>J72C0D z06|6C+oZnocdd9d4UeWRE&l7`)-+mcCS^HUH9*F)7%LPwUno#4FIWj=q+~dsXA#)y z^U)g&($(6EM^&qgnoFgajKxS73QLoqnNhEl2Xoz)QFTEQ#VpkNVVliGm zeVYGFO|96D6#-m-O_FMtnKcZ4AB*u}Hp@<@lY*37Gz|82cJi~nKK$i%@Wr+^?q9c# zpTGY;FJHb)x>&@tEM7TthN*a*Jsll5Rh8lCX@;hzi05($A&^b>lobQm0WS~)Y``Lr z016c#Da+!$OosO|8Eit(8w~Q@?(UND6$W&Ay?nc?i@|7=bg`7U6%2z9CMWq|auP)d zT3jwdJ|E$5m}DlyLNZA~*I7=Q0@#4vz!Sg&fD(lj1BaDX2_@dR5U5dgY7J6RJ9l1!!e z*U(T?fQC`X20U7ZaMslA01g8k4f+)=i}7TVw`OMQ>U7iO^~;xu=5lorrY#hrZ^sVW z*Q^1{0?Wd#D0D_5?B2O^*^pZI1|-k|Yz913$8iB@KpU_QxX?i1d_K?9r%$5_!Qn^* zkE$}C&-47)7=IccC(+0qgh13B@CBu>8A{zj|0Vzc29Se>xs0T=h?||54JkPrkMq;P zL4JMqECGjunQWHvWRirg*ZDp`bYX$h7cTInJ$vZfu%V>KG?|>4;os-ZExRW)1jqq{ zzzV$uO5r zQ#4Jo`8>x?oWSXD@YQ|$2>E=BT)M>buf4{}k&$K0Zvb#TJ@^N(5qJ{VQf?RpUIvCW zjqmt;>}_eGMNyd0bzWawN?SQoY>+b zcDtRnwl?-3Iz%KAAsUTx^5jV-Cnr}9U;#5goRT{!fK5^OhR4GppN~xr$5IG$0{6Pz zJRS`4ZYINcp-`pEX}5E*r-zPE2$!ms238dAZf|FIM+YY-Cdif-wvEwe)lpls*>F1?s5aYDncwec|Ni|PIdX)}n>V8<3Z`k|^ZA&WnPL3tUs9RS+)_4b z69QETYz^u}xlU~m_6ml<(9{&!LIHWbUI=E>X~yT~Sj^>?+6Dpvwr}4~BobKyw%Kfi z!(saR`tW!>RU6?gWur;cWJ=drFiqCi%w|zaW{O2FH;D75l)N}J#HL`7hqi6Q?{*W* zWO!wGn71!nAep}rlr77`Y_MBPDKSkG%d)Ul#Kl_%7|3L}FO}jEpAT>O)fc5?Lf3gQ zk>FyD`&^fit5^BeTW>KiHb$_eh1pb!Qba4HIOhQWBD!2AlnB;<-ka>eG~L8X*jym*nLM~`yq)G5N@F!6Yt(a}++rlwHT zmfHgW$Vplped+;jCZ7R((()O=CoMO^ zXnAu}6bFjxDy5?h?u0)cS-nn0Z9%a+mY&N1rR#e#c3OhF5Sv|ChEWAjb$j0MV!QfM zx~f;*L{yj8-OMkwm(;>4HV5uCca{F-K$dUnlgR|vCML+8PtfZBJRaZYZuF=N!!=1( zT?5&y>2ifl>Kf~kQc_sFjI_)Wrnl9Pt0hRPU}09>*VZbiA3)xuzVYKSlh9C4b(xeB eX&IRL1pfs>d`)2nXTymA00002neJV)*=c) zN&F8?s40>7Xd;G)##f?7V+edO5-<|+6=Rf#6*W<@bXyS>!JxqpG)6_EX-EVy^4K|k zxHEHS=FWZ0?zW|L4=KById|s#&iv+g=HBfBHLF?8CbKcS;g64dX*>cME4yyxW&`sS z+kxn^#vd_90>&eZ@v}$*fXS7C)GaV{=-8MAGaA;hur0Cwve$q#Jef7%ofEC$U_@%8 zMB22zNLx&wK9240>NDE3fc3U}7oJJPBQ2@{F;}?2BP008xHdr9?C>|Dae#Kkmj#cs zC<9VNFappH((2Ru4S=q;DuA}V((w3cfNLTbGqk=4Gms2AmiktFk=}R7P~T2`wYI=$Q2(ygcc5$OlEeUYTi3fD zAa2HFjcG?;H4(IZDy4o?Qxg`I2Z%K30xn~n$O%yF?fX4MKD?a3{V#6 z$P5{&pKHDbvu9tA{rv;MV`&Zpe0U|3o!Ici(?JU{5EvL(vM#0Ikyc(A)PdOmV?gWv zU4;S$iU)D-+rwhd_Ja@jnVzc;H!fO9A}@gE)WgJO~`CR@{!_&{sH698_*!6pJ7NZd=|3 zNbn#99)bmo6F37HSjYpUV;y{1H!e` ziUqk!V-lXY1SDONnflRX_z_B_Cc`lQaMA$WCHr-5f2;6miI+k6vzI24G>W3hSum#@w( z>YacD=QQf8Hu1`V;Pw^4*7-vGN`_BwNmI% z76kuu zBK1tqRq71z)_iHyx8tv#2Ed(VUlyqAS$IoJF{MuW`%>Rrhl2I`NB22_{&$q4~~Z`&Wizx6GVI6A((9|Yj79ox~G zpAqR_Tv%S224pRRMq3qFppTidXo+TDo0fpcH%9um+-Y3#=c%(5gfsrua#e%zd*Q*p z$@Ptqinl=XwEF5sG{#mv4Y*9L_LUjCVUiJ`W;LtXB)9(o(#u-3)%haZ00000NkvXX Hu0mjfl;&!{ literal 0 HcmV?d00001 diff --git a/icons/CMakeLists.txt b/icons/CMakeLists.txt new file mode 100644 index 0000000..ae37629 --- /dev/null +++ b/icons/CMakeLists.txt @@ -0,0 +1,19 @@ +ecm_install_icons(ICONS + 16-apps-cantor.png + 22-apps-cantor.png + 32-apps-cantor.png + 48-apps-cantor.png + 64-apps-cantor.png + 128-apps-cantor.png + 48-apps-juliabackend.png + 48-apps-kalgebrabackend.png + 48-apps-luabackend.png + 48-apps-maximabackend.png + 48-apps-octavebackend.png + 48-apps-pythonbackend.png + 48-apps-qalculatebackend.png + 48-apps-rbackend.png + 48-apps-sagebackend.png + 48-apps-scilabbackend.png + DESTINATION ${KDE_INSTALL_ICONDIR} + THEME hicolor) diff --git a/icons/hisc-apps-cantor.svgz b/icons/hisc-apps-cantor.svgz new file mode 100644 index 0000000000000000000000000000000000000000..5b39b1036b05225b947553e2b5d13fe3931c3aac GIT binary patch literal 2130 zcmV-Y2(9-YiwFP!000000L2(<5*t`B`XzM`=olbe#xH7NN$z&`LU|D;e5W| z@7<&Ux_Pml-&&6IaC38CKCf>q%L2Yx8OG6K)-2fWiqsIs(Oji!qq3@;V;9e7J$clV zN1A)`tfG9g$+Oa|%*sy#;v!yk)LNQ7HAFZFf;l2{LL8uQ%41f^gEL+VGEOZe2%$OP zddlml!b1wGxG0Rl4!MK+xA5&2v;eovcSWRDuu{31s^(w6eeIAAa^or~;UnE3i@5J|k4 zfg+e7K~32E8LkN$u3?8kZh)-ye3*!pF>jXG@eqHHa70kGmTYkoa5&bjjF+syDZGtn`-pN|jys*a9i zG2@83BJjI?4*+8*aJj&YbhtJp*9731~ z8^H&=3?>NMj^|U?3fy!mNm&dYK@CA3fwC)vutT|urB+J;3ng2nL#GL6H=N&$& z{AD2U2YnKAZ@}(dUU{9xFZnL@+4a6lPiZHt#C`87KhoLdYHzq4Bao)eBm5>v^rdHl zg9^_`OKgV+FyzAXZr}3D*MgDp0RDnD7hxY3q#9B=ApunGWu!|`P>m#8Hi!@yM(#s`;KeJr;1+@b(2BPFnL#qdz?q! zYRn8>8{!PJj|KRfN_;iUsCZ4;p1@-tq9Z?JV`m&6x*&lKlj;SjJJTE-{<(lKZ)?=gg?9NOgr7>)N+3`j)cG zE?c=)h8;M^$~+BXnHRAtT9jv=5vq}>?#6D$w$QtFcr=YKA7z~H!B0++FL@4$mAL*X zB7)l8f#imuVD;!37FhY7PI97i+YSk3`A)ZL&aQUB?cr?st|&A?Dvt_IY<}8p%Ex@a zF0|&VV%KVJl~m3~7V9K)z(Bp{4B)9+Rg;LK?ocK$%e<=e@y}GYPcl%K)AT%;;4}3! z6m9z>#3hP@zQQlyK#9(!bsKp|Hpz>MwdXcY*wJYHwBB4Dbvt)BYS<{hXaEoV{$|QS z6G?U$#$654au65VE8h=%EQ0l)qh z&NASe7Y-!UXIbqEbzWW>$wV+zC_w*i`L+*V?pfSx-oAnTW^F8D6N@n$S;%J0a+)Fh zS}zw4_(@8!V)&zG;N--8JQss2^I*arxal+4gg3c96+T0!RbOo#fgE}+eslkuUIpD% z>QFf`+|q@tk~}k#p8_3i$QlzT!87|vLTLo*Ixd&o zUCeK$zdg%vy%E&20@31;5$bVWc!hX-XaRa_kT6{Cs%i-Pcb;S++~ulhp;Miw$#+zH zHs-#t2{iIVARbu6a|6ba5H_^@!efE&S%d?O_|&G{MVN8|WH2FCYB_LUTAuA$jt2t* zS&~>-)VYx$3(931zM~we4Xf?Kuwah&U(M-+_!DRJ0zo_v&ZsAxdmh93z{CqU#rkki z;xX#ml(`sF;scDj5Y_?mY*>K>^@*=xgd*kzwq8Wd8=3^n7_TQ-zf(9kwlHW;Zw`8Z zohU&tq^|EnLmOCsvnX*XB2X3DgjtNXZ>kYcS)+i}lSbrT{@*M(5R8N+EoL(dnUAA~ z{d7E|pnoW4^to!`+VkMrNFWv_++1Z~Ed%T5|1{jku+=xAKA?nssexlN>SxZ`)S)9{ zn7+U+4(4`X_9CQ~1c=R0V*|YaaI8b=(WRSqD%3#Lr-3$TUDtJK3P1O{lzzDR4>}p1 IoZ=e*0M-61-2eap literal 0 HcmV?d00001 diff --git a/org.kde.cantor.appdata.xml b/org.kde.cantor.appdata.xml new file mode 100644 index 0000000..ddac35e --- /dev/null +++ b/org.kde.cantor.appdata.xml @@ -0,0 +1,115 @@ + + + org.kde.cantor.desktop + CC0-1.0 + GPL-2.0+ + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + Cantor + xxCantorxx + Cantor + Cantor +

    KDE Frontend to Mathematical Software + Frontal del KDE per a programari matemàtic + Frontal del KDE per a programari matemàtic + Uživatelské rozhraní matematického softwaru pro KDE + Eine KDE-Oberfläche für mathematische Software + KDE Frontend to Mathematical Software + Interfaz de KDE para software matemático + KDE matemaatikatarkvara kasutajaliides + KDE:n käyttöliittymä matemaattisille ohjelmistoille + Interface KDE pour les logiciels de mathématiques + Interface de KDE de software matemático + Interfaccia KDE per software matematico + KDE-Böversiet för Rekenprogrammen + KDE-frontend tot wiskundige software + KDE-grensesnitt til matematikkprogram + Nakładka KDE dla oprogramowania matematycznego + Interface para KDE de Aplicações Matemáticas + Interface do KDE para software matemático + Оболочка к системам компьютерной алгебры для KDE + KDE Frontend pre matematický softvér + KDE-jevo začelje za matematično programsko opremo + KDE-gränssnitt till matematisk programvara + Matematiksel Yazılım için bir KDE Önyüzü. + Графічна оболонка KDE до математичного програмного забезпечення + xxKDE Frontend to Mathematical Softwarexx + 数学软件的 KDE 前端 + KDE 數學軟體的前端介面 + +

    Cantor is a front-end to powerful mathematics and statistics packages. Cantor integrates them into the KDE Platform and provides a nice, worksheet-based, graphical user interface. It supports environments for KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, and Qalculate!

    +

    El Cantor és un frontal a paquets matemàtics i estadístics potents. El Cantor els integra en la plataforma del KDE i proporciona una interfície gràfica d'usuari agradable i basada en fulls de càlcul. Admet entorns pel KAlgebra, el Lua, el Maxima, el R, el Sage, l'Octave, el Python, l'Scilab, i el Qalculate.

    +

    El Cantor és un frontal a paquets matemàtics i estadístics potents. El Cantor els integra en la plataforma del KDE i proporciona una interfície gràfica d'usuari agradable i basada en fulls de càlcul. Admet entorns pel KAlgebra, el Lua, el Maxima, el R, el Sage, l'Octave, el Python, l'Scilab, i el Qalculate.

    +

    Cantor ist ein Bedienoberfläche zu leistungsfähigen Mathematik- und Statistik-Paketen. Cantor integriert sie in die KDE-Plattform und bietet eine grafische Benutzeroberfläche auf der Grundlage von Arbeitsblättern. Es unterstützt Umgebungen für KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, und Qalculate!

    +

    Cantor is a front-end to powerful mathematics and statistics packages. Cantor integrates them into the KDE Platform and provides a nice, worksheet-based, graphical user interface. It supports environments for KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, and Qalculate!

    +

    Cantor es una interfaz para potentes paquetes matemáticos y estadísticos. Cantor los integra en la Plataforma de KDE y proporciona una elegante interfaz de usuario gráfica basada en hojas de trabajo. Permite usar entornos para KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab y Qalculate!

    +

    Cantor on võimsate matemaatika- ja statistikapakettide kasutajaliides. Cantor lõimib nad KDE platvormi ja pakub neile kena, töölehepõhise graafilise kasutajaliidese. Toetatud on KAlgebra, Lua, Maxima, R-i, Sage, Octave'i, Pythoni, Scilabi ja Qalculate! keskkonnad.

    +

    Cantor on käyttöliittymä tehokkaille matematiikka- ja tilastolaskentapaketeille. Cantor integroi ne KDE-ympäristöön ja tarjoaa mukavan työkirjapohjaisen graafisen käyttöliittymän. Cantor tukee seuraavia ympäristöjä: KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, ja Qalculate!

    +

    Cantor est une interface pour des outils mathématiques puissants. Il permet d'intégrer ces outils au sein de la plate-forme KDE et fournit une interface graphique agréable. Il prend en charge les environnements pour KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab and Qalculate !

    +

    Cantor é unha interface gráfica para potentes paquetes de matemática e estatística. Cantor intégraos na plataforma de KDE e fornece unha boa interface gráfica de usuario baseada en follas de cálculo. É compatíbel com ambientes para KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, e Qalculate!

    +

    Cantor è un'interfaccia a potenti pacchetti di matematica e statistica. Cantor li integra nella piattaforma di KDE e fornisce una gradevole interfaccia grafica basata su fogli di lavoro. Supporta KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab e Qalculate!

    +

    Cantor is en Böversiet för en Reeg deegt Mathematik- un Statistik-Paketen. Cantor integreert de na KDE un stellt en smuck graafsche Böversiet mit Arbeitblääd praat. Dat ünnerstütt Ümgeven för KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, un Qalculate!

    +

    Cantor is een zogenaamd frontend tussen de gebruiker en krachtige pakketten voor wiskunde en statistiek. Cantor integreert die in het KDE-platform en is hiervoor een geschikte grafische tussenlaag (interface) op basis van een rekenblad (spreadsheet). Ondersteund worden omgevingen voor KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, and Qalculate!

    +

    Cantor jest nakładką na zaawansowane pakiety matematyczne i statystyczne. Cantor integruje je z Platformą KDE i dostarcza przyjemnego, opartego na arkuszach roboczych, graficznego układu sterowania. Obsługuje środowiska takie jak: KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab oraz Qalculate!

    +

    O Cantor é uma interface para diversos pacotes poderosos de matemática e estatística. O Cantor integra-os na Plataforma do KDE e oferece uma interface gráfica agradável e baseada em folhas de trabalho. Suporta ambientes para o KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab e Qalculate!

    +

    Cantor é uma interface para os pacotes de matemática e estatísticas poderosa. O Cantor integra-as na plataforma do KDE e oferece uma interface gráfica agradável e baseada numa folha de trabalho. Ele tem suporte aos ambientes para KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab e Qalculate!

    +

    Cantor — программа для удобной работы с математическими и статистическими пакетами. Обладает графическим интерфейсом, позволяющим параллельно работать с несколькими документами. Поддерживаются системы компьютерной алгебры и языки KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab и Qalculate!

    +

    Cantor je frontend pre mocné matematické a štatistické balíky. Integruje ich do KDE platformy a poskytuje pekné, listovo založené grafické používateľské prostredie. Podporuje prostredia pre KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab a Qalculate!

    +

    Cantor je začelje za zmogljive matematične in statistične pakete. Cantor jih vgradi v okolje KDE in ponuja lep grafični uporabniški vmesnik, ki temelji na preglednicah. Podpira okolja za KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, in Qalculate!

    +

    Cantor är ett gränssnitt till kraftfulla matematiska och statistiska paket. Cantor integrerar dem med KDE:s plattform och tillhandahåller ett snyggt, arbetsbladsbaserat, grafiskt användargränssnitt. Det stödjer miljöer för Kalgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab och Qalculate!.

    +

    Cantor güçlü matematik ve istatistik paketleri için bir önyüzdür. Cantor onları KDE Platformunda tümleştirir ve güzel, çalışma sayfası temelli bir grafik arayüz sağlar. KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, ve Qalculate gibi ortamları destekler.

    +

    Cantor> — графічна оболонка до потужних програм обробки математичних та статистичних даних. Cantor інтегрує ці програми до платформи KDE і надає користувачами зручний заснований на обчислювальних аркушах графічний інтерфейс. Передбачено підтримку роботи у режимі оболонок до KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab та Qalculate!

    +

    xxCantor is a front-end to powerful mathematics and statistics packages. Cantor integrates them into the KDE Platform and provides a nice, worksheet-based, graphical user interface. It supports environments for KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab, and Qalculate!xx

    +

    Cantor 是一个强大的数学和统计学工具包的前端。Cantor 将它们集成到 KDE 平台并提供了美观,基于工作表的图形用户界面。它支持 KAlgebra,Lua,Maxima,R,Sage,Octave,Python,Scilab 和 Qalculate 环境!

    +

    Cantor 是一套強大的數學與統計軟體套件的前端介面。Cantor 會將它們整合到 KDE 並提供一套工作表式的圖形介面。它之援 KAlgebra, Lua, Maxima, R, Sage, Octave, Python, Scilab 與 Qalculate 的環境。

    +
    + http://edu.kde.org/cantor/ + https://bugs.kde.org/enter_bug.cgi?format=guided&product=cantor + http://docs.kde.org/stable/en/kdeedu/cantor/index.html + https://www.kde.org/community/donations/?app=cantor&source=appdata + + + Using Maxima backend of Cantor + Usant el dorsal Maxima del Cantor + Usant el dorsal Maxima del Cantor + Maxima-Modul in Cantor + Using Maxima backend of Cantor + Usando el motor Maxima de Cantor + Usando a infraestrutura de Maxima de Cantor + De Maxima-backend van Cantor gebruiken + Uso da infra-estrutura de Maxima do Cantor + Usando a infraestrutura Maxima do Cantor + Användning av bakgrundsprogrammet Maxima i Cantor + Використання модуля Maxima Cantor + xxUsing Maxima backend of Cantorxx + 使用 Cantor 的 Maxima 後端 + http://kde.org/images/screenshots/cantor.png + + + KDE + + cantor + + diff --git a/po/bs/cantor.po b/po/bs/cantor.po new file mode 100644 index 0000000..cc07695 --- /dev/null +++ b/po/bs/cantor.po @@ -0,0 +1,3326 @@ +# Bosnian translation for kdeedu +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the kdeedu package. +# FIRST AUTHOR , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: kdeedu\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2014-01-31 20:51+0100\n" +"Last-Translator: Samir Ribić \n" +"Language-Team: Bosnian \n" +"Language: bs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Launchpad (build 16807)\n" +"X-Launchpad-Export-Date: 2013-10-19 05:16+0000\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Senad Mulaosmanović,Alem Spaho,Samir Ribić,Vedran Ljubovic" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"sen@etf.ba,as15355@etf.unsa.ba,samir.ribic@etf.unsa.ba,vljubovic@smartnet.ba" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pauza" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stop" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Spasi rezultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Napredno crtanje" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Crtaj" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Izraz:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Dodatne opcije:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Crtaj:" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktivna opcija" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Izračunaj" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Nađi izvod" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Promjenljiva:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Puta: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Uvezi paket" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integriši" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Donja granica:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Gornja granica:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "određen integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Linearna Algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Kreiraj matricu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolone:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Redovi:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Izračunaj svojstvene vrijednosti" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrica:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Izračunaj svojstvene vektore" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertuj matricu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D prikaz" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Promjenljiva" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "ime" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D prikaz" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Prva promjenljiva" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "druga promjenljiva" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Pokreni skriptu" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Riješi jednačinu" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Jednačine:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Promjenljive:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Vidi %3 za više " +"informacija
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Izaberite pozadinu za korištenje:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Postavi ovo kao zadanu pozadinu" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.python.org/2/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "ugrađen crtež u radni list" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R skriptna datoteka" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Staza do Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integriraj grafike u radnom listu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista skripti koje se pokrećuna početku sesije" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Greška: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Skripte za automatsko pokretanje" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to python command" +msgid "Path to luajit command" +msgstr "Staza za python naredbu" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R skriptna datoteka" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to python2 command:" +msgid "Path to luajit command:" +msgstr "Staza za python2 naredbu" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima je sistem za manipulaciju simboličkih i numeričkih izraza, " +"uključujući diferencijaciju, integraciju, Tejlorove redove, Laplasovu " +"transformaciju, uobičajne diferentne jednačine, sisteme linearnih jednačina, " +"polinome, i postavlja, liste, vektore, matrice i tenzore. Maxima postiže " +"precizne numeričke rezultate koristeči tačne razlomke, proizvoljne " +"preciznosti cijelih brojeva, i promjenljive preciznosti realnih brojeva. " +"Maxima moze predstaviti funkcije i podatke u dvije i tri dimenzije. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Put do Maxima izvršnog programa" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Uključi upravljanje varijablama" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Greška: Previše */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Greška: Previše /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Greška: očekivano \" bprije ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima serijska datoteka" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Neuspjeli pokušaj pokretanja Maxime" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima se srušila. restartujem..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima se srušila dva puta u kratkom vremenu. Zaustavljam da bih pokušao " +"ponovno pokretanje" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Greška - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkcija" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Staza do Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integriraj grafike u radnom listu" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Neka Cantor prati kreiranje/uništavanje varijabli" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave je jezik visokog nivoa, prije svega namijenjen za numerička " +"izračunavanja.
    On pruža zgodan interfejs komandne linije za rešavanje " +"numerički linearnih i nelinearnih problema, kao i za obavljanje drugih " +"numeričkih eksperimenata koristeći jezik koji je kompatibilan sa većinom " +"Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Staza do programa Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave skript datoteka" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Sintaksna greška" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Staza do Octave" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.py|Python script file" +msgid "Python script file (*.py)" +msgstr "*.py|Python skriptna datoteka" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python je primjetno jak dinamički programski jezik korišten u mnogo " +"aplikativnih domena. Ima više Python paketa za naučno programiranje.

    Ova pozadina podržava Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/2/" + +#: backends/python3/python3backend.cpp:56 +#, fuzzy, kde-format +#| msgid "" +#| "

    Python is a remarkably powerful dynamic programming language that is " +#| "used in a wide variety of application domains. There are several Python " +#| "packages to scientific programming.

    This backend supports Python 2." +#| "

    " +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python je primjetno jak dinamički programski jezik korišten u mnogo " +"aplikativnih domena. Ima više Python paketa za naučno programiranje.

    Ova pozadina podržava Python 2.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Dialog za crtanje" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkcije" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Naslov" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Izraz" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Dodaj" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Ukloni" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Očisti listu" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "promjenjiva X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linije" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Tačke" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Tačke i Linije" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Okviri" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Koraci" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Svijeća" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Tačke" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Uglađivanje" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Nijedan" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotono" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Prirodne kubne krive" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezijer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezijer(monotono)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Rang funkcije" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Rang X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, fuzzy, kde-format +#| msgid "Sampling rate" +msgid "Sa&mpling rate" +msgstr "Brzina uzorkovanja" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Step size" +msgid "Step si&ze" +msgstr "Veličina koraka" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opcije" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Naslov crteža" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Oznake na x osi" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Oznake na y osi" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Legenda pozicije" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Sakrij legendu" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Gore - lijevo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Gore - desno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Dolje - lijevo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Dolje - desno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Ispod" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Izvan" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Prikaži mrežu" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Prikaži cijeli rub" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Upotrijebi boje" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Prikaži u liniji" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritamska x skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritamska y skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opcije datoteke" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Snimi sliku u datoteku" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Vrsta datoteke" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Odredi iz naziva datoteke" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! nije obična softwerska replika najjeftinijeg dostupnog " +"kalkulatora. Qalculate! teža punoj upotrebi nadmoćnog interfejsa, snazi i " +"prilagodljivosti modernim kompjuterima. Centar pažnje Qalculate! je u " +"potpunosti na izrazima. Umjesto unošenja svakog roja u matematički izraz " +"odvojeno, možete direktno napisati cijeli izraz i kasnije ga modifikovati." +"Interpetacija izraza je prilagodljiva i otporna na (sitne) greške i ako " +"pogriješite Qalculate! će Vam to raći. Nisu svi izrazi u potpunosti rješivi " +"bez greški. Qalculate! će pojednostaviti dok ne bude u mogućnosti da ga " +"izračuna.Osim brojeva i aritmetičkih operatora, izraz može sadržavati bilo " +"koju kombinaciju varijabli, jedinica, i funkcija" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Ako i kako se jedinice automatski konvertuju. Ako je tačno konvertuje se u " +"mjernu jedinicu iz SI sistema koja je najprikladnija (najmanjim iznosom " +"jedinica)" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Podrazumjevani ugao mjere za trigonometrijske funkcije" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Baza parsiranja i izračunavanja brojeva" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Rezultat će biti pojednostavljen ili faktorisan" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Racionalni brojevi bit će prikazani sa zarezom, kao razlomokom ili nečim " +"između" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Prikaži da red cifri broja se nastavlja u beskraj sa tri tačke umjesto " +"zaokruživanja (npr. 2/3 displays as 0.666666... umjesto 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Upotrebi sve decimalne SI prefikse. Ako nije označeno prefiksi koji se ne " +"mogu množit sa hiljadu (centi, deci, deca, hecto) se neće automatski " +"koristiti" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Ako je tačno, negativni eksponenti će biti korišteni umjesto dijeljenja (npr " +"5/x^2 postaje 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Brojčani displej" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"ako je tačno, crtež će biti prikazan unutar radne stranice. inače u " +"odvojenom prozoru." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Da li treba boje koristi u crtežima" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Da li treba mreža biti na slici" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Da li treba puni rub biti izvućen oko crteža" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Širina linija u pikselima" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Broj interpolacijskih koraka koji su korišteni za crtanje" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Mod za presemplovanje u crtanju" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Stil crteža" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Legenda pozicije u crtežima" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate izvještava da ne može štampati. Da li je gnuplot instaliran?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "nedostaje %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 mora biti broj" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 mora biti cijeli broj" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 mora biti tipa bool" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Nemoguća opcija za %1:%2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "pronađeno više izraza u jednoj komandi za crtanje (%1 i %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "GREŠKA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "UPOZORENJE" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Nema funkcije, promjenjive ili mjerne jedinici sa navedenim imenom" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkcija: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interfejs za ctanje" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Crta jednu ili više funkcija ili zajedno ili u odvojenom prozoru" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "izraz" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "Opcija" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "vrijednost" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "cijeli broj" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "logička vrijednost" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "broj" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "Podrazumjevano: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Ime funkcije" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Naziv oznake" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "oznake na x osi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "oznake na y osi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Slika za spasiti crtež u. Ako je prazna pokazuje crtež u prozoru na " +"zaslonu. Ako je inline = istinito prikazuje se bez obzira na tu opciju." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Format slike za snimanje. (jedno od auto, png, ps, eps, latex, svg, fig.)" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Postaviti na Tačno za štampanje boja, Netačno za jednobojnu štampu" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "najmanja vrijednost na x osi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Najveća vrijednost na x osi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Da li će logaritamska skala biti korištena za x osu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Da li će logaritamska skala biti korištena za y osu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritamska osnova za x osu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritamska osnova za y osu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Da li je biti prikazana mreža na crtežu" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Ako crtež će biti okružen granicama na sve strane (a ne samo ose)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Širina linija" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Mjesto gdje će legenda biti smještena. Jedno od nigdje, gore_lijevo, " +"dolje_desno, dolje_lijevo, dolje_desno, ispot, vani" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Presemlovanje crteža. Jedno od nikako, jednoznačno, csplines(povezivanje " +"svih tačaka glatko), berizier,sbezier (učini funkciju glatkom i " +"jednoznačnom, a zatim na nju primjenjuje berierov algoritam)" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Vrsta crteža. Jedno od linija, tačaka, tačkastih_linija, okvira, histograma, " +"koraka, svijećnika, tačaka." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Upotreba skale na drugoj x osi." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Upotreba skale na drugoj y osi." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Ako crtež mora biti izvučeni u istom prozoru, umjesto u novom prozoru." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Udaljenost između dvije interpolirane tačke. Takođe pogledajte korake" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Broj interpoliranih tački. Takođe pogledajte korak." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Ime promjenjive x. Ovo mora biti nepoznata vrijednost." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Snimi promjenjive u datoteku" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Snimi sve trenutno definisane promjenjive u datoteku. One mogu biti ponovo " +"očitane sa %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "datoteka" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "datoteka: datoteka za snimanje u" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Očitaj promjenjive iz datoteke" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Očitaj promjenjive iz datoteke koja je ranije napravljena s %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "Datoteka: datoteka za očitavanje" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Opšte" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Baza broja (npr binarna, oktalna, decimalna)" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Format razlomka" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimalni" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Tačno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "razlomački" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinovano" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Prikaz brojeva:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "čisto" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Naučni" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Tačnost" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Prikaz beskonačnog reda" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Uključeno" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Upotrijebi sve SI prefike" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Upotreba negativnih eksponenata" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Procijeni" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Pretvori u odgovarajuću SI jednicu" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Jedinica ugla:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radijani" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Stepeni" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradijani" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Mod za strukturiranje" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Pojednostavi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktoriši" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Iscrtavanje" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Prikazuje crtež inline" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Obojen crtež" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Prikaži mrežu:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Prikazuje pune granice" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Širina linija" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Brzina uzorkovanja:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Mod za presemplovanje" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Prirodne kubne krive" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Stil crteža" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Koraci" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Legenda pozicije" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R je jezik i okruženje za statističko računarstvo i grafiku, sličan S jeziku " +"i okruženju.
    Pruža široku paletu statističke( linearnog i nelinearnog " +"modeliranja, klasičnog statističkog testa, analize vremenske serije," +"klasifikacije, grupisanja,...) i grafičke tehnike, i vrlo je proširiv. S " +"jezik je često sredstvo za istraživanje u statističkoj metodologiji, a R " +"pruža Open Sorce put za sudjelovanje u toj aktivnosti." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Greška pri otvaranju datoteke %1" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R skriptna datoteka" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Greška rasčlanjivanje komande" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dvaput kliknite da biste otvorili dijalog za izbor datoteke" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R izvorne datoteke (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage je besplatni open-source matematički softverski sistem licenciran pod " +"GPL.
    On kombinira snagu mnogih postojećih paketa u zajednički Python-" +"bazirani interfejs." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Put do Sage izvršne" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Rezultat od %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Posljednji izlaz je bio:\n" +"%2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python skriptna datoteka\n" +"*.sage|Sage skriptna datoteka" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage process se srušio dok je procjenjivao ovaj izraz" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage process se srušio" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage proces zatvoren tokom računanja izraza" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage proces izašao" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Neuspjeli pokušaj pokretanja Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Staza do Sage" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.5 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Upozorenje: ovo pozadina radi samo sa Scilab verziju 5.5 ili " +"novijim

    Scilab je besplatni softver, više-platformski numerička " +"računalni paket i brojčano orijentisani programski jezik visokog nicoa.

    " +"Scilab se distribuira pod CeCILL licensom (GPL kompatibilna)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Staza za scilab-adv-cli naredbu (Upozorenje: Scilab verzija mora biti 5.4 " +"ili novija )" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.sce|Scilab script file\n" +#| "*.sci|Scilab function file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.sce|Scilab skriptna datoteka\n" +"*.sci|Scilab funkcijska datoteka" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Staza za scilab-adv-cli naredbu" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Preuzmite primjer radnih listova" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Otvori primjer" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor Radni list" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open image file" +msgid "Open file" +msgstr "Otvori datoteku slike" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Pozadina nije pronađena

    \n" +"
    Mogli bi ste pokušati:\n" +"
    • Promjenu podeÅ¡avanja u konfiguracijskom dijalogu;
    • " +"
    • Instaliranjem paketa za sljedeći program:
    • %2
    " +msgstr[1] "" +"

    Pozadina nije pronađena

    \n" +"
    Mogli bi ste pokušati:\n" +"
    • Promjenu podeÅ¡avanja u konfiguracijskom dijalogu;
    • " +"
    • Instaliranjem paketa za jedan od sljedećih programa:
    • %2
    " +msgstr[2] "" +"

    Pozadina nije pronađena

    \n" +"
    Mogli bi ste pokušati:\n" +"
    • Promjenu podeÅ¡avanja u konfiguracijskom dijalogu;
    • " +"
    • Instaliranjem paketa za jedan od sljedećih programa:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Greška" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesija %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Nemogu da nađem Cantor dio." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Spasi rezultat" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Pozadina koja je koristena kao zadana" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Postavi tip kao da je unaprijed zadan" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Uradi sintaksno isticanje kao unaprijed zadano" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Uključi dovršavanje kao unaprijed zadano" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Uključi brojanje izraza kao unaprijed zadano" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Normalno animiraj promjene u radnom listu" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automatski ponovo procjeni unos ispod trenutnog" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Pozadina %1 nije instalirana" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Postoje problemi sa %1 pozadinom,\n" +"molimo vas provjerite konfiguraciju ili instalirajte potrebne pakete.\n" +"Samo ste u mogućnosti pogledati ovaj radni list." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Snimi kao obični tekst" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Izvezi u LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Procjeni radni list" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Štampa pomoću LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Sintaksno isticanje" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Dovršavanje" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Brojevi linija:" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animiraj radni list" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Ponovo pokreni Pozadinu" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Procjeni ulazne podatke" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Ubacivanje komandnog unosa" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Ubacivanje tekstualnog unosa" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Ubacivanje komandnog unosa" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Ubaci latek ulaz" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Ubaci kraj strane" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Dodaj Sliku" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Odstrani trenutne ulazne podatke" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Prikaži %1 Pomoć" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Pokaži skriptni Urednik" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Prikaži dovršavanje" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantor dio" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2013 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2013 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save as" +msgstr "Spasi rezultat" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Ponovo pokreni Pozadinu" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Prekid" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Računam..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Spreman" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sesija Greška: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicijalizacija završena" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Inicijalizacija Sesije" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Neimenovano" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Da li želite da učitate trenutni radni list na javni web server?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pitanje - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Radni list nije spašen. Trebali bi ste da ga spasite prije učitavanja." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Upozorenje - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Pozadina nepodržava skripte." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Izmijeni" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Prikaz" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Radni list" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Datoteka" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nova" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneli" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Postavke" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Spreman" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "Rang X" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "Rang X" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "Rang X" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "&Boja teksta..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Font" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Podebljano" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Kurziv" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Prekinuto" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Traka za pretragu" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Nađi:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Nova" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Prethodna" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Zamijeni:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Zamijeni" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Zamijeni &Sve" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Traži u:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Razlikuj veličinu slova" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "konfigurisati sliku" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Desni klik ovdje za ubacivanje slike" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Ne mogu učitati sliku %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Podešavanje slike" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Otvori" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Prikaži veličinu" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Širina" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Visina" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Prethodna" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Veličina štampe" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Upotrijebi veličinu prikaza" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Otvori datoteku slike" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Prikaži LaTex kod" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Put do latex izvršne" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Put do dvips izvršne" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Naziv" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Vrijednost" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Od:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Do:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Glavni naslov" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Skala abscise" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Skala ordinate" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Naslov crtanja:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE sučelja za matematičke operacije" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2013 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2013 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Scilab and Python backends" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Scilab i Python pozadine." + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlegebra pozadina" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave pozadina" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Kuttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfejs" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Koristi ovu pozadinu" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Dokument za otvaranje" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Greška pri otvaranju datoteke %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Nova strana ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE način za rad Matematike" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Naziv:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Vrijednost:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Dodaj novu varijablu" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Učitaj varijable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Smjesti varijable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Obriši varijable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Da li ste sigurni da želite ukloniti sve varijable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Potvrda - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Loading failed." +msgid "Load file" +msgstr "Očitanjavnje nije uspjelo" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Ukloni rezultate" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"KDE tekst editor komponenta nije pronađena.\n" +"Molim provjerite vašu KDE instalaciju." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Urednik skripti" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Urednik skripti - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nije nađeno" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Dosegnut početak" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Dosegnut kraj" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Zamijenjena %1 kopija" +msgstr[1] "Zamijenjene %1 kopije" +msgstr[2] "Zamijenjeno %1 kopija" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Komande" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Rezultati" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Greške" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX kod" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Podrazumijevana pozadina:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Kad je uključeno, Cantor će automatski provjeriti svaki ulazni podatak ispod " +"trenutnog." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Ponovo provjeri ulazne podatke automatski" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Podrazumijevano" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Uključi LaTeX slaganje" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Uključi bojenje sintakse" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Uključi dovršavanje" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Broj linija:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Uključi animaciju radnih listova" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Prikaži izvršene" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Prikaži kod" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Nemogu napraviti Eps datoteku. Možda će vam trebati dodatni paketi" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Ne može pisati datoteku %1" + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Ne može pisati datoteku %1" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Greška pri spašavanju datoteke %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Greška u učitavanju latex.xsl stila" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Unos komande" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Unos teksta" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Ubacivanje komandnog unosa" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Latex unos" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Slika" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Prelom stranice" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Ubacivanje tekstualnog unosa" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "Ubaci prije" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Ubaci LaTeX element" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Boja teksta..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Boja" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Isticanje teksta..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Font" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Veličina fonta" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Podebljano" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kurziv" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Podvučeno" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Precrtano" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Poravnaj &Lijevo" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Lijevo" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Poravnaj &Centrirano" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centrirano" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Poravnaj &Desno" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Desno" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Obostrano" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Obostrano poravnaj" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Ukloni stavku" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Prevuci element" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Pozadina sa kojom je ova datoteka generisana nije instalirana. Treba %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Objavi radni list" + +#~ msgid "Waiting for Image..." +#~ msgstr "Čekam sliku..." + +#~ msgid "Insert" +#~ msgstr "Ubaci" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Ne mogu otvoriti datoteku %1: Nepoznat Mime tip" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX dokument" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor Radni list" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server za Cantor R pozadinu" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Upotreba:snimiPromjenjive u datoteku" + +#~ msgid "Saving failed." +#~ msgstr "Neuspjelo snimanje" + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Upotreba:ocitajPromjenjive iz datoteke" + +#~ msgid "Loading failed." +#~ msgstr "Očitanjavnje nije uspjelo" + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Staza za python naredbu" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor Server za R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Da li želite proslijediti slike?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Staza za python2 naredbu" + +#~ msgid " Enable Variable Management" +#~ msgstr " Uključi upravljanje varijablama" + +#~ msgid "" +#~ "

    Warning: this backend works only with Scilab version 5.4 or " +#~ "later

    Scilab is a free software, cross-platform numerical " +#~ "computational package and a high-level, numerically oriented programming " +#~ "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +#~ msgstr "" +#~ "

    Upozorenje: ovo pozadina radi samo sa Scilab verziju 5.4 ili " +#~ "novijim

    Scilab je besplatni softver, cross-platforma numerička " +#~ "računalna paket i na visokoj razini, brojčano orijentirano programiranje " +#~ "jezik.

    Scilab se distribuira pod CeCILL licensom (GPL kompatibilna)" + +#~ msgid "(C) 2009-2012 Alexander Rieder" +#~ msgstr "(C) 2009-2012 Alexander Rieder" + +#~ msgid "Scilab backend" +#~ msgstr "Scilab podupirač." diff --git a/po/ca/cantor.po b/po/ca/cantor.po new file mode 100644 index 0000000..5afa92e --- /dev/null +++ b/po/ca/cantor.po @@ -0,0 +1,3342 @@ +# Translation of cantor.po to Catalan +# Copyright (C) 2009-2018 This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Orestes Mas , 2009, 2010, 2011, 2012. +# Josep Ma. Ferrer , 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Antoni Bella Pérez , 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-09 21:06+0100\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Accelerator-Marker: &\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Orestes Mas Casals" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "orestes@tsc.upc.edu" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausa" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Inicia" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Atura" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Desa el resultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gràfiques avançades" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Gràfic" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expressió:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opcions addicionals:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Dibuixa" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opció activa" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcula" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Deriva" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variable:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Vegades:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paquet" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importació de paquet" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paquet:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integra" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Límit inferior:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Límit superior:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integral definida" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "À&lgebra lineal" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Crea matriu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Columnes:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Files:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcula autovalors" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriu:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcula autovectors" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverteix matriu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Gràfic 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nom" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Mínim:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Màxim:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Gràfic 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1a. variable" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2a. variable" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Executa un script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Resol equacions" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Equacions:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variables:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versió recomanada: %4

    %2

    Vegeu %3 per a més informació
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Escolliu el dorsal a utilitzar:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Fes-lo el dorsal per omissió" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia és un llenguatge de programació d'alt nivell i rendiment per " +"a la computació tècnica, amb una sintaxi que és familiar per als usuaris " +"d'altres entorns de computació tècnica. Proporciona un compilador " +"sofisticat, execució en paral·lel distribuïda, precisió numèrica i una " +"extensa biblioteca de funcions matemàtiques.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Camí al Julia natiu REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integra les gràfiques en el full de treball" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Fitxer de script del Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Camí al Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Integra les gràfiques en el full de treball (inicia una sessió nova quan " +"canvia)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Format intermedi de gràfics inclosos:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" +"Llista de scripts a executar automàticament al començament de la sessió" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Error: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts a autoexecutar" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    El Lua és un llenguatge per crear scripts ràpid i lleuger, amb una " +"sintaxi de procediment simple. Hi ha diverses biblioteques en Lua dirigides " +"a les matemàtiques i la ciència.

    Aquest dorsal accepta el LuaJit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Camí a l'ordre «luajit»" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Fitxer de script del Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Camí a l'ordre «luajit»:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"El Maxima és un sistema per a la manipulació d'expressions simbòliques i " +"numèriques, incloent-hi la derivació, integració, sèries de Taylor, " +"transformades de Laplace, equacions diferencials ordinàries, sistemes " +"d'equacions lineals, polinomis, conjunts, llistes, vectors, matrius i " +"tensors. El Maxima aconsegueix resultats numèrics d'alta precisió gràcies a " +"la utilització de fraccions exactes, enters de precisió arbitrària i nombres " +"de coma flotant de precisió variable. El Màxima pot fer gràfiques de " +"funcions i dades en dues i tres dimensions. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Camí a l'executable Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Habilita la gestió de les variables" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Error: Massa */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Error: Massa /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Error: s'esperava \" abans de ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "S'està esperant el resultat del gràfic" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Fitxer de procés per lots del Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "No s'ha pogut iniciar el Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "El Maxima ha fallat. S'està reiniciant..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"El Maxima ha fallat dues vegades en poc temps. Es deixarà de reintentar " +"l'engegada." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Error - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funció" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Camí al Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integra les gràfiques en el full de treball" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Deixa que Cantor segueixi la creació/destrucció de variables" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave és un llenguatge d'alt nivell orientat principalment al càlcul " +"numèric.
    Ofereix una línia d'ordres útil per resoldre problemes lineals " +"i no lineals numèricament, i per efectuar altres experiments numèrics " +"utilitzant un llenguatge que és altament compatible amb Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Camí a l'executable Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Fitxer script de l'Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Error de sintaxi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Camí a l'Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Fitxer de script del Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    El Python és un llenguatge de programació dinàmic especialment potent que " +"s'utilitza en una gran varietat de dominis d'aplicació. Hi ha diversos " +"paquets Python per a la programació científica.

    Aquest dorsal accepta " +"Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    El Python és un llenguatge de programació dinàmic especialment potent que " +"s'utilitza en una gran varietat de dominis d'aplicació. Hi ha diversos " +"paquets Python per a la programació científica.

    Aquest dorsal accepta " +"Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - diàleg de gràfics" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funcions" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Títol" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expressió" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Afegeix" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Elimina" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Neteja la llista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variable X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Estil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Línies" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punts" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punts i línies" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Quadres" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histograma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Espelmes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Punts" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Suavitzat" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Cap" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotònic" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Splines cúbics naturals" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézier (monotònic)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Interval de la funció" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Interval X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Freqüència de &mostratge" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Mida del pa&s" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opcions" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Títol del gràfic" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Etiqueta de l'eix X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Etiqueta de l'eix Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posició de la llegenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Oculta la llegenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Superior esquerra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Superior dreta" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Inferior esquerra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Inferior dreta" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Sota" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Exterior" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostra la graella" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostra la vora completa" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Utilitza colors" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostra inclosa" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Escala X logarítmica" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Escala Y logarítmica" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opcions de fitxer" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Desa el gràfic a un fitxer" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipus de fitxer" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detecta'l pel nom de fitxer" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"El Qalculate! no és un programa que imita el funcionament de la calculadora " +"més barata. El Qalculate! pretén treure profit de la potència, flexibilitat " +"i superior interfície dels ordinadors moderns. El centre d'atenció de " +"Qalculate! és la introducció d'expressions. En lloc d'introduir cada nombre " +"d'una expressió matemàtica per separat, podeu escriure directament " +"l'expressió completa i modificar-la més endavant. La interpretació de les " +"expressions és flexible i tolerant a fallades, i si mai us equivoqueu el " +"Qalculate! us ho farà saber. Tanmateix, les expressions no resolubles en la " +"seva totalitat no són considerats errors. El Qalculate! les simplificarà " +"tant com pugui i respondrà amb una expressió. A més de nombres i operadors " +"aritmètics, una expressió pot contenir qualsevol combinació de variables, " +"unitats i funcions." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Si cal convertir les unitats automàticament, i com. Si és cert, converteix-" +"les a les unitats del SI més adients (el mínim nombre d'unitats)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unitats angulars per omissió en les funcions trigonomètriques." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "La base dels nombres interpretats i avaluats." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" +"Especifica si el resultat de l'avaluació se simplificarà o factoritzarà." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Especifica si els nombres racionals es mostraran amb decimals, com a " +"fracció, o quelcom intermedi." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mostra que la sèrie de dígits d'un número continua indefinidament utilitzant " +"tres punts en lloc d'arrodonir-lo (p. ex.: 2/3 es mostra com 0,666666... en " +"lloc de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Utilitza tots els prefixos decimals del SI. Si és fals, NO s'utilitzaran " +"prefixos de forma automàtica si aquests no són múltiples de mil (centi, " +"deci, deca, hecto)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Si és cert, s'utilitzaran exponents negatius en lloc de quocients (p. ex.: 5/" +"x^2 esdevindrà 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Presentació numèrica." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Si és cert, les gràfiques es mostraran dins del full de treball. Altrament " +"apareixeran en una finestra separada." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Si s'han d'usar o no colors a les gràfiques." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Si s'ha de dibuixar o no una graella." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Si s'han de dibuixar o no totes les vores al voltant de la gràfica." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Amplada de les línies, en píxels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Nombre de passos d'interpolació que s'usaran en fer les gràfiques." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Mode de suavitzat de les gràfiques." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Estil de les gràfiques." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Posició de la llegenda a les gràfiques." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "El Qalculate informa que no pot imprimir. Teniu instal·lat el gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "falta %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 ha de ser un nombre." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 ha de ser un enter." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 ha de ser un booleà." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Opció invàlida per a %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "s'han trobat múltiples expressions en una ordre plot (%1 i %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERROR" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "AVÍS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "No existeix cap funció, variable o unitat amb aquest nom." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funció: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interfície de creació de gràfiques" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Dibuixa la gràfica d'una o més funcions, incloses o bé en una finestra " +"separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expressió" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opció" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "enter" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booleà" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "nombre" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "omissió: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "El nom de la funció" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etiqueta del títol" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Etiqueta de l'eix X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Etiqueta de l'eix Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Imatge on desar la gràfica. Si ho deixeu buit, mostrarà la gràfica en una " +"finestra de la pantalla. Si «inline=true» es mostrarà la imatge sense tenir " +"en compte aquesta opció." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"El tipus d'imatge a desar. Pot ser «auto», «png», «ps», «eps», «latex», " +"«svg» o «fig»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Establert a «vertader» per gràfiques en colors, i a «fals» per " +"monocromàtiques." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Valor mínim de l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Valor màxim de l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Si cal emprar o no una escala logarítmica per l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Si cal emprar o no una escala logarítmica per l'eix Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Base logarítmica per l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Base logarítmica per l'eix Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Si s'ha de mostrar o no la graella de coordenades." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Si la gràfica ha d'estar totalment envoltada per vores (no només els eixos)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Amplada de les línies." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"On s'ha d'ubicar la llegenda de la gràfica. Ha de ser Cap, Superior " +"esquerra, superior dreta, Inferior esquerra, Inferior dreta, Sota o Exterior." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Suavitzat de la gràfica. Ha de ser «Cap», «Únic», «Csplines», «Bézier» o " +"«Sbézier»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"L'estil de la gràfica. Pot ser «línies», «rodones», «línies i punts», " +"«quadres», «histograma», «escala», «espelmes» o «punts»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Usa una escala a l'eix X secundari." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Usa una escala a l'eix Y secundari." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Si la gràfica s'ha de visualitzar inclosa, en lloc d'una finestra separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Distància entre dos punts d'interpolació. Vegeu també «escala»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Nombre de punts d'interpolació. Vegeu també «escala»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "El nom de la variable X. Cal que sigui una variable desconeguda" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Desa variables a un fitxer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Desa totes les variables definides actualment en un fitxer. Podeu carregar-" +"lo més endavant amb %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fitxer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fitxer: el fitxer on s'ha de desar." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Carrega variables des d'un fitxer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Carrega variables d'un fitxer que ha creat prèviament l'usuari %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fitxer: el fitxer a carregar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "General" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numèrica:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Format de les fraccions:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exacte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fraccionari" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combinat" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Presentació numèrica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pur" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Científic" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisió" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indica les sèries infinites:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Habilitat" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usa tots els prefixos del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usa exponents negatius:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Avalua" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Converteix a les millors unitats del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unitat dels angles:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radians" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graus" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Graus centesimals" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Mode d'estructuració:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplifica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factoritza" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Gràfic" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Mostra les gràfiques incloses:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Gràfiques acolorides:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostra la graella:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostra les vores completes:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Amplada de les línies:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Freqüència de mostratge:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Mode de suavitzat:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Splines cúbics naturals" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Estil del gràfic:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posició de la llegenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"«R» és un llenguatge i un entorn per a computació i gràfics estadístics, " +"similar al llenguatge i entorn «S».
    Ofereix una àmplia varietat de " +"tècniques estadístiques (modelatge lineal i no lineal, tests estadístics " +"clàssics, anàlisi de sèries temporals, classificació, clustering...) i " +"gràfiques, i és altament extensible. El llenguatge S és sovint el vehicle " +"escollit per a la recerca en metodologia estadística, i R ofereix una via de " +"Codi obert per participar en aquesta activitat." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "S'ha produït un error en obrir el fitxer %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Fitxer de script del R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "S'ha produït un error en analitzar l'ordre" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Feu doble clic per obrir el diàleg de selecció de fitxer" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Fitxers font de R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"«Sage» és un programari matemàtic lliure sota la llicència GPL.
    Combina " +"la potència de multitud d'aplicacions de codi obert existents en una " +"interfície comuna basada en Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Camí a l'executable Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultat de %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"L'última sortida ha estat: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Fitxer de script del Python (*.py);;Fitxer de script del Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"No s'admet la versió %1.%2 del Sage. Actualitzeu la instal·lació a les " +"versions acceptades per fer que funcioni amb el Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "El procés Sage ha fallat mentre s'avaluava aquesta expressió" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "El procés Sage ha fallat" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "El procés Sage ha fallat mentre s'avaluava aquesta expressió" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "El procés Sage ha fallat" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "No s'ha pogut iniciar el Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Camí al Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    L'Scilab és un programari lliure multiplataforma de càlcul numèric, i un " +"llenguatge de programació d'alt nivell orientat a la manipulació de nombres." +"

    L'Scilab es distribueix sota una llicència CeCILL (compatible amb la GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Camí a l'ordre scilab-adv-cli (Avís: La versió de Scilab ha de millorar o " +"funcionar igual que la versió 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"::Fitxer de script de l'Scilab (*.sce);;Fitxer de funció de l'Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Camí al programa scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Descarrega fulls de treball d'exemple" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Obre un exemple" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Vés al full de treball anterior" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Vés al full de treball següent" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Full de treball del Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Obre un fitxer" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    No s'ha trobat cap dorsal

    \n" +"
    Podeu provar de:\n" +"
    • Canviar l'arranjament al diàleg de configuració;
    • " +"
    • Instal·lar els paquets del programa següent:
    • %2
    " +msgstr[1] "" +"

    No s'ha trobat cap dorsal

    \n" +"
    Podeu provar de:\n" +"
    • Canviar l'arranjament al diàleg de configuració;
    • " +"
    • Instal·lar els paquets d'algun dels programes següents:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Error" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sessió %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "No s'ha pogut trobar la Part del Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Hi ha diversos fulls de treball oberts sense desar. Els voleu tancar?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Tanca el Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "El projecte actual s'ha modificat. El voleu desar?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Desa el projecte" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "El dorsal que s'usarà per omissió" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Fes per omissió la composició tipogràfica" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Aplica per omissió el ressaltat de sintaxi" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Habilita per omissió la compleció" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Habilita per omissió la numeració de les expressions" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Anima per omissió els canvis en el full de treball" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Reavalua automàticament les entrades a sota de l'actual" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Demana confirmació en reiniciar el dorsal" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "El dorsal %1 no està instal·lat" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Hi ha alguns problemes amb el dorsal %1.\n" +"Si us plau, comproveu la vostra configuració o bé instal·leu els paquets " +"necessaris.\n" +"Només podreu visualitzar aquest full de treball." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Desa com a text net" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exporta a LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Avalua el full de treball" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Compon utilitzant el LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Ressaltat de sintaxi" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Compleció" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Números de línies" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Anima el full de treball" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reinicialitza el dorsal" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Avalua l'entrada" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Insereix una entrada d'ordre" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Insereix una entrada de text" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Insereix una entrada de Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Insereix una entrada de LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Insereix un salt de pàgina" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Insereix una imatge" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Elimina l'entrada actual" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Mostra l'ajuda de %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostra l'editor de scripts" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Mostra la compleció" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Desa com a" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Desa" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Es perdran totes els resultats disponibles dels càlculs. Esteu segur que " +"voleu reiniciar %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Reinicio %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrupció" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "S'està calculant..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Preparat" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Error de sessió: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicialització completa" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "S'està inicialitzant..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sense nom" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[només de lectura]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Voleu pujar el full de treball actual a un servidor web públic?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pregunta - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"El full de treball no s'ha desat. Hauríeu de desar-lo abans de pujar-lo." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Avís - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Aquest dorsal no admet scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Edita" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Visualitza" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Full de treball" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fitxer" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nou" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Plafons" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Arranjament" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Blanc" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Negre" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Vermell fosc" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Vermell" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Vermell clar" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verd fosc" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verd" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verd clar" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Blau fosc" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blau" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Blau clar" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Groc fosc" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Groc" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Groc clar" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Cian fosc" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cian" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Cian clar" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta fosc" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Magenta clar" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Taronja fosc" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Taronja" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Taronja clar" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Gris fosc" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Gris" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Gris clar" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Color del fons" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Color del text" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Tipus de lletra" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Negreta" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Cursiva" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Augmenta la mida" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Disminueix la mida" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Selecciona" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "S'ha interromput" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra de cerques" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Cerca:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Següent" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Anterior" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Substitueix:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Substitueix" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Substitueix-ho &tot" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Cerca a:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Fes concordar les &majúscules" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configura la imatge" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Dretacliqueu aquí per inserir una imatge" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "No s'ha pogut carregar la imatge %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Paràmetres d'imatge" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Obre" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Mida de la visualització" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Amplada" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Alçada" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Vista prèvia" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Mida d'impressió" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usa la mida de la visualització" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr " px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Obre un fitxer d'imatge" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostra el codi LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Camí a l'executable latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Camí a l'executable dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nom" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valor" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Des de:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Fins a:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Títol principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Escala d'abscisses" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Escala d'ordenades" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Títol del gràfic:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Frontal del KDE per a aplicacions matemàtiques" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Mantenidor
    Adaptació a les Qt5/KF5, dorsal de l'Scilab i el Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autor original
    Mantenidor (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Dorsal de KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Dorsal d'Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfície" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Icona del Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usa el dorsal " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documents a obrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "No s'ha pogut obrir el fitxer %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Salt de pàgina ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    cantor

    L'estil KDE de fer matemàtiques" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nom:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valor:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Afegeix una nova variable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Carrega variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Desa variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Neteja les variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Esteu segur/a que voleu eliminar totes les variables?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmació - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Carrega fitxer" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Elimina el resultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"No s'ha trobat cap component d'edició de text del KDE;\n" +"si us plau, comproveu la vostra instal·lació del KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor de scripts" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de scripts - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "No s'ha trobat" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "S'ha arribat al principi" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "S'ha arribat al final" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "S'ha reemplaçat %1 instància" +msgstr[1] "S'han reemplaçat %1 instàncies" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Ordres" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultats" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Errors" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Codi LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Dorsal per omissió:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Quan està habilitat, el Cantor avaluarà automàticament cada entrada al " +"dessota de l'actual." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Reavalua les entrades automàticament" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Per omissió" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Habilita la composició tipogràfica del LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Habilita el ressaltat de sintaxi" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Habilita la compleció" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Habilita la numeració de línies" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Habilita les animacions del full de treball" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostra renderitzat" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Mostra el codi" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"No s'ha pogut renderitzar el fitxer EPS. Potser necessiteu programes " +"addicionals." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "No s'ha pogut escriure al fitxer %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "No s'ha pogut escriure al fitxer." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Hi ha hagut un error en desar el fitxer %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"En mode de només lectura el Cantor no pot garantir que l'exportació sigui " +"vàlida per %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "S'ha produït un error en carregar el full d'estil latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "El fitxer seleccionat no és cap fitxer vàlid de projecte Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"No s'ha trobat el dorsal %1. No és possible l'edició ni l'execució d'entrades" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Entrada d'ordre" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Entrada de text" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Entrada de Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Entrada de LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Imatge" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Salt de pàgina" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Insereix una entrada després" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Entrada una entrada abans" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Insereix una entrada de LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Color del text..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Color" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Ressaltat de text..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Tipus de lletra" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Mida del tipus de lletra" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Negreta" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Cursiva" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Subratllat" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Barrat" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Alinea a l'es&querra" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Esquerra" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Alinea al ¢re" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centre" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Alinea a la &dreta" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Dreta" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justifica" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justificat" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Elimina l'entrada" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Arrossega l'entrada" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "No està instal·lat el dorsal amb què aquest fitxer fou generat. Necessita " +#~ "%1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publica el full de treball" + +#~ msgid "Waiting for Image..." +#~ msgstr "S'està esperant una imatge..." + +#~ msgid "Insert" +#~ msgstr "Insereix" + +#~ msgid "Insert Before" +#~ msgstr "Insereix abans" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "no s'ha pogut obrir el fitxer %1: Tipus MIME desconegut" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Document LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Full de treball de Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Servidor per al dorsal R del Cantor" + +#~ msgid "R Server" +#~ msgstr "Servidor R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Ús: VariablesADesar fitxer" + +#~ msgid "Saving failed." +#~ msgstr "El desament ha fallat." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Ús: VariablesACarregar fitxer" + +#~ msgid "Loading failed." +#~ msgstr "Ha fallat la càrrega." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Camí a l'ordre python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Servidor del Cantor per a R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Voleu exportar també les imatges?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Camí a l'ordre python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Habilita la gestió de les variables" + +#~ msgid "Could not start the server." +#~ msgstr "No s'ha pogut engegar el servidor." + +#~ msgid "Pause Animation" +#~ msgstr "Suspèn l'animació" + +#~ msgid "Start Animation" +#~ msgstr "Inicia l'animació" + +#~ msgid "Restart Animation" +#~ msgstr "Reinicia l'animació" + +#~ msgid "Append Command Entry" +#~ msgstr "Afegeix una entrada d'ordre" + +#~ msgid "Append Text Entry" +#~ msgstr "Afegeix una entrada de text" + +#~ msgid "Append Latex Entry" +#~ msgstr "Afegeix una entrada de LaTeX" + +#~ msgid "Append Image" +#~ msgstr "Afegeix una imatge" + +#~ msgid "Append Page Break" +#~ msgstr "Afegeix un salt de pàgina" + +#~ msgid "Other" +#~ msgstr "Altres" + +#~ msgid "And %1 more..." +#~ msgstr "I %1 més..." + +#~ msgid "Main Toolbar" +#~ msgstr "Barra d'eines principal" + +#~ msgid "Completion Style:" +#~ msgstr "Estil de compleció:" + +#~ msgid "Popup" +#~ msgstr "Emergent" + +#~ msgid "The style used for Completion" +#~ msgstr "L'estil usat per a la compleció" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Ruta a l'executable Sage" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Insereix una entrada d'ordre abans" + +#~ msgid "Command Entry Before" +#~ msgstr "Entrada d'ordre abans" + +#~ msgid "GroupBox" +#~ msgstr "Caixa de grup" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "Aquest test requereix un dorsal %1 funcional" + +#~ msgid "Help" +#~ msgstr "Ajuda" + +#~ msgid "Show Help Panel" +#~ msgstr "Mostra el plafó d'ajuda" + +#~ msgid "Uploading successful" +#~ msgstr "S'ha pujat amb èxit" + +#~ msgid "Error uploading File %1" +#~ msgstr "S'ha produït un error en pujar el fitxer %1" diff --git a/po/ca/docs/cantor/index.docbook b/po/ca/docs/cantor/index.docbook new file mode 100644 index 0000000..b46b86a --- /dev/null +++ b/po/ca/docs/cantor/index.docbook @@ -0,0 +1,1396 @@ + +ATEX"> + + +]> + + + +El manual del &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +&traductor.Antoni.Bella; + + + +2009 +Alexander Rieder + +&FDLNotice; + +25 d'agost de 2016 +Aplicacions 16.12 + + +El &cantor; és una aplicació destinada a proporcionar una agradable vista del full de treball a altres paquets de matemàtiques de programari lliure. + + + +KDE +kdeedu +matemàtiques +matemàtica +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + + + + +Introducció + +El &cantor; és una aplicació que us permetrà utilitzar les vostres aplicacions de matemàtiques preferides des d'una elegant interfície de full de treball integrada al &kde;. Proporciona diàlegs per ajudar amb les tasques comunes i us permetrà compartir els vostres fulls de treball amb els altres. + + + +Ús del &cantor; + +Captura de pantalla: +Aquí hi ha una captura de pantalla del &cantor; + + + + + + Captura de pantalla + + + + + + + +Característiques del &cantor; + + Una intuïtiva vista del full de treball per avaluar les expressions. + Els resultats del gràfic dibuixat es mostren dins del full de treball. + Una estructura fàcil basada en connectors per permetre afegir diferents dorsals. + Integració de «Obtén novetats candents» (GetHotNewStuff) per permetre descarregar (o carregar) fulls de treball d'exemple. + Escriure una fórmula matemàtica utilitzant &latex;. + Ressaltat de sintaxi segons el dorsal. + Els diàlegs d'assistent basats en el connector per ajudar amb les tasques comunes, com ara integrar una funció, o introduir una matriu. + + + + +Els dorsals del &cantor; +El &cantor; ofereix diverses opcions per als dorsals que voleu utilitzar. Les opcions dependran del que vulgueu realitzar. +Actualment estan disponibles els següents dorsals: + + Sage: + + «Sage» és un programari matemàtic lliure sota la llicència GPL. Combina la potència de multitud d'aplicacions de codi obert existents, en una interfície comuna basada en Python. Per a més informació, veure http://sagemath.org. + + + + Maxima: + + Maxima és un sistema per a la manipulació d'expressions simbòliques i numèriques, inclosa la derivació, integració, sèries de Taylor, transformades de Laplace, equacions diferencials ordinàries, sistemes d'equacions lineals, polinomis, conjunts, llistes, vectors, matrius i tensors. El Maxima aconsegueix resultats numèrics d'alta precisió gràcies a la utilització de fraccions exactes, enters de precisió arbitrària i nombres de coma flotant de precisió variable. El Màxima pot fer gràfiques de funcions i dades en dues i tres dimensions. Per a més informació, veure http://maxima.sourceforge.net. + + + + R: + + «R» és un llenguatge i un entorn per a computació i gràfics estadístics, similar al llenguatge i entorn «S». Ofereix una àmplia varietat de tècniques estadístiques (modelatge lineal i no lineal, tests estadístics clàssics, anàlisi de sèries temporals, classificació, clustering...) i gràfiques, i és altament extensible. El llenguatge S és sovint el vehicle escollit per a la recerca en metodologia estadística, i R ofereix una via de codi obert per participar en aquesta activitat. Per a més informació, veure http://www.r-project.org. + + + + Julia: + + Julia és un llenguatge de programació d'alt nivell i rendiment per a la computació tècnica, amb una sintaxi que és familiar per als usuaris d'altres entorns de computació tècnica. Proporciona un compilador sofisticat, execució en paral·lel distribuïda, precisió numèrica i una extensa biblioteca de funcions matemàtiques. Vegeu la documentació de Julia per a més informació. + + + + &kalgebra;: + + &kalgebra; és una calculadora gràfica basada en MathML, la qual s'inclou amb el projecte d'educació del &kde;. Per a més informació, veure http://edu.kde.org/kalgebra/. + + + + Qalculate!: + + El Qalculate! no és un programa que imita el funcionament de la calculadora més barata. Qalculate! pretén treure profit de la potència, flexibilitat i superior interfície dels ordinadors moderns. El centre d'atenció de Qalculate! és la introducció d'expressions. En lloc d'introduir cada nombre d'una expressió matemàtica per separat, podeu escriure directament l'expressió completa i modificar-la més endavant. La interpretació de les expressions és flexible i tolerant a fallades, i si mai us equivoqueu Qalculate! us ho farà saber. Tanmateix, les expressions no resolubles en la seva totalitat no es consideren errors. Qalculate! les simplificarà tant com pugui i respondrà amb una expressió. A més de nombres i operadors aritmètics, una expressió pot contenir qualsevol combinació de variables, unitats i funcions. Per a més informació, veure http://qalculate.sourceforge.net/. + + + + Python2 i Python3: + + Python és un llenguatge de programació dinàmica molt potent que s'utilitza en una àmplia varietat de dominis d'aplicació. Hi ha diversos paquets de Python per a la programació científica. + Python es distribueix sota llicència Python Software Foundation license (compatible amb la GPL). Per a més informació, veure el lloc web oficial. + + Aquest dorsal afegeix un element addicional al menú principal del &cantor;, Paquet. L'únic element d'aquest menú és PackageImporta el paquet. Aquest element es pot utilitzar per importar paquets de Python al full de càlcul. + + + + + Scilab: + + Scilab és un programari lliure multiplataforma de càlcul numèric, i un llenguatge de programació d'alt nivell orientat a la manipulació de nombres. + Scilab es distribueix sota llicència CeCILL (compatible amb la GPL). Per a més informació, veure http://www.scilab.org/. + + Necessitareu Scilab versió 5.5 o superior instal·lada al vostre sistema perquè aquest dorsal sigui usable. + + + + + Octave: + + &GNU; Octave és un llenguatge d'alt nivell orientat principalment al càlcul numèric. Ofereix una línia d'ordres còmoda per tal de resoldre problemes lineals i no lineals numèricament, i per efectuar altres experiments numèrics utilitzant un llenguatge que és altament compatible amb MATLAB. Per a més informació, veure http://www.gnu.org/software/octave/. + + + + Lua: + + Lua és un llenguatge per crear scripts ràpid i lleuger, amb una sintaxi de procediment simple. Hi ha diverses biblioteques en Lua dirigides a les matemàtiques i la ciència. + Veure http://www.lua.org/ per a més informació. + Aquest dorsal només suporta luajit 2. + + + + + + + +L'espai de treball del &cantor; + + + Captura de pantalla de l'espai de treball del &cantor; + + + + + + Captura de pantalla de l'espai de treball del &cantor; + + + + +La interfície del full de treball del &cantor; consisteix de tres parts: + La barra de pestanyes, des d'on podreu canviar entre els fulls de treball oberts. + Un plafó d'ajuda, on es mostrarà ajuda per a una ordre específica si introduïu «? ordre». + Un plafó «Gestor de variables» on podreu veure la llista de totes les variables disponibles en el full de treball actual. Els plafons «Ajuda» i «Gestor de variables» es mostren com pestanyes a la barra lateral d'una finestra del &cantor;. El gestor de variables es pot utilitzar només per als dorsals de Maxima (si està habilitat a la pàgina ArranjamentConfigura el &cantor;... Maxima), &kalgebra;, Octave, Python2, Python3, Qalculate i Scilab. + El full de treball mateix. + + + +El full de treball +El full de treball és l'àrea bàsica per treballar amb el &cantor;. Utilitzant-lo, podreu introduir expressions, permeten als dorsals realitzar els càlculs i veure els resultats. Les ordres dels fulls de treball accepten dependre del dorsal escollit, de manera que haureu d'aprendre la sintaxi apropiada del dorsal (el botó «Mostra Ajuda» us hi durà directament). Si coneixeu l'ordre, però necessiteu informació addicional, podeu escriure «? ordre», i apareixerà l'ajuda contextual a la dreta del full de treball. Per veure alguns exemples de fulls de treball, podeu anar a Descarrega fulls de treball d'exemple al menú Fitxer, i descarregar fulls de treball que han publicat altres usuaris. +Per a controlar cada entrada d'ordre del full de treball podeu utilitzar els botons de control que es mostren a la part dreta del full de treball quan passeu per sobre del camp d'entrada amb el cursor del ratolí. Hi ha tres accions bàsiques per a cada entrada: Avalua l'entrada per actualitzar el resultat dels càlculs per a l'entrada. Arrossega l'entrada per moure l'entrada a un altre lloc del full de treball actual i Elimina l'entrada per eliminar l'entrada del full de treball actual. +Els ajustaments i l'alineació del tipus de lletra de les entrades del full de treball es poden canviar utilitzant una barra d'eines a sobre del full de treball. + + Arranjament + El menú Arranjament us permet canviar alguns ajustaments de l'aparença del vostre full de càlcul actual. + + + Escriure usant &latex; + + Aquest ajustament canvia la manera en què es presentaran els resultats. Si s'activa, el resultat passarà a través del sistema &latex;, per produir fórmules visualment atractives. Per exemple, 3*x^2*sqrt(2)*x+2/3 es convertirà en + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Ressaltat de sintaxi + + El ressaltat de sintaxi augmenta la llegibilitat del codi, ressaltant les paraules clau, o tanques coincidents en colors diferents. + + + + Compleció + + Quan aquesta opció està activada, el &cantor; mostrarà les possibles complecions per a l'ordre que esteu escrivint quan premeu la tecla . Si només hi ha una opció, s'inserirà la resta de l'ordre. + + + + Números de línia + + Aquest ajustament controla si les diferents expressions han de tenir un número al davant. Això us permetrà recuperar més resultats -en Maxima, per exemple, això es fa amb l'ordre %O1. + + + + Anima el full de treball + + Aquest ajustament controla si s'utilitzaran les diferents animacions per a ressaltar els canvis en un full de treball. + + + + + + + +Els diàlegs de l'assistent +Hi ha diversos diàlegs d'assistent implementats al &cantor; per alleujar algunes de les operacions bàsiques. +Es pot accedir a aquests diàlegs utilitzant els elements del menú principal. Cada dorsal té els seus propis diàlegs d'assistent. + +El diàleg «Crea una matriu» + + Captura de pantalla del diàleg «Creació d'una matriu» del &cantor; + + + + + + Captura de pantalla del diàleg «Creació d'una matriu» del &cantor; + + + +Aquest diàleg es pot utilitzar per a matrius d'entrada. Podeu definir les dimensions de la matriu i els seus elements. +És possible navegar entre les cel·les ràpidament durant l'entrada utilitzant la tecla . + + +El diàleg d'operació amb matrius + + Captura de pantalla del diàleg «Entrada d'una matriu» del &cantor; + + + + + + Captura de pantalla del diàleg «Entrada d'una matriu» del &cantor; + + + +Aquest diàleg permet introduir el nom de la matriu per a calcular els seus vectors propis (autovectors), els valors propis (autovalors) o invertits de la matriu. El valor per omissió (%) s'utilitza per a referir-se al resultat anterior de càlcul o d'entrada de dades. + + +El diàleg «Diferenciació» + + Captura de pantalla del diàleg «Diferenciació» del &cantor; + + + + + + Captura de pantalla del diàleg «Diferenciació» del &cantor; + + + +Aquest diàleg permet introduir l'expressió de la funció a diferenciar, el nom de la variable i l'ordre de la derivada. + + +El diàleg «Integració» + + Captura de pantalla del diàleg «Integració» del &cantor; + + + + + + Captura de pantalla del diàleg «Integració» del &cantor; + + + +Aquest diàleg permet introduir l'expressió de la funció a integrar, el nom de la variable i els límits d'integració (per a la integral definida). + + +El diàleg «Resol equacions» + + Captura de pantalla del diàleg «Resol equacions» del &cantor; + + + + + + Captura de pantalla del diàleg «Resol equacions» del &cantor; + + + +Aquest diàleg permet introduir equacions a resoldre (cada equació en una línia separada) i les variables a determinar (separades per la coma). + + +El diàleg «Importa un paquet» + + Captura de pantalla del diàleg «Importa un paquet» del &cantor; + + + + + + Captura de pantalla del diàleg «Importa un paquet» del &cantor; + + + +Aquest diàleg permet introduir el nom del paquet a importar (&pex;, numpy per a Python). + + +El diàleg «Gràfic» + + Captura de pantalla del diàleg «Gràfic» del &cantor; (pestanya Funcions) + + + + + + Captura de pantalla del diàleg «Gràfic» del &cantor; (pestanya Funcions) + + + +Les opcions d'aquest diàleg se separen en dos grups utilitzant pestanyes. La pestanya Funcions permet introduir funcions al gràfic. +Per introduir una nova funció, feu clic a Afegeix. Feu doble clic a la cel·la Títol i introduïu el títol, llavors feu doble clic a la cel·la Expressió i introduïu l'expressió de la funció. + + Captura de pantalla del diàleg «Gràfic» del &cantor; (pestanya Opcions) + + + + + + Captura de pantalla del diàleg «Gràfic» del &cantor; (pestanya Opcions) + + + +La pestanya Opcions s'utilitza per a definir opcions del gràfic i la llegenda. Podreu afinar gairebé totes les opcions del gràfic per obtenir un aspecte agradable de la vostra figura. + + +El diàleg «Gràfic en 2D» + + Captura de pantalla del diàleg «Gràfic en 2D» del &cantor; + + + + + + Captura de pantalla del diàleg «Gràfic en 2D» del &cantor; + + + +Aquest diàleg permet introduir l'expressió de la funció, la seva variable i els límits per aquesta variable. + + +El diàleg «Gràfic en 3D» + + Captura de pantalla del diàleg «Gràfic en 3D» del &cantor; + + + + + + Captura de pantalla del diàleg «Gràfic en 3D» del &cantor; + + + +Aquest diàleg permet introduir l'expressió de la funció, les seves variables i els límits per a cada variable. + + + + + +Referència d'ordres + + +La finestra principal del &cantor; + +El &cantor; té els elements del menú comuns del &kde;, per obtenir més informació llegiu el capítol Menú dels fonaments del &kde;. + +A continuació es llisten els elements de menú addicionals o especials al &cantor;. Recordeu que alguns menús es mostren només pels dorsals que tenen les implementacions corresponents. + + +El menú Fitxer + + + + &Ctrl;N Fitxer Nou +Crea un nou full de treball amb el dorsal per omissió. + + +Fitxer Nou Dorsal +Crea un nou full de treball amb el dorsal escollit. + + +Fitxer Descarrega fulls de treball d'exemple +Obre el diàleg per descarregar exemples enviats per altres usuaris del &cantor; amb Obtén novetats candents (GetHotNewStuff). + + +Fitxer Obre un exemple +Obre el diàleg per escollir un exemple a carregar. Els exemples s'han de descarregar abans amb Fitxer Descarrega fulls de treball d'exemple. + + +Fitxer Desa com a text net +Permet desar el full de treball actual com un document de text sense format. + + +Fitxer Exporta a LaTeX +Permet desar el full de treball actual com un document de &latex;. + + +Fitxer Publica el full de treball +Obre el diàleg per publicar el vostre full de treball actual i posar-lo a disposició d'altres usuaris del &cantor; a través de Obtén novetats candents (GetHotNewStuff). + + +Fitxer Executa un script +Permet carregar i executar els scripts de procés per lots per al dorsal actual. + + + + + + + +El menú Visualitza + + + +&Ctrl;+ VisualitzaApropa +Apropa el full de treball actual en un 10%. + + + &Ctrl;- Visualitza Allunya +Allunya el full de treball actual en un 10%. + + +Visualitza Mostra l'editor de scripts +Obre la finestra de l'editor de scripts de procés per lots per al dorsal actual. + + +Visualitza Plafons Ajuda +Alterna la visibilitat de la pestanya Ajuda a la barra lateral. + + +Visualitza Plafons Gestor de variables +Alterna la visibilitat de la pestanya Gestor de variables a la barra lateral. + + + + + + +El menú Full de treball + + + +Full de treball Avalua el full de treball +Activa l'avaluació de tot el full de treball. + + + &Maj;Retorn Full de treball Avalua l'entrada +Activa l'avaluació de l'entrada actual. + + + &Ctrl;Retorn Full de treball Insereix una entrada d'ordre +Insereix una nova entrada d'ordre a sota de la posició actual del cursor. + + +Full de treball Insereix una entrada de text +Insereix una nova entrada de text a sota de la posició actual del cursor. + + +Full de treball Insereix una entrada de Latex +Insereix una entrada de latex a sota de la posició actual del cursor. + + +Full de treball Insereix un salt de pàgina +Insereix el salt de pàgina sota de la posició actual del cursor. + + + &Maj;Supr Full de treball Elimina l'entrada actual +Elimina l'entrada actual del full de treball. + + + + + + +El menú Àlgebra lineal + + + +Àlgebra lineal Crea una matriu +Obre el diàleg assistent «Creació d'una matriu». + + +Àlgebra lineal Calcula autovalors +Obre el diàleg assistent «Introducció del nom de la matriu» per a calcular els seus valors propis i les dimensions de les multiplicitats dels valors propis en l'ordre corresponent. + + +Àlgebra lineal Calcula autovectors +Obre el diàleg assistent «Introducció del nom de la matriu» per a calcular els seus valors propis, dimensions de les multiplicitats dels valors propis i els vectors propis en l'ordre corresponent. + + +Àlgebra lineal Inverteix una matriu +Obre el diàleg assistent «Introducció del nom de la matriu» per a trobar la inversa de la matriu. + + + + + + +El menú Calcula + + + +Calcula Deriva +Obre el diàleg «Paràmetres de la diferenciació». + + +Calcula Integra +Obre el diàleg «Paràmetres de la integració». + + +Calcula Resol equacions +Obre el diàleg «Introducció de paràmetres» per a resoldre equacions lineals i no lineals. + + + + + + +El menú Paquet + + + +Paquet Importa un paquet +Obre el diàleg «Importació d'un paquet». + + + + + + +El menú Gràfic + + + +Gràfic Gràfic +Obre el diàleg «Paràmetres del gràfic». + + +Gràfic Gràfic en 2D +Obre el diàleg «Paràmetres del gràfic». + + +Gràfic Gràfic en 3D +Obre el diàleg «Paràmetres del gràfic». + + + + + + +Els menús Arranjament i Ajuda +El &cantor; té la configuració comuna al &kde; i els elements del menú Arranjament i Ajuda, per obtenir més informació llegiu les seccions sobre El menú Arranjament i El menú Ajuda dels fonaments del &kde;. + + + + + + + +Preguntes i respostes + + + + L'element de menú Compon utilitzant el LaTeX no està disponible. + No tots els dorsals suporten totes les opcions. La versió actual suporta la sortida &latex; per als dorsals Maxima, Qalculate! i Sage. + + + Tinc instal·lats Sage/Maxima o altres CAS admesos, però no apareix el dorsal corresponent. + + Una possible explicació és que el &cantor; no detecta correctament la ubicació. Aneu al diàleg ArranjamentConfigura el &cantor;... i canvieu el Camí a l'aplicació adequada sobre la pàgina del dorsal. + + + + Quin nom tan peculiar. Què té a veure amb les matemàtiques? + El &cantor; deu el seu nom al matemàtic alemany Georg Cantor, el creador de la teoria de conjunts. + + + + + + +Crèdits i llicència + +&cantor; +Copyright del programa 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Copyright de la documentació © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Traductor/Revisor de la documentació: &credits.Antoni.Bella; +&underFDL; &underGPL; + +&documentation.index; + + + diff --git a/po/ca@valencia/cantor.po b/po/ca@valencia/cantor.po new file mode 100644 index 0000000..5f27e71 --- /dev/null +++ b/po/ca@valencia/cantor.po @@ -0,0 +1,3199 @@ +# Translation of cantor.po to Catalan (Valencian) +# Copyright (C) 2009-2018 This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Orestes Mas , 2009, 2010, 2011, 2012. +# Josep Ma. Ferrer , 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Antoni Bella Pérez , 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-09 21:06+0100\n" +"Last-Translator: Josep Ma. Ferrer \n" +"Language-Team: Catalan \n" +"Language: ca@valencia\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Accelerator-Marker: &\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Orestes Mas Casals" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "orestes@tsc.upc.edu" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausa" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Inicia" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Atura" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Guarda el resultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gràfiques avançades" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Gràfic" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expressió:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opcions addicionals:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Dibuixa" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opció activa" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcula" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Deriva" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variable:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Vegades:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paquet" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importació de paquet" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paquet:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integra" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Límit inferior:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Límit superior:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integral definida" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "À&lgebra lineal" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Crea matriu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Columnes:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Files:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcula autovalors" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriu:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcula autovectors" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverteix matriu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Gràfic 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nom" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Mínim:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Màxim:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Gràfic 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1a. variable" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2a. variable" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Executa un script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Resol equacions" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Equacions:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variables:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versió recomanada: %4

    %2

    Vegeu %3 per a més informació
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Escolliu el dorsal a utilitzar:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Fes-lo el dorsal per omissió" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia és un llenguatge de programació d'alt nivell i rendiment per " +"a la computació tècnica, amb una sintaxi que és familiar per als usuaris " +"d'altres entorns de computació tècnica. Proporciona un compilador " +"sofisticat, execució en paral·lel distribuïda, precisió numèrica i una " +"extensa biblioteca de funcions matemàtiques.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Camí al Julia natiu REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integra les gràfiques en el full de treball" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Fitxer de script del Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Camí al Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Integra les gràfiques en el full de treball (inicia una sessió nova quan " +"canvia)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Format intermedi de gràfics inclosos:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" +"Llista de scripts a executar automàticament al començament de la sessió" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Error: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts a autoexecutar" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    El Lua és un llenguatge per crear scripts ràpid i lleuger, amb una " +"sintaxi de procediment simple. Hi ha diverses biblioteques en Lua dirigides " +"a les matemàtiques i la ciència.

    Aquest dorsal accepta el LuaJit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Camí a l'ordre «luajit»" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Fitxer de script del Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Camí a l'ordre «luajit»:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"El Maxima és un sistema per a la manipulació d'expressions simbòliques i " +"numèriques, incloent-hi la derivació, integració, sèries de Taylor, " +"transformades de Laplace, equacions diferencials ordinàries, sistemes " +"d'equacions lineals, polinomis, conjunts, llistes, vectors, matrius i " +"tensors. El Maxima aconsegueix resultats numèrics d'alta precisió gràcies a " +"la utilització de fraccions exactes, enters de precisió arbitrària i nombres " +"de coma flotant de precisió variable. El Màxima pot fer gràfiques de " +"funcions i dades en dues i tres dimensions. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Camí a l'executable Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Habilita la gestió de les variables" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Error: Massa */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Error: Massa /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Error: s'esperava \" abans de ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "S'està esperant el resultat del gràfic" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Fitxer de procés per lots del Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "No s'ha pogut iniciar el Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "El Maxima ha fallat. S'està reiniciant..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"El Maxima ha fallat dues vegades en poc temps. Es deixarà de reintentar " +"l'engegada." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Error - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funció" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Camí al Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integra les gràfiques en el full de treball" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Deixa que Cantor seguïsca la creació/destrucció de variables" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave és un llenguatge d'alt nivell orientat principalment al càlcul " +"numèric.
    Ofereix una línia d'ordres útil per resoldre problemes lineals " +"i no lineals numèricament, i per efectuar altres experiments numèrics " +"utilitzant un llenguatge que és altament compatible amb Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Camí a l'executable Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Fitxer script de l'Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Error de sintaxi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Camí a l'Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Fitxer de script del Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    El Python és un llenguatge de programació dinàmic especialment potent que " +"s'utilitza en una gran varietat de dominis d'aplicació. Hi ha diversos " +"paquets Python per a la programació científica.

    Aquest dorsal accepta " +"Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    El Python és un llenguatge de programació dinàmic especialment potent que " +"s'utilitza en una gran varietat de dominis d'aplicació. Hi ha diversos " +"paquets Python per a la programació científica.

    Aquest dorsal accepta " +"Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - diàleg de gràfics" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funcions" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Títol" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expressió" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Afig" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Elimina" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Neteja la llista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variable X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Estil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Línies" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punts" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punts i línies" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Quadres" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histograma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Espelmes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Punts" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Suavitzat" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Cap" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotònic" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Splines cúbics naturals" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézier (monotònic)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Interval de la funció" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Interval X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Freqüència de &mostratge" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Mida del pa&s" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opcions" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Títol del gràfic" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Etiqueta de l'eix X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Etiqueta de l'eix Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posició de la llegenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Oculta la llegenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Superior esquerra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Superior dreta" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Inferior esquerra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Inferior dreta" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Sota" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Exterior" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostra la graella" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostra la vora completa" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Utilitza colors" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostra inclosa" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Escala X logarítmica" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Escala Y logarítmica" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opcions de fitxer" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Guarda el gràfic a un fitxer" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipus de fitxer" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detecta'l pel nom de fitxer" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"El Qalculate! no és un programa que imita el funcionament de la calculadora " +"més barata. El Qalculate! pretén treure profit de la potència, flexibilitat " +"i superior interfície dels ordinadors moderns. El centre d'atenció de " +"Qalculate! és la introducció d'expressions. En lloc d'introduir cada nombre " +"d'una expressió matemàtica per separat, podeu escriure directament " +"l'expressió completa i modificar-la més avant. La interpretació de les " +"expressions és flexible i tolerant a fallades, i si mai vos equivoqueu el " +"Qalculate! vos ho farà saber. Tanmateix, les expressions no resolubles en la " +"seua totalitat no són considerats errors. El Qalculate! les simplificarà " +"tant com puga i respondrà amb una expressió. A més de nombres i operadors " +"aritmètics, una expressió pot contindre qualsevol combinació de variables, " +"unitats i funcions." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Si cal convertir les unitats automàticament, i com. Si és cert, converteix-" +"les a les unitats del SI més adients (el mínim nombre d'unitats)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unitats angulars per omissió en les funcions trigonomètriques." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "La base dels nombres interpretats i avaluats." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" +"Especifica si el resultat de l'avaluació se simplificarà o factoritzarà." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Especifica si els nombres racionals es mostraran amb decimals, com a " +"fracció, o alguna cosa intermedi." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mostra que la sèrie de dígits d'un número continua indefinidament utilitzant " +"tres punts en lloc d'arrodonir-lo (p. ex.: 2/3 es mostra com 0,666666... en " +"lloc de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Utilitza tots els prefixos decimals del SI. Si és fals, NO s'utilitzaran " +"prefixos de forma automàtica si aquests no són múltiples de mil (centi, " +"deci, deca, hecto)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Si és cert, s'utilitzaran exponents negatius en lloc de quocients (p. ex.: 5/" +"x^2 esdevindrà 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Presentació numèrica." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Si és cert, les gràfiques es mostraran dins del full de treball. Altrament " +"apareixeran en una finestra separada." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Si s'han d'usar o no colors a les gràfiques." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Si s'ha de dibuixar o no una graella." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Si s'han de dibuixar o no totes les vores al voltant de la gràfica." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Amplària de les línies, en píxels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Nombre de passos d'interpolació que s'usaran en fer les gràfiques." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Mode de suavitzat de les gràfiques." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Estil de les gràfiques." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Posició de la llegenda a les gràfiques." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "El Qalculate informa que no pot imprimir. Teniu instal·lat el gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "falta %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 ha de ser un nombre." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 ha de ser un enter." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 ha de ser un booleà." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Opció invàlida per a %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "s'han trobat múltiples expressions en una ordre plot (%1 i %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERROR" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "AVÍS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "No existeix cap funció, variable o unitat amb aquest nom." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funció: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interfície de creació de gràfiques" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Dibuixa la gràfica d'una o més funcions, incloses o bé en una finestra " +"separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expressió" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opció" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "enter" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booleà" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "nombre" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "omissió: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "El nom de la funció" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etiqueta del títol" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Etiqueta de l'eix X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Etiqueta de l'eix Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Imatge on guardar la gràfica. Si ho deixeu buit, mostrarà la gràfica en una " +"finestra de la pantalla. Si «inline=true» es mostrarà la imatge sense tindre " +"en compte aquesta opció." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"El tipus d'imatge a guardar. Pot ser «auto», «png», «ps», «eps», «latex», " +"«svg» o «fig»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Establit a «vertader» per gràfiques en colors, i a «fals» per " +"monocromàtiques." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Valor mínim de l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Valor màxim de l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Si cal emprar o no una escala logarítmica per l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Si cal emprar o no una escala logarítmica per l'eix Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Base logarítmica per l'eix X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Base logarítmica per l'eix Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Si s'ha de mostrar o no la graella de coordenades." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Si la gràfica ha d'estar totalment envoltada per vores (no només els eixos)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Amplària de les línies." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"On s'ha d'ubicar la llegenda de la gràfica. Ha de ser Cap, Superior " +"esquerra, superior dreta, Inferior esquerra, Inferior dreta, Sota o Exterior." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Suavitzat de la gràfica. Ha de ser «Cap», «Únic», «Csplines», «Bézier» o " +"«Sbézier»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"L'estil de la gràfica. Pot ser «línies», «rodones», «línies i punts», " +"«quadres», «histograma», «escala», «espelmes» o «punts»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Usa una escala a l'eix X secundari." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Usa una escala a l'eix Y secundari." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Si la gràfica s'ha de visualitzar inclosa, en lloc d'una finestra separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Distància entre dos punts d'interpolació. Vegeu també «escala»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Nombre de punts d'interpolació. Vegeu també «escala»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "El nom de la variable X. Cal que siga una variable desconeguda" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Guarda variables a un fitxer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Guarda totes les variables definides actualment en un fitxer. Podeu carregar-" +"lo més avant amb %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fitxer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fitxer: el fitxer on s'ha de guardar." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Carrega variables des d'un fitxer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Carrega variables d'un fitxer que ha creat prèviament l'usuari %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fitxer: el fitxer a carregar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "General" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numèrica:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Format de les fraccions:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exacte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fraccionari" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combinat" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Presentació numèrica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pur" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Científic" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisió" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indica les sèries infinites:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Habilitat" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usa tots els prefixos del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usa exponents negatius:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Avalua" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Converteix a les millors unitats del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unitat dels angles:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radians" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graus" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Graus centesimals" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Mode d'estructuració:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplifica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factoritza" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Gràfic" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Mostra les gràfiques incloses:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Gràfiques acolorides:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostra la graella:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostra les vores completes:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Amplària de les línies:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Freqüència de mostratge:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Mode de suavitzat:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Splines cúbics naturals" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Estil del gràfic:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posició de la llegenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"«R» és un llenguatge i un entorn per a computació i gràfics estadístics, " +"similar al llenguatge i entorn «S».
    Ofereix una àmplia varietat de " +"tècniques estadístiques (modelatge lineal i no lineal, tests estadístics " +"clàssics, anàlisi de sèries temporals, classificació, clustering...) i " +"gràfiques, i és altament extensible. El llenguatge S és sovint el vehicle " +"escollit per a la recerca en metodologia estadística, i R ofereix una via de " +"Codi obert per participar en aquesta activitat." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "S'ha produït un error en obrir el fitxer %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Fitxer de script del R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "S'ha produït un error en analitzar l'ordre" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Feu doble clic per obrir el diàleg de selecció de fitxer" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Fitxers font de R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"«Sage» és un programari matemàtic lliure sota la llicència GPL.
    Combina " +"la potència de multitud d'aplicacions de codi obert existents en una " +"interfície comuna basada en Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Camí a l'executable Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultat de %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"L'última eixida ha estat: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Fitxer de script del Python (*.py);;Fitxer de script del Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"No s'admet la versió %1.%2 del Sage. Actualitzeu la instal·lació a les " +"versions acceptades per fer que funcione amb el Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "El procés Sage ha fallat mentre s'avaluava aquesta expressió" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "El procés Sage ha fallat" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "El procés Sage ha fallat mentre s'avaluava aquesta expressió" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "El procés Sage ha fallat" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "No s'ha pogut iniciar el Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Camí al Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    L'Scilab és un programari lliure multiplataforma de càlcul numèric, i un " +"llenguatge de programació d'alt nivell orientat a la manipulació de nombres." +"

    L'Scilab es distribueix sota una llicència CeCILL (compatible amb la GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Camí a l'ordre scilab-adv-cli (Avís: La versió de Scilab ha de millorar o " +"funcionar igual que la versió 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"::Fitxer de script de l'Scilab (*.sce);;Fitxer de funció de l'Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Camí al programa scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Descarrega fulls de treball d'exemple" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Obri un exemple" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Vés al full de treball anterior" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Vés al full de treball següent" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Full de treball del Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Obri un fitxer" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    No s'ha trobat cap dorsal

    \n" +"
    Podeu provar de:\n" +"
    • Canviar l'arranjament al diàleg de configuració;
    • " +"
    • Instal·lar els paquets del programa següent:
    • %2
    " +msgstr[1] "" +"

    No s'ha trobat cap dorsal

    \n" +"
    Podeu provar de:\n" +"
    • Canviar l'arranjament al diàleg de configuració;
    • " +"
    • Instal·lar els paquets d'algun dels programes següents:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Error" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sessió %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "No s'ha pogut trobar la Part del Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Hi ha diversos fulls de treball oberts sense guardar. Els voleu tancar?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Tanca el Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "El projecte actual s'ha modificat. El voleu guardar?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Guarda el projecte" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "El dorsal que s'usarà per omissió" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Fes per omissió la composició tipogràfica" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Aplica per omissió el ressaltat de sintaxi" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Habilita per omissió la compleció" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Habilita per omissió la numeració de les expressions" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Anima per omissió els canvis en el full de treball" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Reavalua automàticament les entrades a sota de l'actual" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Demana confirmació en reiniciar el dorsal" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "El dorsal %1 no està instal·lat" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Hi ha alguns problemes amb el dorsal %1.\n" +"Per favor, comproveu la vostra configuració o bé instal·leu els paquets " +"necessaris.\n" +"Només podreu visualitzar aquest full de treball." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Guarda com a text net" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exporta a LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Avalua el full de treball" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Compon utilitzant el LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Ressaltat de sintaxi" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Compleció" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Números de línies" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Anima el full de treball" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reinicialitza el dorsal" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Avalua l'entrada" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Insereix una entrada d'ordre" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Insereix una entrada de text" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Insereix una entrada de Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Insereix una entrada de LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Insereix un salt de pàgina" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Insereix una imatge" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Elimina l'entrada actual" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Mostra l'ajuda de %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostra l'editor de scripts" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Mostra la compleció" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Guarda com a" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Guarda" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Es perdran totes els resultats disponibles dels càlculs. Esteu segur que " +"voleu reiniciar %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Reinicio %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrupció" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "S'està calculant..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Preparat" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Error de sessió: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicialització completa" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "S'està inicialitzant..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sense nom" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[només de lectura]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Voleu pujar el full de treball actual a un servidor web públic?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pregunta - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"El full de treball no s'ha guardat. Hauríeu de guardar-lo abans de pujar-lo." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Avís - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Aquest dorsal no admet scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Edita" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Visualitza" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Full de treball" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fitxer" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nou" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Plafons" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Arranjament" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Blanc" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Negre" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Roig fosc" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Roig" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Roig clar" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verd fosc" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verd" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verd clar" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Blau fosc" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blau" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Blau clar" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Groc fosc" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Groc" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Groc clar" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Cian fosc" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cian" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Cian clar" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta fosc" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Magenta clar" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Taronja fosc" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Taronja" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Taronja clar" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Gris fosc" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Gris" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Gris clar" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Color del fons" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Color del text" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Tipus de lletra" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Negreta" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Cursiva" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Augmenta la mida" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Disminueix la mida" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Selecciona" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "S'ha interromput" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra de cerques" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Cerca:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Següent" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Anterior" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Substitueix:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Substitueix" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Substitueix-ho &tot" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Cerca a:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Fes concordar les &majúscules" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configura la imatge" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Dretacliqueu ací per inserir una imatge" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "No s'ha pogut carregar la imatge %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Paràmetres d'imatge" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Obri" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Mida de la visualització" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Amplària" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Alçària" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Vista prèvia" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Mida d'impressió" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usa la mida de la visualització" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr " px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Obri un fitxer d'imatge" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostra el codi LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Camí a l'executable latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Camí a l'executable dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nom" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valor" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Des de:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Fins a:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Títol principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Escala d'abscisses" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Escala d'ordenades" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Títol del gràfic:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Frontal del KDE per a aplicacions matemàtiques" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Mantenidor
    Adaptació a les Qt5/KF5, dorsal de l'Scilab i el Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autor original
    Mantenidor (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Dorsal de KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Dorsal d'Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfície" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Icona del Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usa el dorsal " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documents a obrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "No s'ha pogut obrir el fitxer %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Salt de pàgina ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    cantor

    L'estil KDE de fer matemàtiques" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nom:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valor:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Afig una nova variable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Carrega variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Guarda variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Neteja les variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Esteu segur/a que voleu eliminar totes les variables?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmació - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Carrega fitxer" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Elimina el resultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"No s'ha trobat cap component d'edició de text del KDE;\n" +"per favor, comproveu la vostra instal·lació del KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor de scripts" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de scripts - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "No s'ha trobat" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "S'ha arribat al principi" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "S'ha arribat al final" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "S'ha reemplaçat %1 instància" +msgstr[1] "S'han reemplaçat %1 instàncies" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Ordres" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultats" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Errors" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Codi LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Dorsal per omissió:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Quan està habilitat, el Cantor avaluarà automàticament cada entrada al " +"dessota de l'actual." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Reavalua les entrades automàticament" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Per omissió" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Habilita la composició tipogràfica del LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Habilita el ressaltat de sintaxi" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Habilita la compleció" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Habilita la numeració de línies" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Habilita les animacions del full de treball" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostra renderitzat" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Mostra el codi" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"No s'ha pogut renderitzar el fitxer EPS. Potser necessiteu programes " +"addicionals." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "No s'ha pogut escriure al fitxer %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "No s'ha pogut escriure al fitxer." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Hi ha hagut un error en guardar el fitxer %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"En mode de només lectura el Cantor no pot garantir que l'exportació siga " +"vàlida per %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "S'ha produït un error en carregar el full d'estil latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "El fitxer seleccionat no és cap fitxer vàlid de projecte Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"No s'ha trobat el dorsal %1. No és possible l'edició ni l'execució d'entrades" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Entrada d'ordre" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Entrada de text" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Entrada de Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Entrada de LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Imatge" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Salt de pàgina" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Insereix una entrada després" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Entrada una entrada abans" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Insereix una entrada de LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Color del text..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Color" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Ressaltat de text..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Tipus de lletra" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Mida del tipus de lletra" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Negreta" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Cursiva" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Subratllat" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Barrat" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Alinea a l'es&querra" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Esquerra" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Alinea al ¢re" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centre" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Alinea a la &dreta" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Dreta" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justifica" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justificat" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Elimina l'entrada" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Arrossega l'entrada" diff --git a/po/cs/cantor.po b/po/cs/cantor.po new file mode 100644 index 0000000..729aec5 --- /dev/null +++ b/po/cs/cantor.po @@ -0,0 +1,3120 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Pavel Fric , 2010. +# Vít Pelčák , 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Tomáš Chvátal , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-08-30 14:50+0100\n" +"Last-Translator: Vit Pelcak \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Vít Pelčák, Pavel Fric, Miroslav Hrončok" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "vit@pelcak.org, pavelfric@seznam.cz, miro@hroncok.cz" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pozastavit" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Spustit" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Zastavit" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Uložit výsledek" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Pokročilé vykreslování" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Vykreslit" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Výraz:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Další volby:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "Vyk&reslit" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "S&počítat" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Derivovat" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Proměnná:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Časy:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Balíček" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importovat balíček" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Balíček:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrovat" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Spodní mez:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Horní mez:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "určitý integrál" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineární algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Vytvořit matici" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Sloupce:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Řádky:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Vypočítat vlastní hodnoty" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matice:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Vypočítat vlastní vektory" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Převrátit matici" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Vykreslit dvojrozměrně" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Proměnná" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Název" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Vykreslit trojrozměrně" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. proměnná" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. proměnná" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Spustit skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "ŘeÅ¡it rovnice" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Rovnice:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Proměnné:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Doporučená verze: %4

    %2

    Další informace naleznete na %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Vybrat podpůrnou vrstvu, která se bude používat:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Nastavit toto jako výchozí podpůrnou vrstvu" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Cesta k vlastní REPL Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Začlenit nákresy do pracovního listu" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Soubor se skriptem julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Cesta k REPL Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Začlenit grafy do pracovního listu (při změně začít nové sezení)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Chyba: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Skripty k automatickému spuštění" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Cesta k příkazu luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Soubor se skriptem Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Cesta k příkazu luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima je systémem pro zpracování symbolických a početních výrazů, počítaje " +"v to derivování, integrování, Taylorovu řadu, Laplaceovu transformaci, běžné " +"diferenciální rovnice, soustavy lineárních rovnic, mnohočleny, řady, " +"seznamy, vektory, matice a napínače. Maxima přináší vysoce přesné číselné " +"výsledky díky použití přesných zlomků, celých čísel kvůli doplňkové " +"přesnosti a čísel s pohyblivou desetinnou čárkou kvůli proměnlivé přesnosti. " +"Maxima dokáže nakreslit funkce a data ve dvou a třech rozměrech. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Cesta ke spustitelnému souboru Maximy" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Dávkový soubor Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Nelze spustit Maximu" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima spadla. Spouští se znovu..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima během krátké doby spadla již dvakrát. Pokusy o její spuštění byly " +"zastaveny" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Chyba - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkce" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Cesta k Maximě:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Začlenit grafy do pracovního listu" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave je vysokoúrovňový jazyk, určený především pro matematické " +"výpočty.
    Poskytuje pohodlné rozhraní přes příkazovou řádku pro řešení " +"lineárních a nelineárních číselných problémů a pro vykonávání jiných " +"početních experimentů užitím jazyka, který je z větší části kompatibilní a " +"Matlabem." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Cesta ke spustitelnému souboru Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Soubor se skriptem Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Chyba ve skladbě" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Cesta k Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Soubor se skriptem v Pythonu (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkce" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Název" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Výraz" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Přidat" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Odstranit" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Vymazat seznam" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Proměnná X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Styl" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Čáry" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Body" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Body a čáry" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Kroky" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Tečky" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Vyhlazování" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Žádný" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Vzorkovací frekve&nce" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Velikost k&roku" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Možnosti" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Pozice vysvětlivek" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Skrýt vysvětlivky" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Vlevo nahoře" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Vpravo nahoře" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Vlevo dole" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Vpravo dole" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Dole" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Vně" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Zobrazit mřížku" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Použít barvy" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Možnosti souborů" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Typ souboru" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Zobrazení výsledku." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "chybí: %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "CHYBA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "VAROVÁNÍ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkce: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "výraz" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "volba" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "hodnota" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "celé číslo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "binární" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "číslo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "výchozí: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "soubor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Obecné" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Desetinný" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Přesně" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Zlomkový" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Složený" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Zobrazení výsledku:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Čistý" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Vědecké" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Přesnost" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indikovat nekonečné řady:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Povoleno" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Vyhodnotit" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Jednotka úhlu:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiány" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Stupně" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradiány" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Režim strukturování:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Zjednodušit" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktorizovat" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Vykreslování" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Zobrazit mřížku:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Vzorkovací frekvence:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Styl zákresu:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Kroky" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Pozice vysvětlivek:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R je jazykem a prostředím pro statistické výpočty a křivky, který je podobný " +"jazyku a prostředí S.
    Poskytuje velkou rozmanitost statistických " +"(přímočaré a nepřímočaré modelování, klasické statistické testy, rozbor " +"časové řady, třídění, seskupování,...) a kresebných technik, a je vysoce " +"rozšiřitelný. Jazyk S je často zvoleným prostředkem při zkoumání v oblasti " +"statistické metodologie, a R poskytuje cestu, jak se s pomocí přístupu " +"otevřeného zdrojového kódu zúčastnit na této činnosti." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Při otevírání souboru %1 došlo k chybě" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Soubor se skriptem R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Chyba při načítání příkazu" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Zdrojové soubory R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage je svobodný matematický programový systém s otevřeným zdrojovým kódem " +"licencovaný pod GPL.
    Spojuje sílu mnoha stávajících balíčků s otevřeným " +"zdrojovým kódem do společného rozhraní založeného na Pythonu." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Cesta ke spustitelnému souboru Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Výsledek %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Posledním výstupem bylo: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Soubor se skriptem v pythonu (*.py);;Soubor se skriptem Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Během počítání tohoto výrazu proces Sage spadl" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Proces Sage spadl" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Během počítání tohoto výrazu byl proces Sage ukončen" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Proces Sage byl ukončen" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage nelze spustit" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Cesta k Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Soubor se skriptem v Scilab (*.sce);;Funkční soubor Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Stáhnout vzorové pracovní listy" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Otevřít příklad" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Pracovní list Cantoru (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Otevřít soubor" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nenalezena žádná podpůrná vrstva

    \n" +"
    Můžete vyzkoušet:\n" +"
    • Změnu nastavení v dialogu nastavení;
    • Instalaci " +"balíčků pro následující program:
    • %2
    " +msgstr[1] "" +"

    Nenalezena žádná podpůrná vrstva

    \n" +"
    Můžete vyzkoušet:\n" +"
    • Změnu nastavení v dialogu nastavení;
    • Instalaci " +"balíčků pro následující programy:
    • %2
    " +msgstr[2] "" +"

    Nenalezena žádná podpůrná vrstva

    \n" +"
    Můžete vyzkoušet:\n" +"
    • Změnu nastavení v dialogu nastavení;
    • Instalaci " +"balíčků pro následující programy:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Chyba" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sezení %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Nelze najít Cantor part." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Je otevřeno vícero neuložených pracovních listů. Přejete si je uzavřít?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Zavřít Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Uložit projekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Podpůrná vrstva používaná ve výchozím nastavení" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Sazbu zapnout jako výchozí" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Zvýrazňování skladby zapnout jako výchozí" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Povolit doplňování jako výchozí" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Povolit číslování výrazů jako výchozí" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automaticky přehodnotit záznamy nalézající se pod stávajícím" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Podpůrná vrstva %1 není nainstalována" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"S jádrem %1 jsou jakési potíže.\n" +"Prosím, prověřte své nastavení, nebo nainstalujte potřebné balíčky.\n" +"Budete si moci prohlédnout jen tento pracovní list." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportovat do LaTeXu" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Vyhodnotit pracovní list" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Sázet pomocí LaTeXu" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Zvýrazňování syntaxe" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Doplňování" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Čísla řádků" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Restartovat podpůrnou vrstvu" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Vyhodnotit záznam" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Vložit příkaz" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Vložit text" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Vložit položku Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Vložit zalomení stránky" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Vložit obrázek" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Odstranit současnou položku" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Zobrazit nápovědu k %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Ukázat editor skriptů" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Zobrazit doplňování" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Uložit jako" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Uložit" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Přerušit" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Počítá se..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Připraven" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Chyba sezení: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Spuštění dokončeno" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Probíhá inicializace..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Nepojmenované" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[pouze ke čtení]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Přejete si načíst současný pracovní list na veřejný server?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Otázka - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Pracovní list není uložen. Měl byste jej před načtením uložit." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Varování - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Tato podpůrná vrstva nepodporuje skripty." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Upravit" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "Po&hled" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Pracovní list" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Soubor" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nový" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panely" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "Na&stavení" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Bílá" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Černá" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Tmavě červená" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Červená" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Světle červená" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Tmavě zelená" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Zelená" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Světle zelená" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Tmavě modrá" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Modrá" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Světle modrá" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Tmavě žlutá" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Žlutá" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Světle žlutá" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Tmavě modrozelená" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Azurová" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Světle azurová" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Tmavě fuchsová" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Purpurová" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Světle purpurová" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Tmavě oranžová" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Oranžová" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Světle oranžová" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Tmavě šedá" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Šedá" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Světle šedá" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Barva pozadí" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Barva textu" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Písmo" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Tučné" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Kurzíva" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Zvětšit velikost" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Zmenšit velikost" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Vybrat" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Přerušeno" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Najít:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Následující" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Předchozí" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Nahradit:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "Nah&radit" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "N&ahradit vše" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Hledat v:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Rozlišovat velikost" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Nastavit obrázek" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Nelze načíst obrázek %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Nastavení obrázku" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Otevřít" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Velikost obrazovky" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Šířka" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Výška" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Náhled" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Velikost tisku" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automaticky)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Otevřít soubor obrázku" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Ukázat kód LaTeXu" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Cesta ke spustitelnému souboru latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Cesta ke spustitelnému souboru dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Název" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Hodnota" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Od:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Komu: " + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Hlavní název" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Název grafu:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Rozhraní KDE pro matematické aplikace" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Správce
    Qt5/KF5 port, Podpůrné vrstvy Scilab a Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Původní autor
    Správce (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Podpůrná vrstva KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Podpůrná vrstva Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Rozhraní" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Ikona aplikace Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Použít podpůrnou vrstvu " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Dokumenty k otevření" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Soubor %1 nelze otevřít" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Zalomení stránky ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Způsob, jak v KDE dělat matematiku" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Název:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Hodnota:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Přidat novou proměnnou" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Načíst proměnné" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Ukládat proměnné" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Potvrzení - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Načíst soubor" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Odstranit výsledek" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Nelze nalézt součást textový editor KDE.\n" +"Prosím, prověřte svou instalaci KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor skriptů" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor skriptů - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nenalezeno" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Příkazy" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Výsledky" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Chyby" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Kód LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Výchozí podpůrná vrstva:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Je-li povoleno, bude Cantor automaticky přehodnocovat každý záznam, který se " +"nachází pod tím stávajícím." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Automaticky přehodnotit záznamy" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Výchozí hodnoty" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Povolit LaTeXovou sazbu" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Povolit zvýrazňování syntaxe" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Povolit doplňování" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Povolit čísla řádků" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Ukázat vykreslené" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Ukázat kód" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Soubor Eps nelze zobrazit. Možná vám chybí nějaké balíčky" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Nelze zapsat do souboru %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Nelze zapsat do souboru." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Chyba při ukládání souboru %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Chyba při načítání stylopisu latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Vybraný soubor není platným souborem projektu Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Položka Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Položka LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Obrázek" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Zalomení stránky" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Vložit záznam po" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Vložit záznam před" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Vložit položku LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Barva te&xtu..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Barva" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Zvý&raznění textu..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Písmo" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Velikost &písma" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "T&učné" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kurzíva" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Podtržené" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Přeškr&tnuté" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Zarovnat &vlevo" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Vlevo" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Zarovnat &doprostřed" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Na střed" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Zarovnat &vpravo" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Vpravo" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "Do b&loku" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Do bloku" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Odstranit záznam" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Přesunout záznam" diff --git a/po/da/cantor.po b/po/da/cantor.po new file mode 100644 index 0000000..f9e64ca --- /dev/null +++ b/po/da/cantor.po @@ -0,0 +1,3344 @@ +# Translation of cantor.po into Danish +# Copyright (C) 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdeedu package. +# +# Anton Rasmussen , 2009, 2010. +# Martin Schlander , 2010, 2011, 2012, 2013, 2014, 2015, 2016. +# Jan Madsen , 2010. +# Claus Christensen , 2012. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2016-05-28 16:30+0100\n" +"Last-Translator: Martin Schlander \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Anton Rasmussen,Jan madsen,Claus Christensen" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"anton_rasmussen@yahoo.dk,jan-portugal@opensuse.org,claus_chr@webspeed.dk" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pause" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stop" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Gem resultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Avanceret plotning" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Plot" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Udtryk:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Yderligere indstillinger:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Plot" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Indstilling aktiv" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Beregn" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differentiér" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabel:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Tider: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pakke" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importér pakke" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakke:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Intregrér" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Nedre grænse:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Øvre grænse:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "bestemt integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineær algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Opret matrix" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolonner:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rækker:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Beregn egenværdier" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrix:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Beregn egenvektorer" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertér matrix" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Plot 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Navn" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Plot 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. variabel" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. variabel" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Kør script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Løs ligninger" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ligninger:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabler:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Se %3 for mere " +"information
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Vælg den backend der skal bruges:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Gør denne til standard-backend" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.python.org/2/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrér plot i arbejdsark" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "Lua script file (*.lua)" +msgid "Julia script file (*.jl)" +msgstr "Lua script-fil (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Sti til Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrér plot i arbejdsark" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Liste over scripts der skal køres automatisk ved sessionens begyndelse" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Fejl: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts i autokørsel" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua er et hurtigt og letvægt scripting-sprog, med en simpel procedural " +"syntaks. Der er adskillige biblioteker i Lua som er rettet imod matematik og " +"videnskab.

    Denne backend understøtter luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Sti til kommandoen luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua script-fil (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Sti til kommandoen luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima er et system til manipulation af symbolske og numeriske udtryk, " +"inklusiv differentiering, integrering, Taylor-rækker, Laplace-" +"transformationer, ordinære differentialligninger, systemer af lineære " +"ligninger, polynomier, mængder, lister, vektorer, matricer og tensorer. " +"Maxima giver høj præcision i numeriske resultater ved at bruge eksakte " +"brøker, vilkårligt præcise heltal og variabelt præcise tal med flydende " +"komma. Maxima kan plotte funktioner og data i to og tre dimensioner. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Sti til programmet Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Aktivér håndtering af variable" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Fejl: For mange */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Fejl: For mange /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Fejl: Forventede \" før ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima-batchfil (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Kunne ikke starte Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima brød sammen. Genstarter..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima brød sammen to gange inden for et kort tidsrum. Forsøger ikke at " +"starte igen" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Fejl - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funktion" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Sti til Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrér plot i arbejdsark" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Lad Cantor holde øje med oprettelse og fjernelse af variable" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave er et højniveausprog, der primært er tiltænkt til numeriske " +"beregninger.
    Det giver en bekvem kommandolinjegrænseflade til løsning " +"af linære og ikke-linære problemer numerisk og til at udføre andre numeriske " +"eksperimenter med brug af et sprog der oftest er kompatibelt med Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Sti til programmet Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave-scriptfil (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaksfejl" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Sti til Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python-scriptfil (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python er et bemærkelsesværdigt kraftfuldt, dynamisk programmeringssprog, " +"der bruges til mange forskellige slags programmer. Der er adskillige Python-" +"pakker til videnskabelig programmering.

    Denne backend understøtter " +"Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python er et bemærkelsesværdigt kraftfuldt, dynamisk programmeringssprog, " +"der bruges til mange forskellige slags programmer. Der er adskillige Python-" +"pakker til videnskabelig programmering.

    Denne backend understøtter " +"Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - plotdialog" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funktioner" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Titel" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Udtryk" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Tilføj" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Fjern" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Ryd liste" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "x-variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkter" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkter og linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Bokse" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Trin" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Candlesticks" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Prikker" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Udglatning" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ingen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monoton" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturlige kubiske splines" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monoton)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Værdimængde" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Definitionsmængde" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Sa&mplingfrekvens" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Skridts&tørrelse" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Tilvalg" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Plottets titel" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Etiket til x-aksen" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Etiket til y-aksen" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Signaturforklaringens position" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Skjul signaturforklaring" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Øverst til venstre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Øverst til højre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Nederst til venstre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Nederst til højre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Under" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Udenfor" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Vis gitter" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Vis fuld ramme" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Brug farver" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Vis i arbejdsarket" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmisk x-skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmisk y-skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Tilvalg for filer" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Gem plot i fil" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Filtype" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Udled af filnavn" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! er ikke en sædvanlig softwaregengivelse af den billigste " +"lommeregner, der findes. Qalculate! stræber imod at gøre fuld brug af en " +"moderne computers overlegne brugerflade, styrke og fleksibilitet. Det " +"centrale element i Qalculate! er udtrykseditoren. I stedet for at angive " +"hvert tal i et matematisk udtryk for sig kan du skrive hele udtrykket " +"direkte og senere ændre det. Fortolkningen af udtryk er fleksibel og " +"fejltolerant, og hvis du alligevel gør noget forkert, så fortæller " +"Qalculate! dig det. Udtryk, som ikke kan beregnes helt er dog ikke fejl. " +"Qalculate! vil forenkle dem så meget som muligt og svare med et udtryk. Ud " +"over tal og regneoperatorer kan udtryk indeholde enhver kombination af " +"variable, enheder og funktioner." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Om enheder skal konverteres automatisk og hvordan. Hvis true, så konverteres " +"der til den bedst egnede SI-enhed (den med de færreste enheder)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Standard for vinkelenhed til trigonometriske funktioner." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Base for fortolkede og beregnede tal." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Om beregnede resultater skal forenkles eller faktoriseres." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Om rationelle tal skal vises med decimaler, som en brøk eller en mellemting." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Vis at et tals sekvens af decimaler gentages periodisk med tre prikker i " +"stedet for afrunding (fx vises 2/3 som 0.666666... i stedet for 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Brug alle dekadiske SI-præfikser. Hvis false, så bliver præfikser, som ikke " +"er et mulitplum af tusind (centi, deci, deca og hekto) ikke anvendt " +"automatisk." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Hvis true, så bruges negative eksponenter i stedet for division (fx bliver 5/" +"x^2 til 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numerisk visning." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Hvis true, så vil plots blive vist inde i arbejdsarket. Hvis ikke vil de " +"dukke op i et særskilt vindue." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Om farver skal bruges i plots." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Om der skal plottes et gitter." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Om der skal tegnes en fuld ramme omkring plottet." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Bredde af linjer i pixels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Antal interpolationsskridt, der skal bruges ved plotning." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Udglatningstilstand for plots." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Plotstil." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Position af signaturforklaringer i plots." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate siger, at den ikke kan udskrive. Er gnuplot installeret?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "mangler %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 skal være et tal." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 skal være et helt tal." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 skal være en boolesk værdi." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "ugyldigt tilvalg til %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "fandt flere udtryk i en plotkommando (%1 og %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "FEJL" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ADVARSEL" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Der findes ingen funktion, variabel eller enhed med det angivne navn." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funktion: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Brugerflade til plotning" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Plotter en eller flere funktioner enten i arbejdsarket eller i et separat " +"vindue." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "udtryk" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "tilvalg" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "værdi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "helt tal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolesk værdi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "tal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "standard: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Funktionens navn" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etiket til titel" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Etiket til x-akse" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Etiket til y-akse" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Billede, som plottet skal gemmes som. Hvis den er tom, så vises plottet i et " +"vindue på skærmen. Hvis inline=true, så vises billedet uanset, hvad der er " +"valgt her." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Den filtype, som billedet gemmes som. En af følgende: auto, png, ps, eps, " +"latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Sæt til true for at lave farvede plots, false for sort-hvide plots." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Mindste værdi på x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Største værdi på x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Om x-aksen skal have en logaritmisk skala." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Om y-aksen skal have en logaritmisk skala." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Basen for den logaritmiske skala på x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Basen for den logaritmiske skala på y-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Om der skal vises et gitter i plottet." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Om plottet skal omgives af en ramme på alle sider (ikke blot akser)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Linjebredden." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Hvor signaturforklaringen skal placeres i plottet. En af følgende: none, " +"top_left, top_right, bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Udglatning af plot. En af følgende: none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Plotstil. En af følgende: lines, points, points_lines, boxes, histogram, " +"steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Anvend skala på den anden x-akse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Anvend skala på den anden y-akse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Om plottet skal tegnes i arbejdsarket i stedet for i et nyt vindue." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Afstand imellem to interpolationspunkter. Se også steps." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Antallet af interpolationspunkter. Se også step." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Navnet på variablen på x-aksen. Dette skal være en ukendt variabel" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Gem variable til en fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Gem alle de variable, som er definerede i øjeblikket i en fil. De kan " +"genindlæses med %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fil: navnet på filen, der skal gemmes til" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Indlæs variabler fra en fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Indlæs variabler fra en fil, som tidligere er blevet oprettet med %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fil: den fil der skal indlæses" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Generelt" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Talbase:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Format for brøker:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Eksakt" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Brøk" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombineret" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Numerisk visning:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Ren" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Videnskabelig" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Præcision" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indikér uendelige rækker:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Aktiveret" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Brug alle SI-præfikser:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Brug negative eksponenter:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Beregn" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Omregn til bedste SI-enhed:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Vinkelenhed:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Grader" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Nygrader" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Struktureringstilstand:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Forenkl" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktorisér" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Plotning" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Vis plots i arbejdsarket:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Farvede plots:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Vis gitter:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Vis hele rammer:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Linjebredde:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Samplingfrekvens:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Udglatningstilstand:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naturlige kubiske splines" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Plotstil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Trin" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Placering af signaturforklaring:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R er et sprog og miljø til statistisk beregning og grafik, der minder om " +"sproget og miljøet S.
    Det tilbyder en bred vifte af statistiske (lineær " +"og ikke-lineær modellering, klassiske statistiske test, analyse af " +"tidsserier, klassificering, clustering, ...) og grafiske teknikker og kan i " +"høj grad udvides. S-sproget er ofte det valgte værktøj indenfor forskning i " +"statistisk metodologi. R giver en open source-måde at deltage i den " +"aktivitet." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Fejl under åbning af filen %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R script-fil (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Fejl under fortolkning af kommando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dobbeltklik for at åbne filvælgerdialogen" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-kildefiler (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage er et system af frit open source matematik-software licenseret under " +"GPL.
    Det kombinerer styrkerne fra mange eksisterende open source-pakker " +"i et fælles Python-baseret interface." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sti til programmet Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultat af %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Det sidste output var: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python-script-fil (*.py);;Sage-script-fil (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage-processen brød sammen under evaluering af dette udtryk" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage-processen brød sammen" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage-processen afsluttede under evaluering af dette udtryk" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage-processen afsluttede" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Kunne ikke starte Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sti til Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.5 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Advarsel: denne backend virker kun med Scilab version 5.5 og " +"nyere

    Scilab er en fri software-pakke til numeriske beregninger på " +"mange platforme og et højniveau-programmeringssprog orienteret mod numerisk " +"programmering.

    Scilab distribueres under CeCILL-licensen (som er " +"kompatibel med GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Sti til kommandoen scilab-adv-cli (Advarsel: Scilab skal være version 5.4 " +"eller nyere)" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "Scilab script file (*.sce);;Scilab function file (*.sci)" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "Scilab-scriptfil (*.sce);;Scilab-funktionsfil (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Sti til kommandoen scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Download eksempelark" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Å&bn eksempel" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor-arbejdsark" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Åbn fil" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Ingen backend fundet

    \n" +"
    Du kan prøve at:\n" +"
    • Ændre indstillingerne i indstillingsdialogen;
    • " +"
    • Installere pakker for følgende program:
    • %2
    " +msgstr[1] "" +"

    Ingen backend fundet

    \n" +"
    Du kan prøve at:\n" +"
    • Ændre indstillingerne i indstillingsdialogen;
    • " +"
    • Installere pakker for et af de følgende programmer:
    • %2
    " +"
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Fejl" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Session %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Kunne ikke finde Cantor Part." + +#: cantor.cpp:423 +#, fuzzy, kde-format +#| msgid "Multiple unsaved Worksheets are opened do want to close?" +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Flere ikke gemte arbejdsark er åbne. Vil du lukke?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Luk Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Det aktuelle projekt er blevet ændret. Vil du gemme det?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Gem projekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Den backend der bruges som standard" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Aktivér som standard sætning af tekst" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Brug som standard syntaksfremhævning" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Aktivér fuldførelse som standard" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Aktivér nummerering af udtryk som standard" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animér ændringer i arbejdsarket som standard" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Genevaluér automatisk indgangene under den aktuelle" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Backenden %1 er ikke installeret" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Der er problemer med backenden %1.\n" +"Kontrollér din opsætning eller installér de nødvendige pakker.\n" +"Du vil kun kunne se dette arbejdsark." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Gem klartekst" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Eksportér til LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Evaluér arbejdsark" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Sæt tekst med LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaksfremhævning" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Fuldførelse" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Linjenumre" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animér arbejdsark" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Genstart backend" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Evaluér felt" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Indsæt kommandofelt" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Indsæt tekstfelt" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Indsæt kommandofelt" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Indsæt LaTeX-input" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Indsæt sideskift" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Indsæt billede" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Fjern dette felt" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Vis hjælp til %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Vis script-editor" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Vis fuldførelse" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Gem som" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Gem" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Genstart backend" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Afbryd" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Beregner..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Klar" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sessionsfejl: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initialisering færdig" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Initialiserer session" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Unavngivet" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Vil du uploade dit nuværende arbejdsark til offentlig web-server?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Spørgsmål - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Arbejdsarket er ikke gemt. Du skal gemme det før upload." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Advarsel - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Denne backend understøtter ikke scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Redigér" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vis" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Arbejdsark" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fil" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Ny" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneler" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Indstillinger" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Klar" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "Definitionsmængde" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "Definitionsmængde" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "Definitionsmængde" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Tekst&farve..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Skrifttype" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Fed" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Kursiv" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Afbrudt" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Søgelinje" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Find:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Næste" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Forrige" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Erstat:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Erstat" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Erstat &alle" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Søg i:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Versalfølsom" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Indstil billede" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Højreklik her for at indsætte billede" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Kan ikke indlæse billedet %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Billedindstillinger" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Åbn" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Visningsstørrelse" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Bredde" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Højde" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Forrige" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Udskriftstørrelse" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Brug visningsstørrelse" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Åbn billedfil" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Vis LaTeX-kode" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Sti til programmet latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Sti til programmet dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Navn" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Værdi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Fra:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Til:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Hovedtitel" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Skala på X-aksen" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Skala på Y-aksen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Plot-titel:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE-brugerflade til matematiske programmer" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Vedligeholder
    Qt5/KF5-portering, backends til Scilab og Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Oprindelig ophavsmand
    Vedligeholder (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra-backend" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave-backend" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Brugerflade" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor-ikon" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Brug backend " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Dokumenter der skal åbnes." + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Fejl under åbning af filen %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Sideskift ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE's måde at lave matematik" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Navn:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Værdi:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Tilføj ny variabel" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Indlæs variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Gem variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Ryd variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Vil du virkelig fjerne alle variabler?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Bekræftelse - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Indlæs fil" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Fjern resultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"En tekst-editor-komponent til KDE kunne ikke findes;\n" +"tjek venligst din KDE-installation." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Script-editor" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Script-editor - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Ikke fundet" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Nået begyndelsen" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Nået slutningen" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Erstattede %1 forekomst" +msgstr[1] "Erstattede %1 forekomster" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Kommandoer" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultater" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Fejl" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX-kode" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Standard-backend:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Hvis aktiveret vil Cantor automatisk evaluere hvert felt under det aktuelle." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Genevaluér indgange automatisk" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Standardindstillinger" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Aktivér tekstsætning med LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Aktivér syntaksfremhævning" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Aktivér fuldførelse" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Aktivér linjenumre" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Aktivér animationer i arbejdsark" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Vis renderet" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Vis kode" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Kan ikke vise EPS-fil. Du har muligvis brug for yderligere pakker" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Kan ikke skrive filen %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Kan ikke skrive filen." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Fejl ved gemning af filen %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Fejl ved indlæsning af latex.xsl-stilark" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Kommandofelt" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Tekstfelt" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Indsæt kommandofelt" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX-felt" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Billede" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sideskift" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Indsæt tekstfelt" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Text Entry Before" +msgid "Insert Entry Before" +msgstr "Tekstindgang før" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Indsæt LaTeX-felt" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Tekst&farve..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Farve" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Tekstfrem&hævning..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Skrifttype" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Skrift&størrelse" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Fed" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursiv" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Understreg" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Gennemstreg" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Venstrejusteret" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Venstre" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Centreret" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centrér" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Højrejusteret" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Højre" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justér" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justér" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Fjern felt" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Træk felt" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Den backend, der blev brugt til at oprette denne fil, er ikke " +#~ "installeret. Den skal bruge %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Udgiv arbejdsark" + +#~ msgid "Waiting for Image..." +#~ msgstr "Venter på billede..." + +#~ msgid "Insert" +#~ msgstr "Indsæt" + +#~ msgid "Insert Before" +#~ msgstr "Indsæt før" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "kan ikke åbne filen %1: Ukendt MIME-type" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX-dokument" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor-arbejdsark" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server til Cantors R-backend" + +#~ msgid "R Server" +#~ msgstr "R Server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Brug: saveVariables fil" + +#~ msgid "Saving failed." +#~ msgstr "Gemning mislykkedes." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Brug: loadVariables fil" + +#~ msgid "Loading failed." +#~ msgstr "Indlæsning mislykkedes." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Sti til kommandoen python:" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor-server til R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Vil du også eksportere billederne?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Sti til kommandoen python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Aktivér håndtering af variable" + +#~ msgid "Could not start the server." +#~ msgstr "Kunne ikke starte serveren." + +#~ msgid "Pause Animation" +#~ msgstr "Sæt animation på pause" + +#~ msgid "Start Animation" +#~ msgstr "Start animation" + +#~ msgid "Restart Animation" +#~ msgstr "Genstart animation" + +#~ msgid "Append Command Entry" +#~ msgstr "Tilføj kommandofelt til sidst" + +#~ msgid "Append Text Entry" +#~ msgstr "Tilføj tekstfelt til sidst" + +#~ msgid "Append Latex Entry" +#~ msgstr "Indsæt LaTeX-input til sidst" + +#~ msgid "Append Image" +#~ msgstr "Indsæt billede til sidst" + +#~ msgid "Append Page Break" +#~ msgstr "Indsæt sideskift til sidst" + +#~ msgid "Other" +#~ msgstr "Andet" + +#~ msgid "And %1 more..." +#~ msgstr "Og %1 mere..." + +#~ msgid "Main Toolbar" +#~ msgstr "Hovedværktøjslinje" + +#~ msgid "Completion Style:" +#~ msgstr "Fuldførelsesstil:" + +#~ msgid "Popup" +#~ msgstr "Pop-op" + +#~ msgid "The style used for Completion" +#~ msgstr "Stil der bruges til fuldførelse" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Sti til programmet Sage" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Indsæt kommandoindgang før" + +#~ msgid "Command Entry Before" +#~ msgstr "Kommandoindgang før" + +#~ msgid "Help" +#~ msgstr "Hjælp" + +#~ msgid "Show Help Panel" +#~ msgstr "Vis hjælpepanel" + +#~ msgid "Uploading successful" +#~ msgstr "Upload gennemført" + +#~ msgid "Error uploading File %1" +#~ msgstr "Fejl under upload af filen %1" diff --git a/po/de/cantor.po b/po/de/cantor.po new file mode 100644 index 0000000..28b9b44 --- /dev/null +++ b/po/de/cantor.po @@ -0,0 +1,3360 @@ +# Burkhard Lück , 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Frederik Schwarzer , 2009, 2010, 2011, 2012, 2016, 2017. +# Panagiotis Papadopoulos , 2010, 2011. +# Peter Rüthemann , 2010. +# Rolf Eike Beer , 2011. +# Rene Landert , 2012. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-16 20:47+0100\n" +"Last-Translator: Burkhard Lück \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Frederik Schwarzer" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "schwarzer@kde.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Anhalten" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Starten" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stopp" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Ergebnis speichern" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Erweiterte Grafikausgabe" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Grafik" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Ausdruck:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Zusätzliche Einstellungen:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Grafik" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Einstellungen aktivieren" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Berechnen" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differenzieren" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variable:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Ableitung:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Paket importieren" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrieren" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Untere Grenze:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Obere Grenze:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "bestimmte Integrale" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineare Algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Matrix erstellen" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Spalten:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Zeilen:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Eigenwerte berechnen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrix:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Eigenvektoren berechnen" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Matrix invertieren" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D-Grafik" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Name" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D-Grafik" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Erste Variable" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Zweite Variable" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Skript ausführen" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Gleichungen lösen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Gleichungen:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variablen:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Empfohlene Version: %4
    %2

    Weitere Informationen finden Sie auf %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Wählen Sie das zu verwendende Modul:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Auswahl als Standard-Modul einstellen" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia ist eine leistungsstarke höhere Programmiersprache für " +"technische Berechnungen, mit einer Syntax, die den Benutzern von andere " +"technische Berechnungsumgebungen bekannt ist. Sie bietet einen " +"hochentwickelte Compiler, verteilte parallele Ausführung, numerische " +"Genauigkeit und eine umfangreiche mathematische Funktionsbibliothek." + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Pfad zum nativen Julia-REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Grafiken in das Arbeitsblatt integrieren" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia-Skriptdatei (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Pfad zu Julia-REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Grafiken im Arbeitsblatt integrieren (Startet bei Änderungen eine neue " +"Sitzung)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Zwischenformat für integrierte Grafiken" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/de/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Liste der zu Beginn einer Sitzung automatisch auszuführenden Skripte" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Fehler: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Automatisch auszuführende Skripte" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua ist eine schnelle und leichtgewichtige Skript-Sprache mit einer " +"einfachen prozeduralen Syntax. Es gibt mehrere Bibliotheken für Mathematik " +"und Wissenschaft in Lua.

    Dieses Modul unterstützt luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Pfad zum Befehl luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua-Skriptdatei (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Pfad zum Befehl luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima ist ein System für die Manipulation von symbolischen und numerischen " +"Ausdrücken, einschließlich Differenzierung, Integration, Taylorreihe, " +"Laplace-Transformation, gewöhnliche Differentialgleichungen, lineare " +"Gleichungssysteme, Polynome und Mengen, Listen, Vektoren, Matrizen und " +"Tensoren. Durch exakte Brüche sowie Langzahlarithmetik und Gleitkommazahlen " +"mit beliebiger Genauigkeit (arbitrary precision) erzeugt Maxima Ergebnisse " +"mit hoher numerischer Präzision. Maxima kann Funktionen und Daten zwei- und " +"dreidimensional grafisch darstellen." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Pfad zum Programm Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Variablenverwaltung aktivieren" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Fehler: Zu viele „*/“" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Fehler: Zu viele „/*“" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Fehler: „\"“ vor „;“ erwartet" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Es wird auf das Grafikergebnis gewartet" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima-Stapelverarbeitungs-Datei (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Fehler beim Starten von Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima ist abgestürzt. Wird neu gestartet ..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima ist zweimal innerhalb kurzer Zeit abgestürzt. Es wird nicht neu " +"gestartet." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Fehler – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "Funktion" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Pfad zu Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Grafiken im Arbeitsblatt integrieren" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Cantor folgt dem Erstellen und Löschen von Variablen" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave ist eine „höhere Programmiersprache“, die hauptsächlich für " +"numerische Berechnungen vorgesehen ist.
    Es stellt eine praktische " +"Befehlszeilenoberfläche für das numerische Lösen von linearen und " +"nichtlinearen Problemen und für das Durchführen von anderen numerischen " +"Experimenten bereit. Die Sprache ist dabei weitestgehend kompatibel zu " +"Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Pfad zum Programm Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave-Skriptdatei (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaxfehler" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Pfad zu Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python-Skriptdatei (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python ist eine außergewöhnlich leistungsfähige dynamische " +"Programmiersprache, die in vielen verschiedenen Anwendungsbereichen benutzt " +"wird. Es gibt mehrere Python-Pakete für wissenschaftliche Programmierung.

    Dieses Modul unterstützt Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python ist eine außergewöhnlich leistungsfähige dynamische " +"Programmiersprache, die in vielen verschiedenen Anwendungsbereichen benutzt " +"wird. Es gibt mehrere Python-Pakete für wissenschaftliche Programmierung.

    Dieses Modul unterstützt Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Grafikdialog" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funktionen" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Titel" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Ausdruck" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Hinzufügen" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Entfernen" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Liste leeren" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linien" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkte und Linien" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Rahmen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogramm" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Stufen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Kerzenständer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Punkte" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Glättung" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Keine" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monoton steigend" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Natürliche kubische Filterung" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monoton steigend)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funktionsbereich" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-Bereich" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "–" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "A&btastrate" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Schritt&weite" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Einstellungen" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Grafiktitel" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Beschriftung der X-Achse" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Beschriftung der Y-Achse" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Position der Legende" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Legende ausblenden" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Oben links" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Oben rechts" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Unten links" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Unten rechts" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Unten" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Außerhalb" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Gitter anzeigen" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Alle Ränder anzeigen" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Farben verwenden" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Im Arbeitsblatt anzeigen" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logarithmische X-Skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logarithmische Y-Skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Dateioptionen" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Grafik als Datei speichern" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Dateityp" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Aus Dateinamen erkennen" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! ist mehr als nur ein einfacher Rechner und nutzt die " +"Schnittstellen, Rechenleistung und Flexibilität moderner Rechner aus. Der " +"wichtigste Begriff in Qalculate! ist der Ausdruck. Anstatt jede Zahl in " +"mathematischen Ausdrücken einzeln einzugeben, schreiben Sie den gesamten " +"Ausdruck und bearbeiten ihn dann. Die Interpretation der Ausdrücke ist " +"flexibel und fehlertolerant. Bei fehlerhaften Eingaben erhalten Sie Hinweise " +"zur Korrektur. Nicht vollständig lösbare Ausdrücke führen aber nicht zu " +"Fehlern, sondern diese Ausdrücke werden durch Qalculate! soweit wie möglich " +"vereinfacht und als geänderter Ausdruck zurückgegeben. Zusätzlich zu Zahlen " +"und arithmetischen Operatoren darf ein Ausdruck eine beliebige Kombination " +"von Variablen, Einheiten und Funktionen enthalten." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Ob und wie Einheiten automatisch umgewandelt werden. Wenn wahr, dann in die " +"am besten passende SI-Einheit umwandeln (die kleinste Menge von Einheiten)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Standardeinheit des Winkels für trigonometrische Funktionen." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Basis von analysierten und ausgewerteten Zahlen" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Ob das Ergebnis dieser Auswertung vereinfacht oder zerlegt wird." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Ob rationale Zahlen mit Dezimalstellen, als Bruch oder etwas dazwischen " +"dargestellt werden." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mit drei Punkten anzeigen, dass die Ziffernfolge einer Zahl unendlich " +"weitergeht,anstatt zu runden (z. B. 2/3 wird angezeigt als 0.666666... " +"anstelle von 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Alle dezimalen SI-Präfixe verwenden. Wenn falsch, werden Präfixe, die nicht " +"ein Vielfaches von Tausend (Zenti, Dezi, Deka, Hekto) sind, nicht " +"automatisch verwendet." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Wenn wahr, dann werden negative Exponenten anstelle der Division verwendet, " +"zum Beispiel 5/x^2 wird als 5*x^-2 geschrieben." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numerische Anzeige." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Ist diese Einstellung aktiv, werden die Grafiken im Arbeitsblatt angezeigt. " +"Anderenfalls wird die Grafik in einem eigenen Fenster geöffnet." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Ob Farben in Grafiken verwendet werden sollen." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Ob ein Gitter gezeichnet werden soll." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" +"Ist diese Einstellung aktiviert, wird an allen Seiten ein Rand gezeichnet." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Breite der Linien in Pixeln." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" +"Die Anzahl der Interpolationsschritte, die in Grafiken verwenden werden." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Glättungsmodus in Grafiken." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Stil der Grafik." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Position der Legende in Grafiken." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate kann die Grafik nicht erstellen. Ist „gnuplot“ installiert?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "„%1“ fehlt" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 muss eine Zahl sein." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 muss eine ganze Zahl sein." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 muss ein Boolescher Wert sein." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Ungültige Option für %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" +"Es wurden mehrere Ausdrücke in einem Grafikbefehl gefunden (%1 und %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "Fehler" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "Warnung" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" +"Es existiert keine Funktion, Variable oder Einheit mit dem angegebenen Namen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funktion: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Grafik-Schnittstelle" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Zeichnet eine oder mehrere Funktionen entweder im Arbeitsblatt oder in einem " +"eigenen Fenster." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "Ausdruck" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "Option" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "Wert" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "Ganzzahl" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "Boolescher Wert" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "Zahl" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "Voreinstellung: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Der Funktionsname" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Titel-Beschriftung" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Beschriftung der X-Achse" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Beschriftung der Y-Achse" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Bild, in dem die Grafik gespeichert werden soll. Ist diese Option leer, wird " +"die Grafik in einem Fenster auf dem Bildschirm angezeigt. Mit der " +"Einstellung inline=true wird das Bild unabhängig von dieser Einstellung " +"immer angezeigt." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Das beim Speichern verwendete Format des Bildes. Mögliche Werte sind auto, " +"png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "true für farbige Grafiken, false für einfarbige Grafiken." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minimaler Wert der X-Achse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Maximaler Wert der X-Achse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Ob eine logarithmische Skala für die x-Achse benutzt werden soll." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Ob eine logarithmische Skala für die y-Achse benutzt werden soll." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logarithmische Basis für die x-Achse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logarithmische Basis für die y-Achse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Ob ein Gitter in der Grafik angezeigt wird." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Ob die Grafik an allen Seiten einen Rand haben soll und nicht nur die Achsen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Breite der Linien." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Anordnung der Legende der Grafik. Mögliche Werte sind none, top_left, " +"top_right, bottom_left, bottom_right, below, outside." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Kurvenglättung. Mögliche Werte sind none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Grafikstil. Mögliche Werte sind lines, points, points_lines, boxes, " +"histogram, steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Skala auf der zweiten x-Achse verwenden." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Skala auf der zweiten y-Achse verwenden." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Ob die Grafik im Arbeitsblatt anstatt in einem eigenen Fenster angezeigt " +"wird." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" +"Der Abstand zwischen zwei Interpolationspunkten. Siehe auch Schrittweite." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Die Anzahl der Interpolationspunkte. Siehe auch Schrittweite." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Der Name der x-Variable. Dies muss eine unbekannte Variable sein." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Variablen in einer Datei speichern" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Speichert alle zurzeit definierten Variablen in einer Datei. Die Variablen " +"können mit „%1“ wieder geladen werden." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "Datei" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "Datei: Die Datei in der gespeichert werden soll" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Variablen aus einer Datei laden" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Lädt Variablen aus einer Datei, die vorher mit „%1“ erstellt wurde." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "Datei: Die zu ladende Datei" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Allgemein" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Zahlenbasis:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Bruch-Format:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Dezimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Genau" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Gebrochen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombiniert" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Numerische Anzeige:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pur" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Wissenschaftlich" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Genauigkeit" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Unendliche Serien kennzeichnen:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Aktiviert" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Alle SI-Präfixe verwenden:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Negative Exponenten verwenden:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Auswerten" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "In die besten SI-Einheiten umrechnen:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Winkel-Einheit:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Bogenmaß" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Grad" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gon" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Struktur-Modus:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Vereinfachen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktorisieren" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Grafikausgabe" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Grafiken im Arbeitsblatt anzeigen:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Farbige Grafiken:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Gitter anzeigen:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Alle Ränder anzeigen:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Linienbreite:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Abtastrate:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Glättungsmodus:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Natürliche kubische Filterung" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Grafikstil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Schrittweite" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Position der Legende:" + +# Falls jmd. eine Verknüpfung zu einem deutschen Wiki hat, bitte hier einsetzen +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"„R“ ist eine Sprache und eine Umgebung für statistische Berechnungen und " +"Grafiken, ähnlich zur Sprache und Umgebung „S“.
    Es stellt eine große " +"Auswahl an statistischen (lineare und nicht lineare Modellierung, klassische " +"statistische Tests, Zeitreihenanalyse, Klassifikation, Clustering, ...) und " +"grafischen Techniken bereit und lässt sich stark erweitern. Die Sprache „S“ " +"ist oft das bevorzugte Mittel für Forschungen mit statistischer Methodologie " +"und „R“ stellt die Open-Source-Mittel für die Teilnahme an diesen " +"Aktivitäten bereit." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Fehler beim Öffnen der Datei %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "„R“-Skriptdatei (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Fehler beim Einlesen des Befehls" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Doppelklick zum Öffnen des Dateiauswahldialogs" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-Quelltextdateien (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage ist ein unter der GPL lizenziertes freies Mathematik-Software-System." +"
    Es kombiniert die Stärken vieler Open-Source-Pakete in eine gemeinsame " +"Python-basierte Schnittstelle." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Pfad zum Programm Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Ergebnis von %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Die letzte Ausgabe lautet: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python-Skriptdatei (*.py);;Sage-Skriptdatei (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Die Sage-Version %1.%2 wird nicht unterstützt. Bitte aktualisieren Sie Ihre " +"Installation auf eine unterstützte Version, die mit Cantor funktioniert." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Der Sage-Prozess ist beim Auswerten dieses Ausdrucks abgestürzt" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Der Prozess „Sage“ ist abgestürzt" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Der Sage-Prozess ist beim Auswerten dieses Ausdrucks beendet worden" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Der Prozess „Sage“ wurde beendet" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Fehler beim Starten von Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Pfad zu Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab ist ein freies Softwarepaket für numerische Berechnungen für " +"verschiedene Betriebssysteme und eine höhere Programmiersprache für " +"numerische Probleme.

    Scilab wird unter der CeCILL-Lizenz (kompatibel zur " +"GPL) verbreitet." + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Pfad zum Programm „scilab-adv-cli“. Hinweis: Es ist mindestens die Version " +"5.4 von Scilab erforderlich." + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab-Skriptdatei (*.sce);;Scilab-Funktionsdatei (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Pfad zum Befehl scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Beispielarbeitsblatt herunterladen" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Beispieldatei öffnen " + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Gehe zum vorherigen Arbeitsblatt" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Gehe zum nächsten Arbeitsblatt" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor-Arbeitsblatt (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Datei öffnen" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Kein Modul gefunden

    \n" +"
    Sie können folgendes ausprobieren:\n" +"
    • Ändern Sie die Einstellungen im Einrichtungsdialog;
    • " +"
    • Installieren Sie die Pakete für das folgende Programm:
    • %2
    " +msgstr[1] "" +"

    Kein Modul gefunden

    \n" +"
    Sie können folgendes ausprobieren:\n" +"
    • Ändern Sie die Einstellungen im Einrichtungsdialog;
    • " +"
    • Installieren Sie die Pakete für eines der folgenden Programme:
    • " +"%2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Fehler" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sitzung %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Die Komponente Cantor wurde nicht gefunden." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Mehrere ungespeicherte Arbeitsblätter sind geöffnet. Möchten Sie sie " +"schließen?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Cantor schließen" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Das aktuelle Projekt wurde geändert. Möchten Sie es speichern?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Projekt speichern" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Das standardmäßig eingesetzte Modul" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Schriftsatz standardmäßig aktivieren" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Syntaxhervorhebung standardmäßig aktivieren" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Vervollständigung immer aktivieren" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Nummerierung der Ausdrücke immer aktivieren" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Änderungen im Arbeitsblatt als Voreinstellung animieren" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Einträge unter den aktuellen automatisch neu berechnen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Um Bestätigung fragen beim Neustart des Moduls" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Das Modul „%1“ ist nicht installiert." + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Es sind einige Probleme mit dem Modul „%1“ aufgetreten.\n" +"Bitte überprüfen Sie Ihre Einstellungen oder installieren Sie die benötigten " +"Pakete.\n" +"Sie werden dieses Arbeitsblatt nur ansehen können." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Als einfache Textdatei speichern" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "LaTeX-Export" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Arbeitsblatt auswerten" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Schriftsatz mit Hilfe von LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaxhervorhebung" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Vervollständigung" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Zeilennummern" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Arbeitsblatt animieren" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Modul neu starten" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Eintrag auswerten" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Befehlseintrag einfügen" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Texteintrag einfügen" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Markdown-Eintrag einfügen" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "LaTeX-Eintrag einfügen" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Seitenumbruch einfügen" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Bild einfügen" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Aktuellen Eintrag entfernen" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Hilfe zu %1 anzeigen" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Skripteditor anzeigen" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Vervollständigung anzeigen" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009–2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Speichern unter" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Speichern" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Alle vorhandenen Berechnungsergebnisse werden verworfen. Möchten Sie %1 " +"wirklich neu starten%1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "%1 neu starten?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Unterbrechen" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Berechnung läuft ..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Fertig" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sitzungsfehler: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initialisierung abgeschlossen" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Initialisierung ..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Unbenannt" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[nur lesen]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" +"Möchten Sie das aktuelle Arbeitsblatt auf den öffentliche Server hochladen?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Frage – Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Das Arbeitsblatt ist nicht gespeichert. Sie sollten es speichern, bevor Sie " +"es hochladen." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Warnung – Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Dieses Modul unterstützt keine Skripte." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Bearbeiten" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Ansicht" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Arbeitsblatt" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Datei" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Neu" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Seitenleisten" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Einstellungen" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Weiß" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Schwarz" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Dunkelrot" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Rot" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Hellrot" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Dunkelgrün" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Grün" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Hellgrün" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Dunkelblau" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blau" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Hellblau" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Dunkelgelb" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Gelb" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Helles Gelb" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Dunkles Cyan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cyan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Helles Cyan" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Dunkles Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Helles Magenta" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Dunkles Orange" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Orange" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Helles Orange" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Dunkelgrau" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Grau" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Hellgrau" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Hintergrundfarbe" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Textfarbe" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Schriftart" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Fett" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Kursiv" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Schrift vergrößern" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Schrift verkleinern" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Auswählen" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Unterbrochen" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Suchleiste" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Suchen:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Weiter" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Zurück" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Ersetzen:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Ersetzen" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "A&lle ersetzen" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Suchen in:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Groß-/Kleinschreibung beachten" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Bild einrichten" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Rechtsklick hier, um Bild einzufügen" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Das Bild %1 kann nicht geladen werden" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Bild-Einstellungen" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Öffnen" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Anzeigegröße" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Breite" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Höhe" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Vorschau" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Druckgröße" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Anzeigegröße verwenden" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automatisch)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr " %" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Bilddatei öffnen" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "LaTeX-Quelltext anzeigen" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Pfad zum Programm LaTeX" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Pfad zum Programm dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Name" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Wert" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Von:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Bis:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Haupttitel" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abszissenskala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinatenskala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Grafiktitel:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE-Oberfläche für Mathematik-Anwendungen" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Betreuer
    Qt5/KF5-Port, Scilab- und Python-Module" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Ursprünglicher Autor
    Betreuer (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra-Modul" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave-Modul" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Benutzeroberfläche" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor-Symbol" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Modul verwenden" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Zu öffnende Dokumente" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Datei %1 kann nicht geöffnet werden" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Seitenumbruch ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Mathematik in KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Name:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Wert:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Neue Variable hinzufügen" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Variable laden" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Variablen speichern" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Variablen löschen" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Sind Sie sicher, dass Sie alle Variablen löschen möchten?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Bestätigung – Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Datei laden" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Ergebnis entfernen" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Es kann keine Text-Editor-Komponente von KDE gefunden werden.\n" +"Überprüfen Sie Ihre KDE-Installation. " + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skripteditor" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skripteditor – %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nicht gefunden" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Anfang erreicht" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Ende erreicht" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 Instanz ersetzt" +msgstr[1] "%1 Instanzen ersetzt" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Befehle" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Ergebnisse" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Fehler" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX-Quelltext" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Standard-Modul:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Ist diese Einstellung aktiviert, berechnet Cantor automatisch alle Einträge " +"unter dem aktuellen." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Einträge automatisch neu berechnen" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Voreinstellungen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "LaTeX-Schriftsatz aktivieren" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Syntaxhervorhebung aktivieren" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Vervollständigung aktivieren" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Zeilennummern anzeigen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Animation des Arbeitsblatts aktivieren" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Gerendert anzeigen" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Quelltext anzeigen" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Die Eps-Datei kann nicht angezeigt werden. Möglicherweise fehlen Ihnen " +"einige Pakete." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Die Datei %1 kann nicht geschrieben werden." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Die Datei *kann nicht geschrieben werden." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Fehler beim Speichern der Datei %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "Im Nur-Lesen-Modus ist der Export für %1 möglicherweise ungültig" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Fehler beim Laden der Stilvorlage latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Die ausgewählte Datei ist keine gültige Projektdatei für Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"Das Modul %1 wurde nicht gefunden. Die Bearbeitung und Ausführung der " +"Einträge ist nicht möglich" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Befehlseintrag" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Texteintrag" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Markdown-Eintrag" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX-Eintrag" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Bild" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Seitenumbruch" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Eintrag einfügen nach" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Eintrag einfügen vor" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "LaTeX-Eintrag einfügen" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Text&farbe ..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Farbe" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Text&hervorhebung ..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "Schri&ftart" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Schrift&größe" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Fett" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursiv" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Unterstrichen" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Durchgestrichen" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Linksbündig" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Linksbündig" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Mittig ausrichten" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Mittig" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Rechtsbündig" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Rechtsbündig" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Blocksatz" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Blocksatz" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Eintrag entfernen" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Eintrag ziehen" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Das Modul, mit dem diese Datei erstellt wurde, ist nicht installiert. Es " +#~ "wird das Modul „%1“ benötigt." + +#~ msgid "Publish Worksheet" +#~ msgstr "Arbeitsblatt veröffentlichen" + +#~ msgid "Waiting for Image..." +#~ msgstr "Warten auf das Bild ...." + +#~ msgid "Insert" +#~ msgstr "Einfügen" + +#~ msgid "Insert Before" +#~ msgstr "Einfügen vor" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Die Datei „%1“ lässt sich nicht öffnen: unbekannter MIME-Typ" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX-Dokument" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor-Arbeitsblatt" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server für das „R“-Modul von Cantor" + +#~ msgid "R Server" +#~ msgstr "R-Server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Aufruf: saveVariables Datei" + +#~ msgid "Saving failed." +#~ msgstr "Speichern fehlgeschlagen." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Aufruf: loadVariables Datei" + +#~ msgid "Loading failed." +#~ msgstr "Das Laden ist fehlgeschlagen." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009–2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Pfad zum Befehl python:" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor-Server für „R“" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Sollen auch die Bilder exportiert werden?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Pfad zum Befehl python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Variablenverwaltung aktivieren" + +#~ msgid "Could not start the server." +#~ msgstr "Der Server lässt sich nicht starten." + +#~ msgid "Pause Animation" +#~ msgstr "Animation anhalten" + +#~ msgid "Start Animation" +#~ msgstr "Animation starten" + +#~ msgid "Restart Animation" +#~ msgstr "Animation neu starten" + +#~ msgid "Append Command Entry" +#~ msgstr "Befehlseintrag hinzufügen" + +#~ msgid "Append Text Entry" +#~ msgstr "Texteintrag hinzufügen" + +#~ msgid "Append Latex Entry" +#~ msgstr "LaTeX-Eintrag hinzufügen" + +#~ msgid "Append Image" +#~ msgstr "Bild hinzufügen" + +#~ msgid "Append Page Break" +#~ msgstr "Seitenumbruch hinzufügen" + +#~ msgid "Other" +#~ msgstr "Weitere" + +#~ msgid "And %1 more..." +#~ msgstr "Und %1 weitere ..." + +#~ msgid "Main Toolbar" +#~ msgstr "Haupt-Werkzeugleiste" + +#~ msgid "Completion Style:" +#~ msgstr "Art der Vervollständigung:" + +#~ msgid "Popup" +#~ msgstr "Aufklappmenü" + +#~ msgid "The style used for Completion" +#~ msgstr "Zu verwendende Art der Vervollständigung" + +#~ msgid "Path to the Scilab executable" +#~ msgstr "Pfad zum Programm Scilab" + +#~ msgid "" +#~ "Scilab version of the master branch of the Scilab's repository is " +#~ "compatible" +#~ msgstr "" +#~ "Die Scilab-Version aus dem Entwicklungszweig des Scilab-Quelltextarchivs " +#~ "kann ebenfalls benutzt werden" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Befehlseintrag davor einfügen" + +#~ msgid "Command Entry Before" +#~ msgstr "Vorherigen Eintrag einfügen" + +#~ msgid "GroupBox" +#~ msgstr "GroupBox" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "Dieser Test benötigt ein funktionierendes %1-Modul" + +#~ msgid "Help" +#~ msgstr "Hilfe" + +#~ msgid "Show Help Panel" +#~ msgstr "Hilfebereich anzeigen" + +#~ msgid "Uploading successful" +#~ msgstr "Erfolgreich hochgeladen" + +#~ msgid "Error uploading File %1" +#~ msgstr "Fehler beim Hochladen der Datei %1" + +#~ msgid "MathematiKPart" +#~ msgstr "MathematiKPart-Komponente" + +#~ msgid "MathematiK" +#~ msgstr "MathematiK" diff --git a/po/de/docs/cantor/index.docbook b/po/de/docs/cantor/index.docbook new file mode 100644 index 0000000..b8b162e --- /dev/null +++ b/po/de/docs/cantor/index.docbook @@ -0,0 +1,1412 @@ + +ATEX"> + + +]> + + + +Das Handbuch zu &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +BurkhardLück
    lueck@hube-lueck.de
    Übersetzung
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2016-08-25 +Anwendungen 16.12 + + +&cantor; ist ein Programm, das ein Arbeitsblatt als grafische Bedienungsoberfläche für andere freie Mathematikpakete zu Verfügung stellt. + + + +KDE +kdeedu +Mathematik +Mathe +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + +
    + + +Einleitung + +&cantor; ist ein Programm, um Ihre Lieblings-Mathematikpakete in &kde; mit einem Arbeitsblatt als grafische Schnittstelle zu benutzen. Dialoge unterstützen Sie bei häufig vorkommenden Aufgaben und Sie können Arbeitsblätter mit anderen gemeinsam nutzen. + + + +&cantor; benutzen + +Bildschirmfoto: +Ein Bildschirmfoto von &cantor; + + + + + + Bildschirmfoto + + + + + + + +Leistungsmerkmale von &cantor; + + Intuitive Arbeitsblattansicht zur Berechnung von Ausdrücken. + Graphische Ausgaben werden im Arbeitsblatt dargestellt. + Modulbasierte Struktur, daher können verschiedene Module hinzugefügt werden. + Mit der Funktion „Neue Erweiterungen“ können Beispiel-Arbeitsblätter aus dem Internet herunter- oder hochgeladen werden. + Schriftsatz für mathematische Formeln mit Hilfe von &latex;. + Syntaxhervorhebung passend zum verwendeten Modul. + Abhängig vom verwendeten Modul gibt es Assistenten als Dialoge für häufig vorkommende Aufgaben wie die Integration einer Funktion oder die Eingabe einer Matrix. + + + + +Die Module von &cantor; +In &cantor; stehen mehrere Module zur Auswahl, je nach Aufgabenstellung wählen Sie das am besten geeignete Modul aus. +Zur Zeit sind folgende Module vorhanden: + + Sage: + + Sage ist ein unter der GPL lizenziertes freies Mathematik-Software-System.Es kombiniert die Stärken vieler Open-Source-Pakete mit einer gemeinsamen Python-basierten Schnittstelle. Weitere Informationen finden Sie auf der Webseite http://sagemath.org. + + + + Maxima: + + Maxima ist ein System für die Manipulation von symbolischen und numerischen Ausdrücken, einschließlich Differenzierung, Integration, Taylorreihe, Laplace-Transformation, gewöhnliche Differentialgleichungen, lineare Gleichungssysteme, Polynome und Mengen, Listen, Vektoren, Matrizen und Tensoren. Durch exakte Brüche sowie Langzahlarithmetik und Gleitkommazahlen mit beliebiger Genauigkeit (arbitrary precision) erzeugt Maxima Ergebnisse mit hoher numerischer Präzision. Maxima kann Funktionen und Daten zwei- und dreidimensional grafisch darstellen. Weitere Informationen finden Sie auf der Webseite http://maxima.sourceforge.net. + + + + R: + + „R“ ist eine Sprache und eine Umgebung für statistische Berechnungen und Grafiken, ähnlich zur Sprache und Umgebung „S“. Es stellt eine große Auswahl an statistischen (lineare und nicht lineare Modellierung, klassische statistische Tests, Zeitreihenanalyse, Klassifikation, Clustering, ...) und grafischen Techniken bereit und lässt sich stark erweitern. Die Sprache „S“ ist oft das bevorzugte Mittel für Forschungen mit statistischer Methodologie und „R“ stellt die Open-Source-Mittel für die Teilnahme an diesen Aktivitäten bereit. Weitere Informationen finden Sie auf der Webseite http://www.r-project.org. + + + + Julia: + + Julia ist eine leistungsstarke höhere Programmiersprache für technische Berechnungen, mit einer Syntax, die den Benutzern von andere technische Berechnungsumgebungen bekannt ist. Sie bietet einen hochentwickelte Compiler, verteilte parallele Ausführung, numerische Genauigkeit und eine umfangreiche mathematische Funktionsbibliothek. Weitere Informationen finden Sie in der Julia-Dokumentation. + + + + &kalgebra;: + + &kalgebra; ist ein grafischen Mathematikprogramm auf der Basis von MathML. Es ist im Projekt &kde;-Lernprogramme enthalten. Weitere Informationen finden Sie auf der Webseite http://edu.kde.org/kalgebra/. + + + + Qalculate!: + + Qalculate! ist mehr als nur ein einfacher Rechner und nutzt die Schnittstellen, Rechenleistung und Flexibilität moderner Rechner aus. Der wichtigste Begriff in Qalculate! ist der Ausdruck. Anstatt jede Zahl in mathematischen Ausdrücken einzeln einzugeben, schreiben Sie den gesamten Ausdruck und bearbeiten ihn dann. Die Interpretation der Ausdrücke ist flexibel und fehlertolerant. Bei fehlerhaften Eingaben erhalten Sie Hinweise zur Korrektur. Nicht vollständig lösbare Ausdrücke führen aber nicht zu Fehlern, sondern diese Ausdrücke werden durch Qalculate! soweit wie möglich vereinfacht und als geänderter Ausdruck zurückgegeben. Zusätzlich zu Zahlen und arithmetischen Operatoren darf ein Ausdruck eine beliebige Kombination von Variablen, Einheiten und Funktionen enthalten. Weitere Informationen finden Sie auf http://qalculate.sourceforge.net/. + + + + Python2 und Python3: + + Python ist eine außergewöhnlich leistungsfähige dynamische Programmiersprache, die in vielen verschiedenen Anwendungsbereichen benutzt wird. Es gibt mehrere Python-Pakete für wissenschaftliche Programmierung. + Python wird unter der „Python Software Foundation“-Lizenz (kompatibel zur GPL) verbreitet. Weitere Informationen dazu finden Sie auf offiziellen Webseite. + + Diese Modul fügt den zusätzlichen Eintrag Paket zum Hauptmenü von &cantor; hinzu. Benutzen Sie dann PaketPaket importieren, um Python-Pakete in das Arbeitsblatt zu importieren. + + + + + Scilab: + + Scilab ist ein freies Softwarepaket für numerische Berechnungen für verschiedene Betriebssysteme und eine höhere Programmiersprache für numerische Probleme. + Scilab wird unter der CeCILL-Lizenz (kompatibel zur GPL) verbreitet. Weitere Informationen dazu finden Sie auf http://www.scilab.org/. + + Scilab in Version 5.5 oder neuer muss auf Ihrem System installiert sein, damit Sie mit diesem Modul arbeiten können. + + + + + Octave: + + &GNU; Octave ist eine „höhere Programmiersprache“, die hauptsächlich für numerische Berechnungen vorgesehen ist. Sie stellt eine praktische Befehlszeilenoberfläche für das numerische Lösen von linearen und nichtlinearen Problemen und für das Durchführen von anderen numerischen Experimenten bereit. Die Sprache ist dabei weitestgehend kompatibel zu Matlab. Weitere Informationen finden Sie unter http://www.gnu.org/software/octave/. + + + + Lua: + + Lua ist eine schnelle und leichtgewichtige Skript-Sprache mit einer einfachen prozeduralen Syntax. Es gibt mehrere Bibliotheken für Mathematik und Wissenschaft in Lua. + Weitere Informationen dazu finden Sie auf http://www.lua.org/. + Dieses Modul unterstützt luajit 2. + + + + + + + +Der Arbeitsbereich von &cantor; + + + Der Arbeitsbereich von &cantor; + + + + + + Der Arbeitsbereich von &cantor; + + + + +Der Arbeitsbereich von &cantor; besteht aus drei Teilen: + Der Karteireiterleiste, mit der Sie zwischen den geöffneten Arbeitsblättern wechseln können. + Einem Hilfebereich, hier werden Informationen zu den Befehlen angezeigt, wenn Sie „? befehl“ eingeben. + Einer Seitenleiste mit der Variablen-Verwaltung, in der eine Liste aller verfügbaren Variablen auf dem aktuellen Arbeitsblatt angezeigt wird. Die Seitenleiste von &cantor; enthält Karteikarten mit Hilfe und der Variablen-Verwaltung. Die Variablen-Verwaltung kann mit Maxima (wenn auf der Seite Einstellungen&cantor; einrichten ... Maximaaktiviert) und mit &kalgebra;, Octave, Python2, Python3, Qalculate und Scilab verwendet werden. + Dem Arbeitsblatt selbst. + + + +Das Arbeitsblatt +Das Arbeitsblatt ist der wichtigste Bereich für die Arbeit mit &cantor;. Hier geben Sie Ausdrücke ein, lassen sie vom Modul auswerten und hier werden die Ergebnisse angezeigt. Die Befehle, die im Arbeitsblatt benutzt werden können, sind durch das ausgewählte Modul vorgeben. Daher sollten Sie die Syntax des gewählten Moduls lernen. Im Menü „Hilfe“ finden Sie einen Eintrag für das aktuell benutzte Modul, damit können Sie die Dokumentation des Moduls online lesen. Brauchen Sie zu einem bekannten Befehl weitere Hilfe, geben Sie "? befehl" ein, dann wird die Dokumentation zum Befehl rechts im Arbeitsblatt angezeigt. Möchten Sie einige Beispielarbeitsblätter laden, wählen Sie Beispielarbeitsblatt herunterladen im Menü Datei. Dann können Sie von anderen Benutzern veröffentlichte Arbeitsblätter herunterladen. +Um jeden Befehlseintrag im Arbeitsblatt zu kontrollieren, verwenden Sie die Knöpfe, die rechts im Arbeitsblatt angezeigt werden, wenn der Mauszeiger über einem Eingabefeld steht. Es gibt drei grundlegende Aktionen für jeden Eintrag. Mit Eintrag auswerten wird das Ergebnis der Berechnung dieses Eintrags aktualisiert, mit Eintrag ziehen kann der Eintrag an eine anderen Platz im Arbeitsblatt verschoben werden und mit Eintrag entfernen wird ein Eintrag vom aktuellen Arbeitsblatt gelöscht +Einstellungen für Schriften und die Ausrichtung von Elementen im Arbeitsblatt können mit den Aktionen in der Werkzeugleiste über dem Arbeitsblatt geändert werden. + + Einstellungen + Im Menü Einstellungen kann das Erscheinungsbild des aktuellen Arbeitsblatts geändert werden. + + + Schriftsatz mit Hilfe von &latex; + + Diese Einstellung ändert die Anzeige von Ergebnissen. Ist sie aktiviert, werden die Ergebnisse vor der Anzeige vom &latex;-System bearbeitet. Damit wird eine ansprechende Darstellung der Formeln möglich. Aus 3*x^2*sqrt(2)*x+2/3 zum Beispiel wird + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Syntaxhervorhebung aktivieren + + Syntaxhervorhebung verbessert die Lesbarkeit des Quelltextes, indem Schlüsselworte oder zusammengehörige Klammern farblich hervorgehoben werden. + + + + Vervollständigung + + Ist dies aktiviert, zeigt &cantor; bei der Eingabe eine Liste aller mit den bisher eingetippten Buchstaben beginnenden Befehle an, wenn die Tabulatortaste gedrückt wird. Gibt es nur noch einen passenden Befehl, wird er vervollständigt. + + + + Zeilennummern + + Mit dieser Einstellung legen Sie fest, ob die Ausdrücke mit einer Zeilennummer gekennzeichnet werden sollen. Damit können vorher bereits eingegebene Ergebnisse wieder aufgerufen werden - in Maxima funktioniert dies zum Beispiel mit dem Befehl %O1. + + + + Arbeitsblatt animieren + + Ist diese Einstellung aktiv. werden verschiedene Animationen verwendet, um Änderungen auf einem Arbeitsblatt hervorzuheben. + + + + + + + +Die Assistentendialoge +Es gibt mehrere Assistentendialoge in &cantor;, um einige grundlegende Operationen durchzuführen. +Diese Dialoge finden Sie in den Menüeinträgen. Für jedes Modul gibt es spezielle Assistentendialoge. + +Der Dialog „Matrix erstellen“ + + Bildschirmfoto des &cantor;-Dialogs zur Erstellung von Matrizen + + + + + + Bildschirmfoto des &cantor;-Dialogs zur Erstellung von Matrizen + + + +Dieser Dialog kann zur Eingabe von Matrizen benutzt werden. Die Dimension der Matrizen und die Elemente können hier definiert werden. +Mit der taste können Sie schnell zwischen den Zellen bei der Eingabe navigieren. + + +Dialog Matrizen-Operationen + + Bildschirmfoto des &cantor;-Dialogs zur Eingabe von Matrizen + + + + + + Bildschirmfoto des &cantor;-Dialogs zur Eingabe von Matrizen + + + +In diesem Dialog können Sie den Namen einer Matrix eingeben, um ihre Eigenvektoren und Eigenwerte zu berechnen und die Matrix zu invertieren. Der Vorgabewert % kann als Referenz zum vorherigen Ergebnis einer Berechnung oder einer Eingabe verwendet werden. + + +Der Dialog Differenzieren + + Der Dialog Differenzieren von &cantor; + + + + + + Der Dialog Differenzieren von &cantor; + + + +In diesem Dialog können Sie den Ausdruck einer Funktion zum Differenzieren, die Namen der Variablen und die Art der Ableitung eingeben + + +Der Dialog Integrieren + + Der Dialog Integrieren von &cantor; + + + + + + Der Dialog Integrieren von &cantor; + + + +In diesem Dialog können Sie den Ausdruck einer Funktion zum Integrieren, die Namen der Variablen und die Grenzwerte für diese Variablen als bestimmtes Integral eingeben. + + +Der Dialog „Gleichungen lösen“ + + Der Dialog „Gleichungen lösen“ von &cantor; + + + + + + Der Dialog „Gleichungen lösen“ von &cantor; + + + +In diesem Dialog geben Sie Gleichungen zum Lösen ein, jeden Ausdruck in einer eigenen Zeile, und die zu bestimmenden Variablen, durch Kommata getrennt. + + +Paket-Importdialog + + Bildschirmfoto des &cantor;-Dialogs zum Paketimport + + + + + + Bildschirmfoto des &cantor;-Dialogs zum Paketimport + + + +In diesem Dialog können Sie den Namen der Pakete zum Importieren eingeben, ⪚ numpy für Python. + + +Grafikdialog + + Der Grafikdialog von &cantor; mit der Karteikarte Funktionen + + + + + + Der Grafikdialog von &cantor; mit der Karteikarte Funktionen/phrase +> + + + +Die Einstellungen in diesem Dialog sind auf zwei Karteikarten aufgeteilt. Auf der Karteikarte Funktionen können Sie Funktionen eingeben, die grafisch dargestellt werden sollen. +Um eine neue Funktion einzugeben, klicken Sie auf Hinzufügen. Doppelklicken Sie auf die Zelle Titel und geben dann den Titel ein. Doppelklicken Sie auf die Zelle Ausdruck und tragen den Ausdruck der Funktion ein. + + Der Grafikdialog von &cantor; mit der Karteikarte Einstellungen + + + + + + Der Grafikdialog von &cantor; mit der Karteikarte Einstellungen/phrase +> + + + +Auf der Karteikarte Einstellungen definieren Sie das Erscheinungsbild von Grafik und die Legende. + + +2D-Grafikdialog + + Der 2D-Grafikdialog von &cantor; + + + + + + Der 2D-Grafikdialog von &cantor; + + + +In diesem Dialog können Sie den Ausdruck einer Funktion, die Variablen und die Grenzwerte für diese Variable eingeben. + + +3D-Grafikdialog + + Der 3D-Grafikdialog von &cantor; + + + + + + Der 3D-Grafikdialog von &cantor; + + + +In diesem Dialog können Sie den Ausdruck einer Funktion, die Variablen und die Grenzwerte für jede Variable eingeben. + + + + + +Befehlsreferenz + + +Das Hauptfenster von &cantor; + +&cantor; benutzt die bekannten &kde;-Menüeinträge, weitere Informationen dazu finden Sie im Kapitel Menüs der &kde;-Grundlagen. + +Im folgenden finden Sie eine Liste der zusätzlichen oder speziellen Menüeinträge für &cantor;. Einige Menüs werden nur angezeigt, wenn die verwendeten Module diese Funktionen implementiert haben. + + +Das Menü Datei + + + +&Ctrl; N Datei Neu +Erstellt ein neues Arbeitsblatt mit dem Standardmodul. + + +Datei Neu Modul +Erstellt ein neues Arbeitsblatt mit dem ausgewählten Modul. + + +Datei Beispielarbeitsblatt herunterladen +Öffnet einen Dialog, um Beispiele, die von anderen Benutzer von &cantor; veröffentlicht wurden, mit der Funktion Neue Erweiterungen herunterzuladen. + + +Datei Beispieldatei öffnen +Öffnet einen Dialog, um eine Beispiel auszuwählen und zu laden. Die Beispiele können zum Beispiel vorher mit Datei Beispielarbeitsblatt herunterladen auf der Festplatte gespeichert werden. + + +Datei Als einfache Textdatei speichern +Ermöglicht das Speichern des aktuellen Arbeitsblatts als einfaches Textdokument. + + +Datei LaTeX-Export +Ermöglicht das Speichern des aktuellen Arbeitsblatts als &latex;-Dokument. + + +Datei Arbeitsblatt veröffentlichen +Öffnet einen Dialog, um Ihr aktuelles Arbeitsblatt zu veröffentlichen und anderen Benutzer von &cantor; über die Funktion „Neue Erweiterungen“ veröffentlichen zur Verfügung zu stellen. + + +Datei Skript ausführen +Ermöglicht das Laden und Ausführen der Skripte für das aktuelle Modul. + + + + + + + +Das Menü Ansicht + + + +&Ctrl;+ Ansicht Vergrößern +Vergrößert das aktuelle Arbeitsblatt um 10 %. + + + &Ctrl;- Ansicht Verkleinern +Verkleinert das aktuelle Arbeitsblatt um 10 %. + + +Ansicht Skripteditor anzeigen +Öffnet das Skripteditorfenster für das aktuell gewählte Modul. + + +Ansicht SeitenleistenHilfe +Schaltet die Anzeige der Karteikarte Hilfe in der Seitenleiste an oder aus. + + +Ansicht SeitenleistenVariablen-Verwaltung +Schaltet die Anzeige der Karteikarte Variablen-Verwaltung in der Seitenleiste an oder aus. + + + + + + +Das Menü Arbeitsblatt + + + +Arbeitsblatt Arbeitsblatt auswerten +Startet die Auswertung des gesamten Arbeitsblatts. + + + &Shift;Eingabe Arbeitsblatt Eintrag auswerten +Startet die Auswertung des aktuellen Eintrags. + + + &Ctrl;Eingabe Arbeitsblatt Befehlseintrag einfügen +Fügt unter der aktuellen Cursor-Position einen neuen Befehlseintrag ein. + + +Arbeitsblatt Texteintrag einfügen +Fügt unter der aktuellen Cursor-Position einen neuen Texteintrag ein. + + +Arbeitsblatt LaTeX-Eintrag einfügen +Fügt unter der aktuellen Cursor-Position einen neuen LaTeX-Eintrag ein. + + +Arbeitsblatt Seitenumbruch einfügen +Fügt unter der aktuellen Cursor-Position einen Seitenumbruch ein. + + + &Shift;Del Arbeitsblatt Aktuellen Eintrag entfernen +Löscht den aktuellen Eintrag aus dem Arbeitsblatt. + + + + + + +Das Menü Lineare Algebra + + + +Lineare Algebra Matrix erstellen +Öffnet den Dialog zur Erstellung von Matrizen. + + +Lineare Algebra Eigenwerte berechnen +Öffnet den Dialog zur Eingabe des Namens einer Matrix, um deren Eigenwerte und die Dimension der Eigenwerte in der zugehörigen Reihenfolge zu berechnen.. + + +Lineare Algebra Eigenvektoren berechnen +Öffnet den Dialog zur Eingabe des Namens einer Matrix, um deren Eigenwerte, die Dimension der Eigenwerte in der zugehörigen Reihenfolge und die Eigenvektoren zu berechnen.. + + +Lineare Algebra Matrix invertieren +Öffnet den Dialog Matrix-Eingabe um die inverse Matrix zu berechnen. + + + + + + +Das Menü Berechnen + + + +Berechnen Differenzieren +Öffnet den Dialog Differenzieren-Parameter. + + +Berechnen Integrieren +Öffnet den Dialog Integrations-Parameter. + + +Berechnen Gleichungen lösen +Öffnet den Dialog zur Eingabe der Parameter, um lineare und nicht-lineare Gleichungen zu lösen. + + + + + + +Das Menü Paket + + + +Paket Paket importieren +Öffnet den Dialog zum Import von Paketen. + + + + + + +Das Menü Grafik + + + +Grafik Grafik +Öffnet den Dialog Grafik-Parameter. + + +Grafik 2D-Grafik +Öffnet den Dialog 2D-Grafik-Parameter. + + +Grafik 3D-Grafik +Öffnet den Dialog 3D-Grafik-Parameter. + + + + + + +Die Menüs Einstellungen und Hilfe +&cantor; benutzt die bekannten &kde;-Menüeinträge Einstellungen und Hilfe. Mehr dazu erfahren Sie in den Abschnitten zu den Menüs Einstellungen und Hilfe in den &kde;-Grundlagen. + + + + + + + +Fragen und Antworten + + + + Der Menüeintrag Schriftsatz mit Hilfe von LaTeX ist nicht vorhanden + Diese Funktion wird nicht von allen Modulen unterstützt. In der aktuellen Version wird die &latex;-Ausgabe mit den Modulen Maxima, Qalculate! und Sage unterstützt. + + + Ich habe Sage/Maxima oder andere unterstützte Computeralgebrasysteme (CAS) installiert, aber das zugehörige Modul wird nicht angezeigt. + + Möglicherweise hat &cantor; den Pfad zu diesen Modulen nicht gefunden. Öffnen Sie den Einrichtungsdialog mit Einstellungen&cantor; einrichten ... und stellen Sie dort den Pfad zu den Modulen richtig ein. + + + + Was hat der eigenartige Name des Programms mit Mathematik zu tun? + Das Programm ist nach dem deutschen Mathematiker Georg Cantor benannt, dem Entdecker der Mengenlehre. + + + + + + +Danksagungen und Lizenz + +&cantor; +Programm Copyright 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Dokumentation Copyright © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Übersetzung Burkhard Lücklueck@hube-lueck.de +&underFDL; &underGPL; + +&documentation.index; +
    + + diff --git a/po/el/cantor.po b/po/el/cantor.po new file mode 100644 index 0000000..a2fa578 --- /dev/null +++ b/po/el/cantor.po @@ -0,0 +1,3357 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Petros , 2010. +# Yannis Kaskamanidis , 2010. +# Dimitris Kardarakos , 2012, 2014. +# Stelios <>, 2012, 2017. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2017-09-16 12:07+0200\n" +"Last-Translator: Stelios \n" +"Language-Team: Greek \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Γιάννης Κασκαμανίδης, Δημήτρης Καρδαράκος" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kiolalis@gmail.com, dimkard@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Παύση" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Εκκίνηση" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Διακοπή" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Αποθήκευση αποτελέσματος" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Γραφική απεικόνιση για προχωρημένους" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Γραφική απεικόνιση" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Έκφραση:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Επιπρόσθετες επιλογές:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Γραφική απεικόνιση" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Ενεργή επιλογή" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Υπολογισμός" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Διαφορισμός" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Μεταβλητή:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "χ" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Φορές: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Πακέτο" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Εισαγωγή πακέτου" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Πακέτο:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Ενσωμάτωση" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Κατώτερο όριο:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Ανώτερο όριο:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "καθορισμένο ολοκλήρωμα" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Γραμμική άλγεβρα" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Δημιουργία πίνακα" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Στήλες:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Γραμμές:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Υπολογισμός ιδιοτιμών" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Πίνακας:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Υπολογισμός ιδιοδιανυσμάτων" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Αντιστροφή πίνακα" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Δισδιάστατο σχέδιο" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Μεταβλητή" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Όνομα" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Ελάχιστο:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Μέγιστο:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Τρισδιάστατη γραφική απεικόνιση" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1η μεταβλητή" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2η μεταβλητή" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Εκτέλεση σεναρίου" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Λύση εξισώσεων" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Εξισώσεις:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Μεταβλητές:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Συνιστώμενη έκδοση: %4

    %2

    Δείτε %3 για περισσότερες πληροφορίες
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Επιλογή συστήματος υποστήριξης προς χρήση:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Ορισμός αυτού του συστήματος υποστήριξης ως προκαθορισμένου" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Η Julia είναι μία υψηλού επιπέδου, υψηλής απόδοσης, δυναμική " +"γλώσσα προγραμματισμού για τεχνικούς υπολογισμούς, με συντακτικό " +"αναγνωρίσιμο από άλλα τεχνικά προγραμματιστικά περιβάλλοντα. Παρέχει έναν " +"εξελιγμένο μεταγλωττιστή, κατανεμημένη παράλληλη εκτέλεση, αριθμητική " +"ακρίβεια και μια εκτεταμένη βιβλιοθήκη μαθηματικών συναρτήσεων.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Διαδρομή προς το εγγενές κέλυφος REPL της Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Ενσωμάτωση των γραφικών απεικονίσεων στο φύλλο εργασίας" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Αρχείο σεναρίου της Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Διαδρομή προς το REPL της Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Ενσωμάτωση γραφικών απεικονίσεων στο φύλλο εργασίας (με έναρξη νέας " +"συνεδρίας σε αλλαγή)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Ενδιάμεσος τύπος αποθήκευσης για εμβόλιμες απεικονίσεις:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Λίστα σεναρίων για αυτόματη εκτέλεση κατά την εκκίνηση της συνεδρίας" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Σφάλμα: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Σενάρια για αυτόματη εκτέλεση" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"Η

    Lua είναι μαι γρήγορη και ελαφριά γλώσσα συγγραφής σεναρίων, με απλό " +"συντακτικό διαδικασιών. Υπάρχουν πολλές βιβλιοθήκες στη Lua για μαθηματικά " +"και φυσικές επιστήμεςscience.

    Αυτό το σύστημα υποστήριξης υποστηρίζει " +"luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Διαδρομή προς την εντολή luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Αρχείο σεναρίου της Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Διαδρομή προς την εντολή luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Το Maxima είναι ένα σύστημα που χειρίζεται συμβολικές και αριθμητικές " +"εκφράσεις, στις οποίες συμπεριλαμβάνονται ο διαφορισμός, η ολοκλήρωση, οι " +"σειρές Taylor, οι μετασχηματισμοί Laplace, οι συνήθεις διαφορικές εξισώσεις, " +"συστήματα γραμμικών εξισώσεων, πολυώνυμα, σύνολα, λίστες, διανύσματα, " +"πίνακες και τανυστές. Το Maxima δίνει αριθμητικά αποτελέσματα μεγάλης " +"ακρίβειας χρησιμοποιώντας ακριβή κλάσματα, αυθαίρετης ακρίβειας ακέραιους " +"αριθμούς και μεταβλητής ακρίβειας αριθμούς κινητής υποδιαστολής. Το Maxima " +"μπορεί να απεικονίσει γραφικά συναρτήσεις σε δύο ή τρεις διαστάσεις. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Διαδρομή προς το εκτελέσιμο Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Ενεργοποίηση της διαχείρισης μεταβλητών" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Σφάλμα: πάρα πολλά */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Σφάλμα: πάρα πολλά /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Σφάλμα: αναμενόταν \" πριν το ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Αρχείο δέσμης εντολών του Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Αδυναμία έναρξης του Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Το Maxima κατέρρευσε. Επανέναρξη..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Το Maxima κατέρρευσε δύο φορές μέσα σε μικρό χρονικό διάστημα. Διακοπή " +"προσπαθειών έναρξης" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Σφάλμα - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "συνάρτηση" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Διαδρομή προς το Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Ενσωμάτωση γραφικών απεικονίσεων στο φύλλο εργασίας" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" +"Να επιτρέπεται το Cantor να παρακολουθεί τη δημιουργία/καταστροφή των " +"μεταβλητών" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"Η GNU Octave είναι μια υψηλού επιπέδου γλώσσα, με πρωταρχική επιδίωξη τους " +"αριθμητικούς υπολογισμούς.
    Παρέχει ένα εύχρηστο περιβάλλον γραμμής " +"εντολών για την επίλυση γραμμικών και μη γραμμικών προβλημάτων αριθμητικά " +"και για την εκτέλεση άλλων αριθμητικών πειραμάτων χρησιμοποιώντας μια γλώσσα " +"συμβατή με τη Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Διαδρομή προς το εκτελέσιμο Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Αρχείο σεναρίου της Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Συντακτικό σφάλμα" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Διαδρομή προς την Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Αρχείο σεναρίου της Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Η Python αποτελεί μια αξιοσημείωτα ισχυρή δυναμική γλώσσα προγραμματισμού " +"που χρησιμοποιείται σε μια ευρεία γκάμα τομέων εφαρμογών. Υπάρχουν διάφορα " +"πακέτα της Python για επιστημονικό προγραμματισμό.

    Αυτό το σύστημα " +"υποστήριξης υποστηρίζει την Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Η Python αποτελεί μια αξιοσημείωτα ισχυρή δυναμική γλώσσα προγραμματισμού " +"που χρησιμοποιείται σε μια ευρεία γκάμα τομέων εφαρμογών. Υπάρχουν διάφορα " +"πακέτα της Python για επιστημονικό προγραμματισμό.

    Αυτό το σύστημα " +"υποστήριξης υποστηρίζει την Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Διάλογος γραφικής απεικόνισης" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Συναρτήσεις" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Τίτλος" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Έκφραση" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Προσθήκη" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Αφαίρεση" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Καθαρισμός λίστας" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Μεταβλητή Χ" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Στιλ" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Γραμμές" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Σημεία" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Σημεία και γραμμές" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Πλαίσια" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Ιστόγραμμα" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Βήματα" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Κηροπήγια" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Τελείες" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Εξομάλυνση" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Τίποτα" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Μονότονη" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Φυσικές κυβικές καμπύλες spline" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (μονότονη)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Εύρος συνάρτησης" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Εύρος Χ" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Ρυθμός δειγ&ματοληψίας" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Μέγεθος βήμα&τος" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Επιλογές" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Τίτλος γραφικής απεικόνισης" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Ετικέτα άξονα Χ" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Ετικέτα άξονα Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Θέση υπομνήματος" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Απόκρυψη υπομνήματος" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Πάνω-αριστερά" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Πάνω-δεξιά" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Κάτω-αριστερά" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Κάτω-δεξιά" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Κάτω" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Εξωτερικά" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Εμφάνιση του καννάβου" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Εμφάνιση πλήρων περιγραμμάτων" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Χρήση χρωμάτων" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Εμφάνιση εμβόλιμα" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Λογαριθμική κλίμακα x" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Λογαριθμική κλίμακα y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Επιλογές αρχείου" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Αποθήκευση γραφικής απεικόνισης σε αρχείο" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Τύπος αρχείου" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Ανίχνευση από το όνομα αρχείου" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Το Qalculate! δεν είναι ένα συνηθισμένο λογισμικό αντιγραφή της φθηνότερης " +"διαθέσιμης αριθμομηχανής. Το Qalculate! στοχεύει στο να αξιοποιήσει πλήρως " +"την ανώτερη διεπαφή, την ισχύ και την ευελιξία που παρέχουν οι σύγχρονοι " +"υπολογιστές. Στο επίκεντρο της προσοχής του Qalculate! είναι η εισαγωγή " +"εκφράσεων. Αντί να εισάγετε κάθε αριθμό στη μαθηματική έκφραση ξεχωριστά, " +"μπορείτε να γράψετε απ' ευθείας όλη την έκφραση και στη συνέχεια να την " +"τροποποιήσετε. Η ερμηνεία των εκφράσεων είναι ευέλικτη και ανεκτική σε " +"σφάλματα και αν παρόλα αυτά κάνετε κάτι λάθος, το Qalculate! θα σας " +"ειδοποιήσει σχετικά. Εκφράσεις που δεν είναι πλήρως επιλύσιμες δεν αποτελούν " +"σφάλματα. Το Qalculate! θα τις απλοποιήσει όσο μπορεί και θα απαντήσει με " +"μια έκφραση. Επιπλέον των αριθμών και των αριθμητικών τελεστών, μια έκφραση " +"μπορεί να περιέχει έναν οποιοδήποτε συνδυασμό μεταβλητών, μονάδων και " +"συναρτήσεων." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Αν και πώς οι μονάδες θα μετατραπούν αυτόματα. Αν ενεργοποιηθεί, η μετατροπή " +"γίνεται στις κατάλληλες αντίστοιχες μονάδες του Διεθνούς Συστήματος (το " +"ελάχιστο πλήθος μονάδων)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" +"Προκαθορισμένη μονάδα μέτρησης γωνίας για τις τριγωνομετρικές συναρτήσεις." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Βάση των αναλυμένων και υπολογισμένων αριθμών." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Αν το αποτέλεσμα του υπολογισμού θα απλοποιηθεί ή θα παραγοντοποιηθεί." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Αν οι ρητοί αριθμοί θα εμφανίζονται ως δεκαδικοί, ως κλάσματα ή ως κάτι " +"ενδιάμεσο." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Δείχνει ότι η σειρά των δεκαδικών ψηφίων ενός αριθμού συνεχίζει για πάντα " +"εμφανίζοντας τρεις τελείες, αντί να στρογγυλοποιηθεί (π.χ. το 2/3 " +"εμφανίζεται ως 0.666666... αντί ως 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Χρήση όλων των δεκαδικών προθεμάτων του Διεθνούς Συστήματος. Αν δεν " +"ενεργοποιηθεί, τα προθέματα που δεν είναι πολλαπλάσια του 1000 (centi, deci, " +"deca, hecto) δε θα χρησιμοποιηθούν αυτόματα." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Αν ενεργοποιηθεί, θα χρησιμοποιηθούν αρνητικοί εκθέτες αντί διαίρεσης (π.χ. " +"το 5/x^2 γίνεται 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Αριθμητική εμφάνιση." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Αν ενεργοποιηθεί, οι γραφικές απεικονίσεις θα εμφανίζονται μέσα στο φύλλο " +"εργασίας. Διαφορετικά, θα εμφανίζονται σε ξεχωριστό παράθυρο." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Αν πρέπει να χρησιμοποιούνται χρώματα στις γραφικές απεικονίσεις." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Αν ο κάνναβος πρέπει να απεικονίζεται γραφικά." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" +"Αν τα πλήρη περιγράμματα πρέπει να σχεδιάζονται γύρω από τη γραφική " +"απεικόνιση." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Πλάτος γραμμών, σε εικονοστοιχεία." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" +"Ο αριθμός των βημάτων παρεμβολής που θα χρησιμοποιηθούν στη γραφική " +"απεικόνιση." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Λειτουργία εξομάλυνσης στις γραφικές απεικονίσεις." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Στυλ γραφικών απεικονίσεων." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Θέση υπομνήματος στις γραφικές απεικονίσεις." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Το Qalculate αναφέρει ότι δε μπορεί να εκτυπώσει. Έχει εγκατασταθεί το " +"gnuplot;" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "μη διαθέσιμο το %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "το %1 πρέπει να είναι αριθμός." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "το %1 πρέπει να είναι ακέραιος." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "το %1 πρέπει να είναι τύπου Μπουλ." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "μη έγκυρη επιλογή για το %1:%2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" +"βρέθηκαν πολλαπλές εκφράσεις σε μια εντολή γραφικής απεικόνισης (%1 και %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ΣΦΑΛΜΑ" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Δεν υπάρχει συνάρτηση, μεταβλητή ή μονάδα με το συγκεκριμένο όνομα." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Συνάρτηση: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Περιβάλλον γραφικής απεικόνισης" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Απεικονίζει γραφικά μια ή περισσότερες συναρτήσεις είτε εμβόλιμα είτε σε " +"ξεχωριστό παράθυρο." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "έκφραση" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "επιλογή" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "τιμή" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "ακέραιος" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "τύπος Μπουλ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "αριθμός" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "προκαθορισμένο: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Το όνομα της συνάρτησης" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Τίτλος ετικέτας" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "ετικέτα άξονα x" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "ετικέτα άξονα y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Η εικόνα στην οποία θα αποθηκευθεί η γραφική απεικόνιση. Αν είναι κενό, " +"εμφανίζει τη γραφική απεικόνιση σε ένα παράθυρο στην οθόνη. Αν έχει επιλεγεί " +"η εμβόλιμη απεικόνιση, η εικόνα εμφανίζεται ανεξαρτήτως της συγκεκριμένης " +"επιλογής." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Ο τύπος εικόνας προς αποθήκευση. Ένα από τα εξής: auto, png, ps, eps, latex, " +"svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Ενεργοποιήστε για έγχρωμες απεικονίσεις, μην ενεργοποιήσετε για μονόχρωμες." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Ελάχιστη τιμή άξονα x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Μέγιστη τιμή άξονα x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Αν θα χρησιμοποιηθεί λογαριθμική κλίμακα για τον άξονα x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Αν θα χρησιμοποιηθεί λογαριθμική κλίμακα για τον άξονα y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Βάση λογαρίθμου για τον άξονα x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Βάση λογαρίθμου για τον άξονα y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Αν θα εμφανίζεται ένας κάνναβος στη γραφική απεικόνιση." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Αν η γραφική απεικόνιση θα περιβάλλεται από περιγράμματα απ' όλες τις " +"πλευρές (όχι μόνο στους άξονες)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Πλάτος γραμμών." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Πού θα εμφανίζεται το υπόμνημα της γραφικής απεικόνισης. Ένα από τα: εξής " +"πουθενά, πάνω_αριστερά, πάνω_δεξιά, κάτω_αριστερά, κάτω_δεξιά, κάτω, " +"εξωτερικά" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Εξομάλυνση γραφικής απεικόνισης. Ένα από τα εξής: καθόλου, μοναδική, " +"csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Στυλ γραφικής απεικόνισης. Ένα από τα εξής: γραμμές, σημεία, σημεία_γραμμές, " +"πλαίσια, ιστόγραμμα, βήματα, κηροπήγια, τελείες" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Χρήση κλίμακας στον δεύτερο άξονα χ." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Χρήση κλίμακας στον δεύτερο άξονα y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Αν η γραφική απεικόνιση θα σχεδιαστεί εμβόλιμα και όχι σε νέο παράθυρο." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Η απόσταση μεταξύ δύο σημείων παρεμβολής. Δείτε επίσης τα βήματα." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Αριθμός σημείων παρεμβολής. Δείτε επίσης το βήμα." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Το όνομα της μεταβλητής χ. Πρέπει να είναι μια άγνωστη μεταβλητή" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Αποθήκευση μεταβλητών σε αρχείο" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Αποθήκευση όλων των τρεχουσών μεταβλητών σε αρχείο. Μπορούν να " +"επαναφορτωθούν με %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "αρχείο" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "αρχείο: το αρχείο στο οποίο θα γίνει η αποθήκευση" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Φόρτωση μεταβλητών από αρχείο" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" +"Φόρτωση μεταβλητών από αρχείο το οποίο δημιουργήθηκε προηγουμένως από το %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "αρχείο: το αρχείο προς φόρτωση" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Γενικά" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Βάση αριθμού:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Μορφή κλάσματος:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Δεκαδικός" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Ακριβές" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Κλασματικό" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Συνδυασμένο" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Αριθμητική εμφάνιση:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Καθαρή" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Επιστημονική" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Ακρίβεια" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Ένδειξη μη πεπερασμένων ακολουθιών:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Ενεργοποιημένο" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Χρήση όλων των προθεμάτων του Διεθνούς Συστήματος:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Χρήση αρνητικών εκθετών:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Υπολογισμός" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Μετατροπή στις καταλληλότερες μονάδες του Διεθνούς Συστήματος:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Μονάδα μέτρησης γωνίας:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Ακτίνια" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Μοίρες" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Βαθμοί" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Λειτουργία κατασκευής:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Απλοποίηση" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Παραγοντοποίηση" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Γραφική απεικόνιση" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Εμφάνιση γραφικών απεικονίσεων εμβόλιμα:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Έγχρωμες γραφικές απεικονίσεις:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Εμφάνιση καννάβου:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Εμφάνιση πλήρων περιγραμμάτων:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Πλάτος γραμμών:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Ρυθμός δειγματοληψίας:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Λειτουργία εξομάλυνσης:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Φυσικές κυβικές καμπύλες spline" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Στιλ γραφικής απεικόνισης:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Βήματα" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Θέση υπομνήματος:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"Η R είναι μια γλώσσα και ταυτόχρονα ένα περιβάλλον για στατιστική " +"επεξεργασία και δημιουργία γραφικών, παρόμοια με τη γλώσσα S.
    Παρέχει " +"μια μεγάλη ποικιλία στατιστικών (γραμμικά και μη γραμμικά μοντέλα, κλασικά " +"τεστ στατιστικής, ανάλυση χρονολογικών σειρών, ταξινόμηση, ομαδοποίηση, ...) " +"και γραφικών τεχνικών και είναι επεκτάσιμη σε μεγάλο βαθμό. Η γλώσσα S είναι " +"πολύ συχνά το όχημα που επιλέγεται για την έρευνα στη στατιστική " +"μεθοδολογία, ενώ η γλώσσα R αποτελεί μια Ανοικτού Κώδικα οδό προς τη " +"συμμετοχή σε αυτήν τη δραστηριότητα." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Σφάλμα κατά το άνοιγμα του αρχείου %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Αρχείο σεναρίου της R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Σφάλμα κατά την ανάλυση της εντολής" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Κάντε διπλό κλικ για να ανοίξει ο διάλογος επιλογής αρχείου" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|πηγαία αρχεία της R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Το Sage είναι Ελεύθερο Λογισμικό / Λογισμικό Ανοικτού Κώδικα για τα " +"μαθηματικά, αδειοδοτημένο με τους όρους της GPL.
    Συνδυάζει τη δύναμη " +"πολλών πακέτων ανοικτού κώδικα σε ένα σύνηθες γραφικό περιβάλλον που " +"βασίζεται στη γλώσσα Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Διαδρομή προς το εκτελέσιμο Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Αποτέλεσμα του %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Το τελευταίο αποτέλεσμα ήταν: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Αρχείο σεναρίου της Python (*.py);;Αρχείο σεναρίου του Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Η διεργασία του Sage κατέρρευσε κατά τον υπολογισμό αυτής της έκφρασης" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Η διεργασία του Sage κατέρρευσε" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Η διεργασία του Sage τερμάτισε κατά τον υπολογισμό αυτής της έκφρασης" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Η διεργασία του Sage τερμάτισε" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Αδυναμία έναρξης του Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Διαδρομή προς το Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Το Scilab είναι ελεύθερο λογισμικό, αποτελεί ένα πακέτο αριθμητικών " +"υπολογισμών συμβατό με πολλές πλατφόρμες και μια υψηλού επιπέδου γλώσσα " +"προγραμματισμού για αριθμητική ανάλυση.

    Το Scilab διανέμεται με την άδεια " +"CeCILL (συμβατή με τη GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Διαδρομή προς την εντολή scilab-adv-cli (Προειδοποίηση: η έκδοση του Scilab " +"πρέπει να είναι η 5.4 ή μεταγενέστερη)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Αρχείο σεναρίου της Scilab (*.sce);;Αρχείο συνάρτησης Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Διαδρομή προς την εντολή scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Λήψη φύλλων εργασίας - παραδειγμάτων" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Άνοιγμα παραδείγματος" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Φύλλο εργασίας του Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Άνοιγμα αρχείου" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Δε βρέθηκε σύστημα υποστήριξης

    \n" +"
    Μπορείτε να δοκιμάσετε:\n" +"
    • Να αλλάξετε τις ρυθμίσεις μέσω του αντίστοιχου διαλόγου " +"διαμόρφωσης.
    • Να εγκαταστήσετε πακέτα για το ακόλουθο πρόγραμμα: %2
    " +msgstr[1] "" +"

    Δε βρέθηκε σύστημα υποστήριξης

    \n" +"
    Μπορείτε να δοκιμάσετε:\n" +"
    • Να αλλάξετε τις ρυθμίσεις μέσω του αντίστοιχου διαλόγου " +"διαμόρφωσης.
    • Να εγκαταστήσετε πακέτα για ένα από τα ακόλουθα " +"προγράμματα:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Σφάλμα" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Συνεδρία %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Δε βρέθηκε το τμήμα του Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Πολλά μη αποθηκευμένα φύλλα εργασίας είναι ανοιχτά. Να κλείσουν;" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Κλείσιμο Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Το τρέχον έργο έχει τροποποιηθεί. Θέλετε να αποθηκευθεί;" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Αποθήκευση έργου" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Το σύστημα υποστήριξης που χρησιμοποιείται ως προκαθορισμένο" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Προεπιλεγμένη πραγματοποίηση στοιχειοθεσίας" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Προεπιλεγμένη πραγματοποίηση επισήμανσης σύνταξης" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Προεπιλεγμένη ενεργοποίηση συμπλήρωσης" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Προεπιλεγμένη ενεργοποίηση αρίθμησης εκφράσεων" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Προεπιλογή εφέ κίνησης αλλαγών στο φύλλο εργασίας" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Αυτόματος εκ νέου υπολογισμός των καταχωρήσεων κάτω από την τρέχουσα" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Το σύστημα υποστήριξης %1 δεν είναι εγκατεστημένο" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Υπάρχουν μερικά προβλήματα με το σύστημα υποστήριξης %1,\n" +"παρακαλώ ελέγξτε τη διαμόρφωσή σας ή εγκαταστήστε τα \n" +"απαιτούμενα πακέτα. Είναι δυνατή μόνο η προβολή\n" +"του συγκεκριμένου φύλλου εργασίας." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Αποθήκευση ως απλό κείμενο" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Εξαγωγή σε LaTex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Υπολογισμός φύλλου εργασίας" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Στοιχειοθεσία με τη χρήση του LaTex" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Συντακτική επισήμανση" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Συμπλήρωση" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Αρίθμηση γραμμών" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Εφέ κίνησης φύλλου εργασίας" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Επανεκκίνηση συστήματος υποστήριξης" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Υπολογισμός καταχώρησης" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Εισαγωγή καταχώρησης εντολής" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Εισαγωγή καταχώρησης κειμένου" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Εισαγωγή καταχώρησης εντολής" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Εισαγωγή καταχώρησης LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Εισαγωγή διακοπής σελίδας" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Εισαγωγή εικόνας" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Αφαίρεση της τρέχουσας καταχώρησης" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Εμφάνιση βοήθειας για το %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Εμφάνιση επεξεργαστή δέσμης εντολών" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Εμφάνιση ολοκλήρωσης" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Τμήμα του Cantor" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Αποθήκευση ως" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Αποθήκευση" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Επανεκκίνηση συστήματος υποστήριξης" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Διακοπή" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Υπολογισμός..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Έτοιμο" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Σφάλμα συνεδρίας: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Η αρχικοποίηση ολοκληρώθηκε" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Αρχικοποίηση συνεδρίας" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Ανώνυμο" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Θέλετε να στείλετε το παρόν φύλλο εργασίας στον δημόσιο διακομιστή;" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Ερώτηση - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Το φύλλο εργασίας δεν έχει αποθηκευθεί. Πρέπει να το αποθηκεύσετε πριν την " +"αποστολή του." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Προειδοποίηση - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Το συγκεκριμένο σύστημα υποστήριξης δεν υποστηρίζει σενάρια." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Επεξεργασία" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Προβολή" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Φύλλο εργασίας" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Αρχείο" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Νέο" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Πίνακες" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Ρυθμίσεις" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Έτοιμο" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "Εύρος Χ" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "Εύρος Χ" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "Εύρος Χ" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "&Χρώμα κειμένου..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Γραμματοσειρά" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "Έ&ντονα" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Πλάγια" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Διακόπηκε" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Γραμμή Αναζήτησης" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Εύρεση:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Επόμενο" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Προηγούμενο" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Αντικατάσταση:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Αντικατάσταση" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Αντικατάσταση ό&λων" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Αναζήτηση σε:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Ταίριασμα πεζών/κεφαλαίων" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Διαμόρφωση εικόνας" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Κάντε δεξί κλικ εδώ για να εισάγετε εικόνα" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Αδυναμία φόρτωσης εικόνας %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Ρυθμίσεις εικόνας" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Άνοιγμα" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Μέγεθος εμφάνισης" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Πλάτος" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Ύψος" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Προεπισκόπηση" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Μέγεθος εκτύπωσης" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Χρήση μεγέθους εμφάνισης" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(αυτόματο)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Άνοιγμα αρχείου εικόνας" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Εμφάνιση κώδικα LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Διαδρομή προς το εκτελέσιμο latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Διαδρομή προς το εκτελέσιμο dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Όνομα" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Τιμή" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Από:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Προς:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Κύριος τίτλος" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Κλίμακα Abscissa" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Κλίμακα τεταγμένης" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Τίτλος γραφικής απεικόνισης:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Περιβάλλον του KDE για μαθηματικές εφαρμογές" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" +"Συντηρητής
    Μεταφορά Qt5/KF5, συστήματα υποστήριξης Scilab και Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Αρχικός συγγραφέας
    Συντηρητής (2009-2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Σύστημα υποστήριξης KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Σύστημα υποστήριξης Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Περιβάλλον" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Εικονίδιο Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Χρήση συστήματος υποστήριξης " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Έγγραφα για άνοιγμα." + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Σφάλμα κατά το άνοιγμα του αρχείου %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Διακοπή σελίδας ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Ο τρόπος του KDE για να ασχοληθείτε με τα μαθηματικά" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Όνομα:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Τιμή:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Προσθήκη νέας μεταβλητής" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Φόρτωση μεταβλητών" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Αποθήκευση μεταβλητών" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Καθαρισμός μεταβλητών" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Επιθυμείτε σίγουρα να αφαιρέσετε όλες τις μεταβλητές;" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Επιβεβαίωση - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Φόρτωση αρχείου" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Αφαίρεση αποτελέσματος" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Αδυναμία εύρεσης επεξεργαστή κειμένου του KDE·\n" +"παρακαλώ ελέγξτε την εγκατάσταση του KDE σας." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Επεξεργαστής σεναρίων" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Επεξεργαστής σεναρίων - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Δε βρέθηκε" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Φτάσαμε στην αρχή" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Φτάσαμε στο τέλος" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Αντικαταστάθηκε %1 στιγμιότυπο" +msgstr[1] "Αντικαταστάθηκαν %1 στιγμιότυπα" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Εντολές" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Αποτελέσματα" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Σφάλματα" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Κείμενο" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Κώδικας LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Προκαθορισμένο σύστημα υποστήριξης:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Όταν είναι ενεργοποιημένο, το Cantor θα υπολογίσει αυτόματα κάθε καταχώρηση " +"που βρίσκεται κάτω από την τρέχουσα." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Εκ νέου υπολογισμός των καταχωρήσεων αυτόματα" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Προκαθορισμένα" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Ενεργοποίηση στοιχειοθέτησης LaTex" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Ενεργοποίηση επισήμανσης σύνταξης" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Ενεργοποίηση συμπλήρωσης" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Ενεργοποίηση αρίθμησης γραμμών" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Ενεργοποίηση εφέ κίνησης για το φύλλο εργασίας" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Εμφάνιση αποτύπωσης" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Εμφάνιση κώδικα" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Αδυναμία αποτύπωσης του αρχείου Eps. Μπορεί να χρειάζεστε επιπλέον πακέτα." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Αδυναμία εγγραφής του αρχείου %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Αδυναμία εγγραφής στο αρχείο." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Σφάλμα αποθήκευσης του αρχείου %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Σφάλμα κατά τη φόρτωση του φύλλου στυλ latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Καταχώρηση εντολής" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Καταχώρηση κειμένου" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Εισαγωγή καταχώρησης εντολής" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Καταχώρηση LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Εικόνα" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Αλλαγή σελίδας" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Εισαγωγή καταχώρησης κειμένου" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +msgid "Insert Entry Before" +msgstr "Εισαγωγή καταχώρησης" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Εισαγωγή καταχώρησης LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Χρώμα κειμένου..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Χρώμα" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Επισήμανση &κειμένου..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Γραμματοσειρά" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Μέγεθος γραμματοσειράς" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "Έ&ντονα" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Πλάγια" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Υπογράμμιση" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Επιγράμμιση" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Στοίχιση &αριστερά" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Αριστερά" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Στοίχιση στο &κέντρο" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Κέντρο" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Στοίχιση &δεξιά" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Δεξιά" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Ευθυγράμμιση" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Ευθυγράμμιση" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Αφαίρεση καταχώρησης" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Σύρσιμο καταχώρησης" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Το σύστημα υποστήριξης με το οποίο δημιουργήθηκε αυτό το αρχείο δεν έχει " +#~ "εγκατασταθεί. Χρειάζεται το %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Δημοσίευση φύλλου εργασίας" + +#~ msgid "Waiting for Image..." +#~ msgstr "Αναμονή για εικόνα..." + +#~ msgid "Insert" +#~ msgstr "Εισαγωγή" + +#~ msgid "Insert Before" +#~ msgstr "Εισαγωγή πριν" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "αδυναμία ανοίγματος του αρχείου %1: άγνωστο MimeType" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Έγγραφο LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Φύλλο εργασίας του Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Διακομιστής για το σύστημα υποστήριξης της R για το Cantor" + +#~ msgid "R Server" +#~ msgstr "R Server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Χρήση: αρχείο saveVariables" + +#~ msgid "Saving failed." +#~ msgstr "Η αποθήκευση απέτυχε." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Χρήση: αρχείο loadVariables" + +#~ msgid "Loading failed." +#~ msgstr "Η φόρτωση απέτυχε." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Διαδρομή προς την εντολή python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Διακομιστής του Cantor για την R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Επιθυμείτε την εξαγωγή και των εικόνων;" + +#~ msgid "Path to python2 command:" +#~ msgstr "Διαδρομή προς την εντολή python:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Ενεργοποίηση της διαχείρισης μεταβλητών" + +#~ msgid "Could not start the server." +#~ msgstr "Αδυναμία εκκίνησης του διακομιστή." + +#~ msgid "Pause Animation" +#~ msgstr "Παύση κινούμενης απεικόνισης" + +#~ msgid "Start Animation" +#~ msgstr "Έναρξη κινούμενης απεικόνισης" + +#~ msgid "Restart Animation" +#~ msgstr "Επανεκκίνηση κινούμενης απεικόνισης" + +#, fuzzy +#~ msgid "Append Command Entry" +#~ msgstr "Εισαγωγή καταχώρησης" + +#, fuzzy +#~ msgid "Append Text Entry" +#~ msgstr "Εισαγωγή καταχώρησης" + +#, fuzzy +#~ msgid "Append Latex Entry" +#~ msgstr "Εισαγωγή καταχώρησης" + +#~ msgid "Other" +#~ msgstr "Άλλο" + +#~ msgid "And %1 more..." +#~ msgstr "Και %1 περισσότερο..." + +#~ msgid "Main Toolbar" +#~ msgstr "Κύρια εργαλειοθήκη" + +#~ msgid "Completion Style:" +#~ msgstr "Στυλ ολοκλήρωσης" + +#~ msgid "Popup" +#~ msgstr "Αναδυόμενο" + +#~ msgid "The style used for Completion" +#~ msgstr "Το στυλ που χρησιμοποιείται για την ολοκλήρωση" + +#, fuzzy +#~ msgid "Path to the Scilab executable" +#~ msgstr "Διαδρομή προς το εκτελέσιμο Sage" + +#, fuzzy +#~ msgid "Insert Command Entry Before" +#~ msgstr "Εισαγωγή καταχώρησης" + +#, fuzzy +#~ msgid "Command Entry Before" +#~ msgstr "Εισαγωγή καταχώρησης" + +#~ msgid "Help" +#~ msgstr "Βοήθεια" + +#~ msgid "Show Help Panel" +#~ msgstr "Εμφάνιση του πίνακα βοήθειας" diff --git a/po/en_GB/cantor.po b/po/en_GB/cantor.po new file mode 100644 index 0000000..84967e6 --- /dev/null +++ b/po/en_GB/cantor.po @@ -0,0 +1,3337 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Andrew Coles , 2009, 2010, 2011. +# Steve Allewell , 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-12-02 17:04+0000\n" +"Last-Translator: Steve Allewell \n" +"Language-Team: British English \n" +"Language: en_GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrew Coles, Steve Allewell" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrew_coles@yahoo.co.uk, steve.allewell@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pause" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stop" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Save result" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Advanced Plotting" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Plot" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expression:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Additional options:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Plot" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Option active" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calculate" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differentiate" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variable:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Times: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Package" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Import Package" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Package:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrate" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Lower limit:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Upper limit:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "definite integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Linear Algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Create Matrix" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Columns:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rows:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Compute Eigenvalues" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrix:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Compute Eigenvectors" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invert Matrix" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Plot 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Name" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Plot 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1st Variable" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2nd Variable" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Run Script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Solve equations" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Equations:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variables:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Choose the Backend to use:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Make this the default backend" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Path to the Julia native REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrate Plots into the Worksheet" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia script file (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Path to Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrate Plots in Worksheet (start a new session when changed)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Inline Plots Intermediate Format:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "List of scripts to autorun at the beginning of session" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Error: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts to autorun" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Path to luajit command" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua script file (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Path to luajit command:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Path to the Maxima executable" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Enable Variable Management" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Error: Too many */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Error: Too many /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Error: expected \" before ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Waiting for the plot result" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima batch file (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Failed to start Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima crashed. restarting..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima crashed twice within a short time. Stopping to try starting" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Error - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "function" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Path to Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrate Plots in Worksheet" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Let Cantor follow the creation/destruction of variables" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Path to the Octave executable" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave script file (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntax Error" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Path to Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python script file (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Plot Dialogue" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Functions" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Title" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expression" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Add" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Remove" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Clear List" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X variable" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Style" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Lines" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Points" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Points and Lines" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Boxes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Steps" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Candlesticks" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Dots" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Smoothing" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "None" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotonic" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Natural Cubic Splines" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotonic)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Function Range" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X range" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Sa&mpling rate" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Step si&ze" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Options" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Plot title" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-axis label" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-axis label" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Legend position" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Hide legend" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Top-left" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Top-right" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Bottom-left" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Bottom-right" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Below" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Outside" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Display Grid" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Display full border" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Use Colours" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Display inline" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logarithmic x scale" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logarithmic y scale" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "File Options" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Save plot to file" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "File type" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detect from filename" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The centre of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Default angle unit for trigonometric functions." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Base of parsed and evaluated numbers." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "If the evaluation result will be simplified or factorised." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numerical display." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Whether colours should be used in plots." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Whether a grid should be plotted." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Whether full borders should be drawn around the plot." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Width of lines, in pixels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Number of interpolation steps to be used in plotting." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Smoothing mode in plots." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Style of plots." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Legend position in plots." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate reports it cannot print. Is gnuplot installed?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "missing %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 must be a number." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 must be a integer." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 must be a boolean." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "invalid option for %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "found multiple expressions in one plot command (%1 and %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERROR" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "WARNING" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "No function, variable or unit with specified name exist." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Function: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Plotting interface" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Plots one or more functions either inline or in a separate window." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expression" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "option" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "value" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "integer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolean" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "number" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "default: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "The function's name" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Title label" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-axis label" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-axis label" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Set to true for coloured plot, false for monochrome." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minimum x-axis value." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Maximum x-axis value." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "If a logarithmic scale shall be used for the x-axis." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "If a logarithmic scale shall be used for the y-axis." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logarithmic base for the x-axis." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logarithmic base for the y-axis." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "If a grid shall be shown in the plot." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"If the plot shall be surrounded by borders on all sides (not just axis)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Width of lines." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Plot smoothing. One of none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Use scale on second x-axis." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Use scale on second y-axis." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "If the plot is to be drawn inline, instead of in a new window." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Distance between two interpolation points. See also steps." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Number of interpolation points. See also step." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "The name of the x variable. This must be an unknown variable" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Save variables to a file" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Save all currently defined variables to a file. They can be reloaded with %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "file" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "file: the file to save to" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Load variables from a file" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Load variables from a file that has previously been created by %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "file: the file to load" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "General" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Number base:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Fraction format:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exact" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fractional" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combined" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Numerical display:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pure" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Scientific" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precision" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indicate infinite series:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Enabled" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Use all SI prefixes:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Use negative exponents:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Evaluate" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Convert to best SI units:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Angle unit:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radians" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Degrees" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradians" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Structuring Mode:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplify" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factorise" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Plotting" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Display plots inline:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Coloured Plots:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Show grid:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Show full borders:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Width of lines:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Sampling rate:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Smoothing Mode:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Natural cubic Splines" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Plot Style:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Steps" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Legend Position:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Error opening file %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R script file (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Error Parsing Command" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Double click to open file selection dialogue" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R source files (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Path to the Sage executable" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Result of %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"The last output was: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python script file (*.py);;Sage script file (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "The Sage process crashed while evaluating this expression" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "The Sage process crashed" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "The Sage process exited while evaluating this expression" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "The Sage process exited" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Failed to start Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Path to Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL licence (GPL compatible)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab script file (*.sce);;Scilab function file (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Path to scilab-adv-cli command:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Download Example Worksheets" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Open Example" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Go to previous worksheet" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Go to next worksheet" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor Worksheet (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Open file" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the configuration dialogue;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgstr[1] "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the configuration dialogue;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Error" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Session %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Could not find the Cantor Part." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Multiple unsaved Worksheets are opened. Do you want to close them?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Close Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "The current project has been modified. Do you want to save it?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Save Project" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "The Backend that is used by default" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Do Typesetting by default" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Do Syntax Highlighting by default" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Enable Completions by default" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Enable Numbering of Expressions by default" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animate changes in the Worksheet by default" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automatically reevaluate the entries below the current" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Ask for confirmation when restarting the backend" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Backend %1 is not installed" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Save Plain Text" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Export to LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Evaluate Worksheet" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Typeset using LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntax Highlighting" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Completion" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Line Numbers" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animate Worksheet" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Restart Backend" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Evaluate Entry" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Insert Command Entry" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Insert Text Entry" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Insert Markdown Entry" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Insert Latex Entry" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Insert Page Break" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Insert Image" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Remove current Entry" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Show %1 Help" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Show Script Editor" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Show Completion" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Save as" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Save" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Restart %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrupt" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Calculating..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Ready" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Session Error: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initialisation complete" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Initialising..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Unnamed" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[read-only]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Do you want to upload current Worksheet to public web server?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Question - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "The Worksheet is not saved. You should save it before uploading." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Warning - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "This backend does not support scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Edit" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&View" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Worksheet" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&File" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&New" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panels" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Settings" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "White" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Black" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Dark Red" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Red" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Light Red" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Dark Green" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Green" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Light Green" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Dark Blue" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blue" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Light Blue" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Dark Yellow" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Yellow" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Light Yellow" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Dark Cyan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cyan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Light Cyan" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Dark Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Light Magenta" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Dark Orange" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Orange" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Light Orange" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Dark Grey" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Grey" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Light Grey" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Background Colour" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Text Colour" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Font" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Bold" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Italic" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Increase Size" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Decrease Size" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Select" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrupted" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "SearchBar" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Find:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Next" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Previous" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Replace:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Replace" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Replace &All" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Search in:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Match case" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configure Image" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Right click here to insert image" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Cannot load image %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Image Settings" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Open" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Display Size" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Width" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Height" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Preview" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Print Size" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Use Display Size" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Open image file" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Show LaTeX code" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Path to the latex executable" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Path to the dvips executable" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Name" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Value" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "From:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "To:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Main title" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abscissa scale" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinate scale" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Plot title:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE Frontend to mathematical applications" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Maintainer
    Qt5/KF5 port, Scilab and Python backends" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Original author
    Maintainer (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra backend" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave backend" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interface" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor icon" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Use backend " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documents to open." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Could not open the file %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Page Break ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    The KDE way to do Mathematics" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Name:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Value:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Add new variable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Load Variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Store Variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Clear Variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Are you sure you want to remove all variables?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmation - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Load file" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Remove result" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Script Editor" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Script Editor - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Not found" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Reached beginning" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Reached end" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Replaced %1 instance" +msgstr[1] "Replaced %1 instances" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Commands" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Results" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Errors" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX Code" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Default Backend:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Reevaluate Entries automatically" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Defaults" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Enable LaTeX Typesetting" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Enable Syntax Highlighting" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Enable Completion" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Enable Line Numbers" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Enable Worksheet Animations" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Show Rendered" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Show Code" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Cannot render Eps file. You may need additional packages" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Cannot write file %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Cannot write file." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Error saving file %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"In read-only mode Cantor could not guarantee, that the export will be valid " +"for %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Error loading latex.xsl stylesheet" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "The selected file is not a valid Cantor project file." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"%1 backend was not found. Editing and executing entries is not possible" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Command Entry" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Text Entry" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Markdown Entry" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX Entry" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Image" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Page Break" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Insert Entry After" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Insert Entry Before" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Insert LaTeX Entry" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Text &Colour..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Colour" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Text &Highlight..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Font" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Font &Size" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Bold" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Italic" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Underline" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Strike Out" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Align &Left" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Left" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Align &Centre" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centre" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Align &Right" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Right" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justify" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justify" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Remove Entry" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Drag Entry" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publish Worksheet" + +#~ msgid "Waiting for Image..." +#~ msgstr "Waiting for Image..." + +#~ msgid "Insert" +#~ msgstr "Insert" + +#~ msgid "Insert Before" +#~ msgstr "Insert Before" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "cannot open file %1: Unknown MimeType" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX Document" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor Worksheet" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server for the Cantor R Backend" + +#~ msgid "R Server" +#~ msgstr "R Server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Usage: saveVariables file" + +#~ msgid "Saving failed." +#~ msgstr "Saving failed." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Usage: loadVariables file" + +#~ msgid "Loading failed." +#~ msgstr "Loading failed." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Path to python command" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor Server for R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Do you also want to export the images?" + +#~ msgid "Could not start the server." +#~ msgstr "Could not start the server." + +#~ msgid "Pause Animation" +#~ msgstr "Pause Animation" + +#~ msgid "Start Animation" +#~ msgstr "Start Animation" + +#~ msgid "Restart Animation" +#~ msgstr "Restart Animation" + +#~ msgid "Append Command Entry" +#~ msgstr "Append Command Entry" + +#~ msgid "Append Text Entry" +#~ msgstr "Append Text Entry" + +#, fuzzy +#~| msgid "Append Text Entry" +#~ msgid "Append Latex Entry" +#~ msgstr "Append Text Entry" + +#~ msgid "Other" +#~ msgstr "Other" + +#~ msgid "And %1 more..." +#~ msgstr "And %1 more..." + +#~ msgid "Main Toolbar" +#~ msgstr "Main Toolbar" + +#~ msgid "Completion Style:" +#~ msgstr "Completion Style:" + +#~ msgid "Popup" +#~ msgstr "Popup" + +#~ msgid "The style used for Completion" +#~ msgstr "The style used for Completion" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Path to the Sage executable" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Insert Command Entry Before" + +#~ msgid "Command Entry Before" +#~ msgstr "Command Entry Before" + +#~ msgid "GroupBox" +#~ msgstr "GroupBox" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "This test requires a functioning %1 backend" + +#~ msgid "Form" +#~ msgstr "Form" + +#~ msgid "Help" +#~ msgstr "Help" + +#~ msgid "Show Help Panel" +#~ msgstr "Show Help Panel" + +#~ msgid "Uploading successful" +#~ msgstr "Uploading successful" + +#~ msgid "Error uploading File %1" +#~ msgstr "Error uploading File %1" + +#~ msgid "MathematiKPart" +#~ msgstr "MathematiKPart" + +#~ msgid "MathematiK" +#~ msgstr "MathematiK" + +#, fuzzy +#~ msgid "" +#~ "

    No Backend Found

    \n" +#~ "
    You could " +#~ "try: \n" +#~ "
      \n" +#~ "
    • Changing the settings in the " +#~ "config dialog;
    • \n" +#~ "
    • Installing packages for one of " +#~ "the following programs:
    • \n" +#~ " %1 \n" +#~ "
        \n" +#~ "
    " +#~ msgstr "" +#~ "

    No Backend found!

    \n" +#~ "
    You may " +#~ "try: \n" +#~ "
      \n" +#~ "
    • change settings in the config " +#~ "dialog
    • \n" +#~ "
    • Install packages for one of the " +#~ "following Software:
    • \n" +#~ " %1 \n" +#~ "
        \n" +#~ "
    " diff --git a/po/eo/cantor.po b/po/eo/cantor.po new file mode 100644 index 0000000..7f5fe52 --- /dev/null +++ b/po/eo/cantor.po @@ -0,0 +1,3085 @@ +# Translation of cantor into esperanto. +# Axel Rousseau , 2009. +# Eliovir , 2015. #zanata +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2015-03-15 08:54-0400\n" +"Last-Translator: Eliovir \n" +"Language-Team: esperanto \n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Zanata 3.5.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Axel Rousseau" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "axel@esperanto-jeunes.org" + +# auto translated by TM merge from project: Enlightenment, version: master, DocId: enlightenment/modules/photo/po/photo +#: animationresultitem.cpp:53 +#, fuzzy, kde-format +msgid "Pause" +msgstr "Paŭzo" + +# auto translated by TM merge from project: KDE por esperantistoj, version: kdeedu, DocId: kdeedu/marble +#: animationresultitem.cpp:56 +#, fuzzy, kde-format +msgid "Start" +msgstr "Startigo" + +# auto translated by TM merge from project: KDE por esperantistoj, version: kdeedu5, DocId: kdeedu/parley +#: animationresultitem.cpp:60 +#, fuzzy, kde-format +msgid "Stop" +msgstr "Halti" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Esprimo:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Kromaj elektebloj:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Kalkulu" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variablo:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Fojoj:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importi pakon" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakon:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Malsupra limo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Supra limo:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Krei matricon" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolumnoj:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Vicoj:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrico:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variablo" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nomo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimumo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimumo:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1a variablo" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2a variablo" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, fuzzy, kde-format +msgid "Run Script" +msgstr "Informpeti" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ekvacioj:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabloj:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "https://edu.kde.org/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Eraro: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, fuzzy, kde-format +msgid "Expression" +msgstr "Esprimo:" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, fuzzy, kde-format +msgid "Remove" +msgstr "Rezulto" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, fuzzy, kde-format +msgid "Clear List" +msgstr "Variablo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, fuzzy, kde-format +msgid "X variable" +msgstr "Variablo" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, fuzzy, kde-format +msgid "expression" +msgstr "Esprimo:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, fuzzy, kde-format +msgid "value" +msgstr "Variablo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, fuzzy, kde-format +msgid "Load variables from a file" +msgstr "Variablo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Ĝeneralo" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, fuzzy, kde-format +msgid "Precision" +msgstr "Esprimo:" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, fuzzy, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://wiki.r-project.org/rwiki/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open" +msgid "Open file" +msgstr "Malfermi" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Eraro" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Seanco %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Sintaksemfazo" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +msgid "Insert Markdown Entry" +msgstr "Rezulto" + +#: cantor_part.cpp:307 +#, fuzzy, kde-format +msgid "Insert Latex Entry" +msgstr "Rezulto" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrompoj" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Kalkulante..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Preta" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, fuzzy, kde-format +msgid "Unnamed" +msgstr "Uzantnomo" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Rigardi" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Dosiero" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, fuzzy, kde-format +msgid "&New" +msgstr "Nova" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "A&gordo" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Preta" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, fuzzy, kde-format +msgid "Image Settings" +msgstr "A&gordo" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Malfermi" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, fuzzy, kde-format +msgid "px" +msgstr "x" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, fuzzy, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nomo" + +#: lib/defaultvariablemodel.cpp:78 +#, fuzzy, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Variablo" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "" + +#: main.cpp:85 +#, fuzzy, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "" + +#: main.cpp:109 +#, fuzzy, kde-format +msgid "Documents to open." +msgstr "La dosiero malfermiĝi" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, fuzzy, kde-format +msgid "Name:" +msgstr "Nomo" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, fuzzy, kde-format +msgid "Load Variables" +msgstr "Variablo" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, fuzzy, kde-format +msgid "Store Variables" +msgstr "Variablo" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, fuzzy, kde-format +msgid "Clear Variables" +msgstr "Variablo" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +msgid "Load file" +msgstr "Variablo" + +#: resultitem.cpp:71 +#, fuzzy, kde-format +msgid "Remove result" +msgstr "Rezulto" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Ne trovis KDE-tekstredaktilan komponanton;\n" +"bonvolu kontroli vian KDE-instalon." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +msgid "Results" +msgstr "Rezulto" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +msgid "Errors" +msgstr "Eraro" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +msgid "Markdown Entry" +msgstr "Rezulto" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, fuzzy, kde-format +msgid "LaTeX Entry" +msgstr "Rezulto" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, fuzzy, kde-format +msgid "Image" +msgstr "Rezulto" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +msgid "Insert Entry After" +msgstr "Rezulto" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +msgid "Insert Entry Before" +msgstr "Rezulto" + +#: worksheet.cpp:1264 +#, fuzzy, kde-format +msgid "Insert LaTeX Entry" +msgstr "Rezulto" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, fuzzy, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "Enlinia" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, fuzzy, kde-format +msgid "Remove Entry" +msgstr "Rezulto" + +#: worksheetentry.cpp:707 +#, fuzzy, kde-format +msgid "Drag Entry" +msgstr "Rezulto" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#, fuzzy +#~ msgid "Usage: loadVariables file" +#~ msgstr "Variablo" + +#, fuzzy +#~ msgid "Loading failed." +#~ msgstr "Variablo" diff --git a/po/es/cantor.po b/po/es/cantor.po new file mode 100644 index 0000000..79cc468 --- /dev/null +++ b/po/es/cantor.po @@ -0,0 +1,3266 @@ +# translation of mathematik.po to Spanish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Eloy Cuadra , 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# Ignacio Poggi , 2009. +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-13 22:54+0100\n" +"Last-Translator: Eloy Cuadra \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eloy Cuadra,Ignacio Poggi" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ecuadra@eloihr.net,ignaciop.3@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausar" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Iniciar" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Detener" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Guardar resultado" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gráficos avanzados" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expresión:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opciones adicionales:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Trazar" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opción activa" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcular" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Diferenciar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variable:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Tiempos: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paquete" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importar paquete" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paquete:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrar" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Límite inferior:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Límite superior:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integral definida" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Álgebra &lineal" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Crear matriz" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Columnas:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Filas:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcular eigenvalores" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriz:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcular eigenvectores" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertir matriz" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Gráfico 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nombre" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Mínimo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Máximo:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Gráfico 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1ª variable" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2ª variable" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Ejecutar script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Resolver ecuaciones" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ecuaciones:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variables:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versión recomendada: %4

    %2

    Consulte %3 para más información
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Escoja el motor que utilizará:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Hacer que este sea el motor por omisión" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia es un lenguaje de programación dinámico de alto nivel y de " +"buen rendimiento para computación técnica, con sintaxis familiar para los " +"usuarios de otros entornos de computación técnica. Proporciona un " +"sofisticado compilador, ejecución en paralelo distribuida, precisión " +"numérica y una amplia biblioteca de funciones matemáticas.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Ruta al REPL nativo de Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrar gráficos en la hoja de ejercicios" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Archivo de script Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Ruta al REPL de Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Integrar gráficos en la hoja de ejercicios (iniciar una nueva sesión cuando " +"se cambie)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Formato intermedio de gráficos en línea:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista de scripts a ejecutar automáticamente al inicio de la sesión" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Error: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts a ejecutar automáticamente" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua es un lenguaje de script rápido y ligero, que posee una sencilla " +"sintaxis procedural. Lua contiene diversas bibliotecas que tienen como " +"objetivo las matemáticas y la ciencia.

    Este motor permite el uso de " +"luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Ruta a la orden luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Archivo de script lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Ruta a la orden luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima es un sistema para la manipulación de expresiones simbólicas y " +"numéricas, incluyendo diferenciación, integración, series de Taylor, " +"transformadas de Laplace, ecuaciones diferenciales comunes, sistemas de " +"ecuaciones lineales, polinomiales, conjuntos, listas, vectores, matrices y " +"tensores. Maxima produce resultados numéricos de alta precisión usando " +"fracciones exactas, enteros de precisión arbitraria y números de punto " +"flotante de precisión variable. Maxima puede representar funciones y datos " +"en dos o tres dimensiones. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Ruta al ejecutable de Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Activar la gestión de variables" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Error: demasiados */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Error: demasiados /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Error: se esperaba \" antes de ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Esperando el resultado del gráfico" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Archivo de procesamiento por lotes de Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Fallo al iniciar Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima ha fallado. Reiniciando..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima ha fallado dos veces en un corto período de tiempo. Se está " +"deteniendo para tratar de reiniciarlo." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Error - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "función" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Ruta a Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrar gráficos en la hoja de ejercicios" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Dejar que Cantor siga la creación y la destrucción de variables" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave es un lenguaje de alto nivel orientado principalmente a cálculos " +"numéricos.
    Proporciona una práctica interfaz de línea de órdenes para " +"resolver numéricamente problemas lineales y no lineales, y para realizar " +"otros experimentos numéricos usando un lenguaje que es altamente compatible " +"con Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Ruta al ejecutable de Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Archivo de script de Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Error de sintaxis" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Ruta a Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Archivo de script de Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python es un lenguaje de programación dinámico extremadamente potente que " +"se usa en un amplio abanico de campos de aplicaciones. Existen diversos " +"paquetes de Python para programación científica.

    Este paquete " +"implementa Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python es un lenguaje de programación dinámico extremadamente potente que " +"se usa en un amplio abanico de campos de aplicaciones. Existen diversos " +"paquetes de Python para programación científica.

    Este paquete " +"implementa Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Diálogo de gráficos" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funciones:" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Título" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expresión" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Añadir" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Eliminar" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Borrar lista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variable X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Estilo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Líneas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Puntos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Puntos y líneas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Cuadrados" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histograma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Pasos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Velas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Motas" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Suavizado" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ninguno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monótono" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Splines cúbicos naturales" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monótono)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Intervalo de la función" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Intervalo X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Tasa de &muestreo" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "&Tamaño del paso" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opciones" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Título del gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Etiqueta del eje X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Etiqueta del eje Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posición de la leyenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Ocultar leyenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Arriba a la izquierda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Arriba a la derecha" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Abajo a la izquierda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Abajo a la derecha" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Debajo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Fuera" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostrar rejilla" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostrar el borde completo" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Usar colores" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostrar en línea" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Escala X logarítmica" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Escala Y logarítmica" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opciones de archivo" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Guardar gráfico en archivo" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipo de archivo" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detectar a partir del nombre de archivo" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! no es un software de réplica normal de la calculadora más barata " +"disponible. Qalculate! trata de sacar partido de la interfaz superior, la " +"potencia y la flexibilidad de las computadoras modernas. El punto fuerte de " +"Qalculate! es la entrada de expresiones. En lugar de introducir cada número " +"de una expresión matemática de forma individual, puede escribir directamente " +"la expresión completa y modificarla después. La interpretación de " +"expresiones es flexible y tolerante a fallos, por lo que Qalculate! le " +"avisará si alguna vez comete algún error. No obstante, las expresiones que " +"no se pueden resolver completamente no son errores. Qalculate! las " +"simplificará tanto como pueda y responderá con una expresión. Además de " +"números y operadores aritméticos, una expresión puede contener cualquier " +"combinación de variables, unidades y funciones." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Si se deben convertir automáticamente las unidades y cómo hacerlo. Si es " +"cierto, se convierte a la unidad más apropiada del SI (la menor cantidad de " +"unidades)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unidad de ángulos por omisión para las funciones trigonométricas." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Base de los números analizados y evaluados." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Si el resultado de la evaluación estará simplificado o factorizado." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Si los números racionales se mostrarán con decimales, como fracciones o como " +"algo intermedio." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mostrar que una serie de dígitos de un número continúa infinitamente con " +"puntos suspensivos en lugar de redondearlo (p. ej., 2/3 se muestra como " +"0,666666... en lugar de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Usar todos los prefijos decimales del SI. Si es falso, no se usarán de forma " +"automática los prefijos que no son múltiplos de mil (centi, deci, deca, " +"hecto)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Si es cierto, se usarán exponentes negativos en lugar de divisiones (p. ej., " +"5/x^2 se convierte en 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Pantalla numérica." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Si es cierto, los gráficos se mostrarán dentro de la hoja de trabajo. En " +"caso contrario, aparecerán en una ventana separada." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Si se deben usar colores en los gráficos." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Si se debe usar una rejilla en el gráfico." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Si se deben dibujar bordes completos alrededor del gráfico." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Anchura de las líneas, en píxeles." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Número de pasos de interpolación a usar en el gráfico." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Modo de suavizado en los gráficos." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Estilo de los gráficos." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Posición de la leyenda en los gráficos." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate informa de que no puede imprimir. ¿Está instalado gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "falta %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 debe ser un número." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 debe ser un entero." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 debe ser un valor lógico." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "opción no válida para %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" +"se han encontrado múltiples expresiones en una orden de dibujo (%1 y %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "Error" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "Advertencia" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "No existe una función, variable o unidad con el nombre especificado." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Función: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interfaz de gráficos" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Traza una o más funciones de forma integrada o en una ventana separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expresión" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opción" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "entero" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "lógico" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "número" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "por omisión: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "El nombre de la función" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etiqueta de título" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Etiqueta del eje X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Etiqueta del eje Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Imagen en la que guardar el gráfico. Si no se especifica ninguna se muestra " +"el gráfico en una ventana de la pantalla. Si «inline=true», la imagen se " +"muestra sin tener en cuenta esta opción." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"El tipo de imagen en la que guardar. Uno de los valores auto, png, ps, eps, " +"latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Establecer como cierto para gráficos en color, o falso para monocromo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Valor mínimo del eje X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Valor máximo del eje X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Si se debe usar una escala logarítmica para el eje X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Si se debe usar una escala logarítmica para el eje Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Base logarítmica para el eje X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Base logarítmica para el eje Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Si se debe mostrar una rejilla en el gráfico." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Si el gráfico debe estar rodeado de bordes por todos los lados (no solo " +"ejes)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Anchura de las líneas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Lugar donde se debe situar la leyenda del gráfico. Puede ser: ninguna, " +"arriba a la izquierda, arriba a la derecha, abajo a la izquierda, abajo a la " +"derecha, debajo, fuera" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Suavizado del gráfico: Puede ser: ninguno, único, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Estilo del gráfico: Puede ser: líneas, puntos, puntos y líneas, cuadrados, " +"histograma, pasos, velas, motas" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Usar escala en el segundo eje X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Usar escala en el segundo eje Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Si el gráfico se debe dibujar integrado en lugar de en una ventana nueva." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Distancia entre dos puntos de interpolación. Ver también el paso." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Número de puntos de interpolación. Ver también el paso." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "El nombre de la variable X. Debe ser una variable conocida." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Guardar variables en un archivo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Guardar todas las variables definidas actualmente en un archivo. Se pueden " +"volver a cargar con %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "archivo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "archivo: el archivo en el que guardar" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Cargar variables de un archivo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Cargar variables de un archivo que ha sido creado previamente por %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "archivo: el archivo a cargar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "General" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numérica:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Formato de fracciones:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exacta" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fraccional" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combinada" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Pantalla numérica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pura" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Científica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisión" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indicar series infinitas:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Activado" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usar todos los prefijos del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usar exponentes negativos:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Evaluar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Convertir a las unidades del SI más adecuadas:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unidad de ángulos:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Grados" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradianes" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Modo de estructuración:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplificar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factorizar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Gráficos" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Mostrar gráficos en línea:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Gráficos en color:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostrar rejilla:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostrar bordes completos:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Anchura de las líneas:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Tasa de muestreo:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Modo de suavizado:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Splines cúbicos naturales" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Estilo del gráfico:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Pasos" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posición de la leyenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R es un lenguaje y entorno para cálculos estadísticos y gráficos, similar al " +"lenguaje y entorno S.
    Proporciona una amplia variedad de técnicas " +"estadísticas (modelado lineal y no lineal, pruebas estadísticas clásicas, " +"análisis de series temporales, clasificación, agrupamiento, etc.) y " +"gráficas, y es muy configurable. El lenguaje S es frecuentemente el vehículo " +"de elección para investigaciones de metodología estadística, mientras que R " +"proporciona una alternativa de código abierto para participar en esta " +"actividad." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Error abriendo el archivo %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Archivo de script de R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Error analizando orden" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Doble clic para abrir el diálogo de selección de archivos" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Archivos fuente de R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage es un sistema de software matemático de código abierto con licencia " +"GPL.
    Combina la potencia de diversos paquetes de código abierto " +"existentes bajo una interfaz común basada en Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Ruta al ejecutable de Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultado de %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"La última salida fue: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Archivo de script de Python (*.py);;Archivo de script de Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Este programa no es compatible con la versión %1.%2 de Sage. Por favor, " +"actualice su instalación con las versiones compatibles para que puedan " +"funcionar con Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "El proceso Sage ha fallado mientras evaluaba esta expresión" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "El proceso Sage ha fallado" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "El proceso Sage ha salido mientras se evaluaba esta expresión" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "El proceso Sage ha salido" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Fallo al iniciar Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Ruta a Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab es un paquete de software libre y multiplataforma de cálculo " +"numérico y un lenguaje de programación de alto nivel y orientado a números.Scilab se distribuye bajo la licencia CeCILL (compatible con GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Ruta a la orden «scilab-adv-cli» (Advertencia: la versión de Scilab debe " +"igual o superior a la 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +";;Archivo de script de Scilab (*.sce);;Archivo de funciones de Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Ruta a la orden scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Descargar ejemplos de hojas de ejercicios" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Abrir ejempl&o" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Ir a la hoja de ejercicios anterior" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Ir a la hoja de ejercicios siguiente" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Hoja de ejercicios de Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Abrir archivo" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    No se encuentra ningún motor

    \n" +"
    Cosas que puede probar:\n" +"
    • Cambiar las preferencias en el diálogo de configuración;
    • Instalar paquetes para el siguiente programa:
    • %2
    " +"
    " +msgstr[1] "" +"

    No se encuentra ningún motor

    \n" +"
    Cosas que puede probar:\n" +"
    • Cambiar las preferencias en el diálogo de configuración;
    • Instalar paquetes para alguno de los siguientes programas: %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Error" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesión %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "No se ha podido encontrar Cantor Part." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Varias hojas de ejercicios sin guardar están abiertas. ¿Desea cerrarlas?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Cerrar Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "El proyecto actual ha sido modificado. ¿Desea guardarlo?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Guardar proyecto" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "El motor que se utiliza por omisión" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Realizar la composición por omisión" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Realizar el resaltado de sintaxis por omisión" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Activar la terminación por omisión" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Activar la numeración de expresiones por omisión" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animar cambios en la hoja de ejercicios por omisión" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Volver a evaluar automáticamente las entradas bajo la actual" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Pedir confirmación para reiniciar el motor" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "El motor %1 no está instalado" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Hay algunos problemas con el motor %1.\n" +"Compruebe su configuración o instale los paquetes necesarios.\n" +"Solo podrá visualizar esta hoja de ejercicios." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Guardar texto sin formato" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportar a LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Evaluar hoja de ejercicios" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Componer usando LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Resaltado de sintaxis" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Terminación" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Números de línea" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animar la hoja de ejercicios" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reiniciar motor" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Evaluar entrada" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Insertar entrada de orden" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Insertar entrada de texto" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Insertar entrada en Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Insertar entrada Latex" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Insertar salto de página" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Insertar imagen" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Eliminar la entrada actual" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Mostrar ayuda de %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostrar el editor de scripts" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Mostrar terminación" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Guardar como" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Guardar" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Se perderán todos los resultados de cálculos disponibles. ¿Realmente quiere " +"reiniciar %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "¿Reiniciar %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrumpir" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Calculando..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Listo" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Error de sesión: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicialización completa" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Inicializando..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sin nombre" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[solo lectura]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "¿Desea enviar la hoja de ejercicios actual al servidor web público?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pregunta - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"La hoja de ejercicios no se ha guardado. Debería guardarla antes de enviarla " +"a la web." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Advertencia - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Este motor no permite scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Editar" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vista" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Hoja de ejercicios" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Archivo" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nuevo" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneles" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Preferencias" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Blanco" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Negro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Rojo oscuro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Rojo" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Rojo claro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verde oscuro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verde" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verde claro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Azul oscuro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Azul" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Azul claro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Amarillo oscuro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Amarillo" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Amarillo claro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Cian oscuro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cian" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Cian claro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta oscuro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Magenta claro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Naranja oscuro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Naranja" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Naranja claro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Gris oscuro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Gris" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Gris claro" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Color del fondo" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Color del texto" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Tipo de letra" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Negrita" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Cursiva" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Aumentar el tamaño" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Reducir el tamaño" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Seleccionar" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrumpido" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra de búsqueda" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Buscar:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Siguiente" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "An&terior" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Sustituir:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Sustituir" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Sustituir &todo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Buscar en:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Distinguir &mayúsculas" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configurar imagen" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Pulse el botón derecho aquí para insertar una imagen" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "No se puede cargar la imagen %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Preferencias de la imagen" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Abrir" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Tamaño de la pantalla" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Ancho" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Altura" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Vista previa" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Tamaño de la impresión" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usar el tamaño de la pantalla" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Abrir archivo de imagen" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostrar código LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Ruta al ejecutable latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Ruta al ejecutable dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nombre" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valor" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Desde:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Hasta:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Título principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Escala de las abscisas" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Escala de las ordenadas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Título del gráfico:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interfaz de usuario de KDE para aplicaciones matemáticas" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2016 Filipe Saraiva
    © 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Encargado
    Adaptación a Qt5/KF5, motores Scilab y Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autor original
    Encargado (2009-2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol González" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Motor KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Motor Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfaz" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Icono de Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usar el motor " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documentos a abrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "No se puede abrir el archivo %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Salto de página ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    La forma de hacer matemáticas de KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nombre:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valor:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Añadir nueva variable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Cargar variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Almacenar variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Borrar variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "¿Seguro que quiere eliminar todas las variables?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmación - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Cargar archivo" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Eliminar resultado" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"No se encuentra un componente del editor de texto de KDE.\n" +"Por favor, verifique su instalación de KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor de scripts" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de scripts - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "No encontrado" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Se ha alcanzado el principio" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Se ha alcanzado el final" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 coincidencia sustituida" +msgstr[1] "%1 coincidencias sustituidas" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Órdenes" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultado" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Errores" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Texto" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Código LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Motor por omisión:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Si está activado, Cantor evaluará automáticamente todas las entradas bajo la " +"actual." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Volver a evaluar las entradas automáticamente" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Predeterminados" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Activar la composición al estilo LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Activar resaltado de sintaxis" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Activar terminación" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Activar números de línea" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Activar animaciones de la hoja de ejercicios" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostrar gráfico" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Mostrar código" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"No se puede interpretar el archivo Eps. Es posible que necesite paquetes " +"adicionales." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "No se puede escribir el archivo %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "No se puede escribir el archivo." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Error al guardar el archivo %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"En el modo de solo lectura, Cantor no puede garantizar que la exportación " +"sea válida par %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Error al cargar la hoja de estilos latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "El archivo seleccionado no es un proyecto válido de Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"No se ha encontrado el motor %1. No es posible editar ni ejecutar entradas." + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Entrada de orden" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Entrada de texto" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Entrada en Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Entrada LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Imagen" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Salto de página" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Insertar entrada detrás" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Insertar entrada delante" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Insertar entrada LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Color del texto..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Color" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Resaltar te&xto..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Tipo de letra" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Ta&maño del tipo de letra" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Negrita" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "Curs&iva" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "S&ubrayado" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Tac&hado" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "A&linear a la izquierda" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Izquierda" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Alinear al ¢ro" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centro" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Alinea&r a la derecha" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Derecha" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justificar" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justificar" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Eliminar entrada" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Arrastrar entrada" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publicar hoja de ejercicios" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "El motor con el que se generó este archivo no está instalado. Necesita %1" + +#~ msgid "Waiting for Image..." +#~ msgstr "Esperando imagen..." + +#~ msgid "Insert" +#~ msgstr "Insertar" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "no se puede abrir el archivo %1: tipo MIME desconocido" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Documento de LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Hoja de ejercicios de Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Servidor para el motor R de Cantor" + +#~ msgid "R Server" +#~ msgstr "Servidor R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Uso: archivo saveVariables" + +#~ msgid "Saving failed." +#~ msgstr "Error al guardar." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Uso: archivo loadVariables" + +#~ msgid "Loading failed." +#~ msgstr "Error al cargar." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Ruta a la orden python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Servidor de Cantor para R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "¿También quiere exportar las imágenes?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Ruta a la orden python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Activar la gestión de variables" diff --git a/po/es/docs/cantor/index.docbook b/po/es/docs/cantor/index.docbook new file mode 100644 index 0000000..e1aaf6e --- /dev/null +++ b/po/es/docs/cantor/index.docbook @@ -0,0 +1,1406 @@ + +ATEX"> + + +]> + + + +El manual de &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +LeticiaMartín Hernández
    leticia.martin@gmail.com
    Traducción
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2016-08-25 +Aplicaciones 16.12 + + +&cantor; es una aplicación cuyo objetivo es proporcionar una bonita hoja de ejercicios a otros paquetes matemáticos libres. + + + +KDE +kdeedu +matemáticas +matemáticas +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + +
    + + +Introducción + +&cantor; es un programa que le permite usar su aplicación matemática favorita desde una elegante interfaz de hoja de ejercicios integrada en KDE. Proporciona cuadros de diálogo que le ayudan con las tareas comunes y le permite compartir sus hojas de ejercicios con otras personas. + + + +Uso de &cantor; + +Captura de pantalla: +Esta es una captura de pantalla de &cantor; + + + + + + Captura de pantalla + + + + + + + +Características de &cantor; + + Una intuitiva vista de hoja de ejercicios para la evaluación de expresiones. + Los resultados de los gráficos se muestran en la propia hoja de ejercicios. + Una fácil estructura basada en complementos que le permite añadir diferentes motores. + Integración de la opción «Obtener novedades» que le permite descargar (o enviar) ejemplos de hojas de ejercicios. + Permite componer fórmulas matemáticas usando &latex;. + Resaltado de la sintaxis relacionada con el motor. + Cuadros de diálogo basados en complementos que le ayudan con las tareas comunes, como integrar una función o escribir una matriz. + + + + +Los motores de &cantor; +&cantor; le ofrece diferentes opciones para los motores con los que desee usarlo. La elección dependerá de lo que quiera obtener. +Actualmente están disponibles los siguientes motores: + + Sage: + + Sage es un software matemático de código abierto con licencia GPL. Combina la potencia de diversos paquetes de código abierto bajo una interfaz común basada en Python. Vea http://sagemath.org si desea obtener más información. + + + + Maxima: + + Maxima es un sistema para la manipulación de expresiones simbólicas y numéricas, incluyendo diferenciación, integración, expansión en series de Taylor, transformadas de Laplace, ecuaciones diferenciales ordinarias, sistemas de ecuaciones lineales, polinomios, conjuntos, listas, vectores, matrices y tensores. Maxima produce resultados numéricos con una alta precisión mediante el uso de fracciones exactas, enteros de precisión arbitraria y números de coma flotante con precisión variable. Maxima puede dibujar funciones y datos en dos y tres dimensiones. Vea http://maxima.sourceforge.net si desea obtener más información. + + + + R: + + R es un lenguaje y entorno de programación para análisis estadístico y gráfico, similar al lenguaje y entorno S. Proporciona una amplia variedad de herramientas estadísticas (modelos lineales y no lineales, pruebas estadísticas clásicas, análisis de series temporales, algoritmos de clasificación y agrupamiento, etc.) y gráficas, y es altamente configurable. El lenguaje S es una de las herramientas más usadas en la investigación sobre metodología estadística y en este sentido, R proporciona una alternativa de código abierta. Vea http://www.r-project.org si desea obtener más información. + + + + Julia: + + Julia es un lenguaje de programación de alto nivel y de alto rendimiento para cálculos técnicos, con sintaxis que resulta familiar a los usuarios de otros entornos de cálculo técnico. Proporciona un sofisticado compilador, ejecución paralela distribuida, precisión numérica y una amplia biblioteca de funciones matemáticas. Consulte la documentación de Julia para más información. + + + + &kalgebra;: + + &kalgebra; es una calculadora matemática basada en MathML que forma parte del Proyecto de Educación de &kde;. Vea http://edu.kde.org/kalgebra/ si desea obtener más información. + + + + Qalculate!: + + Qalculate! no es un software de réplica normal de la calculadora más barata disponible. Qalculate! trata de sacar partido de la interfaz superior, la potencia y la flexibilidad de las computadoras modernas. El punto fuerte de Qalculate! es la entrada de expresiones. En lugar de introducir cada número de una expresión matemática de forma individual, puede escribir directamente la expresión completa y modificarla después. La interpretación de expresiones es flexible y tolerante a fallos, por lo que Qalculate! le avisará si alguna vez comete algún error. No obstante, las expresiones que no se pueden resolver completamente no son errores. Qalculate! las simplificará tanto como pueda y responderá con una expresión. Además de números y operadores aritméticos, una expresión puede contener cualquier combinación de variables, unidades y funciones. Consulte http://qalculate.sourceforge.net/ para más información. + + + + Python2 y Python3: + + Python es un lenguaje de programación dinámico extremadamente potente que se usa en un amplio abanico de campos de aplicaciones. Existen diversos paquetes de Python para programación científica. + Python se distribuye bajo la licencia de la Fundación de Software Python (compatible con GPL). Consulte su sitio oficial para obtener más información. + + Este motor añade un elemento adicional al menú principal de &cantor;, Paquete. El único elemento de este menú es PaqueteImportar paquete. Puede usar este elemento para importar paquetes de Python en la hoja de ejercicios. + + + + + Scilab: + + Scilab es un paquete de software libre y multiplataforma de cálculo numérico y un lenguaje de programación de alto nivel y orientado a números. + Scilab se distribuye bajo la licencia CeCILL (compatible con GPL). Consulte http://www.scilab.org/ para obtener más información. + + Necesita Scilab versión 5.5 o superior instalado en su sistema para que pueda funcionar este motor. + + + + + Octave: + + &GNU; Octave es un lenguaje de alto nivel, principalmente concebido para cálculos numéricos. Proporciona una interfaz de línea de órdenes apropiada para resolver numéricamente problemas lineales y no lineales, y para realizar otros experimentos numéricos usando un lenguaje que es muy compatible con MATLAB. Consulte http://www.gnu.org/software/octave/ para más información. + + + + Lua: + + Lua es un lenguaje de script rápido y ligero, que posee una sencilla sintaxis procedural. Lua contiene diversas bibliotecas que tienen como objetivo las matemáticas y la ciencia. + Consulte http://www.lua.org/ para obtener más información. + Este motor permite el uso de luajit 2. + + + + + + + +El área de trabajo de &cantor; + + + Captura de pantalla del área de trabajo de &cantor; + + + + + + Captura de pantalla del área de trabajo de &cantor; + + + + +La interfaz de hoja de ejercicios de &cantor; consta de tres partes: + La barra de pestañas, donde podrá navegar a través de las hojas de ejercicios abiertas. + Un panel de ayuda, donde se mostrará la ayuda para una orden determinada si introduce «? orden». + Un panel de gestión de variables donde puede ver la lista de todas las variables disponibles en la hoja de ejercicios actual. Los paneles de ayuda y del gestor de variables se muestran como pestañas en una barra lateral de la ventana de &cantor;. El gestor de variables se puede usar solo con los motores Maxima (si está activado en la página PreferenciasConfigurar &cantor;... Maxima), &kalgebra;, Octave, Python2, Python3, Qalculate y Scilab. + La propia hoja de ejercicios. + + + +La hoja de ejercicios +La hoja de ejercicios es la zona básica de trabajo de &cantor;. En ella puede introducir expresiones, hacer que el motor ejecute cálculos y comprobar los resultados. Las órdenes que las hojas de ejercicios aceptan dependerán del motor elegido, por lo que debería aprender la sintaxis apropiada para dicho motor (el botón «Mostrar ayuda» le llevará allí directamente). Si conoce la orden pero necesita información adicional, puede escribir «? orden», con lo que se mostrará una ayuda de contexto a la derecha de la hoja de ejercicios. Si desea ver algunos ejemplos de hojas de ejercicios, puede ir a Descargar ejemplos de hojas de ejercicios en el menú Archivo para descargar hojas de ejercicios que otros usuarios han publicado. +Para controlar cada entrada de orden en la hoja de ejercicios puede usar los botones de control que se muestran en la parte derecha de la hoja de ejercicios cuando sitúa el cursor del ratón sobre el campo de entrada. Existen tres acciones básicas para cada entrada: Evaluar entrada, para actualizar el resultado de los cálculos de la entrada; Arrastrar entrada, para mover la entrada a otro lugar de la hoja de ejercicios actual; y Eliminar entrada, para eliminar la entrada de la hoja de ejercicios actual. +Las preferencias de tipos de letra y la justificación de las entradas de la hoja de ejercicios se pueden modificar usando la barra de herramientas que hay sobre la hoja de ejercicios. + + Preferencias + El menú Preferencias le permite modificar algunas preferencias de la apariencia de su hoja de ejercicios actual. + + + Composición mediante el uso de &latex; + + Esta opción modifica el modo en que se le muestran los resultados. Si está activada, el resultado pasa a través del sistema &latex; para producir fórmulas visualmente atractivas. Por ejemplo, «3*x^2*sqrt(2)*x+2/3» se convierte en: + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Resaltado de sintaxis + + «Resaltado de sintaxis» aumenta la legibilidad del código coloreando las palabras claves o usando diferentes colores para los paréntesis. + + + + Terminación + + Cuando está activo, al presionar la tecla Tab, &cantor; le mostrará diferentes terminaciones para la orden que está actualmente introduciendo. Si existe una única opción, insertará automáticamente el resto de la orden. + + + + Números de línea + + Esta opción controla si las diferentes expresiones deben tener o no un número al principio. Esto le permite recuperar resultados antiguos (en Maxima, por ejemplo, esto se hace con la orden «%O1»). + + + + Animar la hoja de ejercicios + + Esta preferencia controla si se usarán distintas animaciones para resaltar los cambios realizados en una hoja de ejercicios. + + + + + + + +Los diálogos de asistentes +Existen varios diálogos de asistentes en &cantor; para facilitar algunas operaciones básicas. +Puede acceder a dichos diálogos usando opciones del menú principal. Cada motor posee sus propios diálogos de asistentes. + +El diálogo para crear matrices + + Captura de pantalla del diálogo de creación de matrices de &cantor; + + + + + + Captura de pantalla del diálogo de creación de matrices de &cantor; + + + +Este diálogo se puede usar para introducir matrices. Puede definir las dimensiones de la matriz y sus elementos. +Se puede navegar a través de las celdas rápidamente durante la introducción de datos usando la tecla . + + +Diálogo de operación de matrices + + Captura de pantalla del diálogo de introducción de matrices de &cantor; + + + + + + Captura de pantalla del diálogo de introducción de matrices de &cantor; + + + +Este diálogo permite introducir el nombre de la matriz de la que se van a calcular sus eigenvectores, sus eigenvalores o su matriz inversa. El valor por omisión (%) se usa para referirse al resultado previo del cálculo o entrada. + + +Diálogo de diferenciación + + Captura de pantalla del diálogo de diferenciación de &cantor; + + + + + + Captura de pantalla del diálogo de diferenciación de &cantor; + + + +Este diálogo le permite introducir la expresión de la función a diferenciar, el nombre de la variable y el orden de la derivada. + + +Diálogo de integración + + Captura de pantalla del diálogo de integración de &cantor; + + + + + + Captura de pantalla del diálogo de integración de &cantor; + + + +Este diálogo le permite introducir la expresión de la función a integrar, el nombre de la variable y los límites de la integración (para la integral definida). + + +Diálogo de resolución de ecuaciones + + Captura de pantalla del diálogo de resolución de ecuaciones de &cantor; + + + + + + Captura de pantalla del diálogo de resolución de ecuaciones de &cantor; + + + +Este diálogo le permite introducir las ecuaciones a resolver (cada ecuación en una línea distinta) y las variables a determinar (separadas por comas). + + +Diálogo de importación de paquete + + Captura de pantalla del diálogo de importación de paquete de &cantor; + + + + + + Captura de pantalla del diálogo de importación de paquete de &cantor; + + + +Este diálogo le permite introducir el nombre del paquete a importar (⪚, numpy para Python). + + +Diálogo de gráficos + + Captura de pantalla del diálogo de gráficos de &cantor; (pestaña de Funciones) + + + + + + Captura de pantalla del diálogo de gráficos de &cantor; (pestaña de Funciones) + + + +Las opciones de este diálogo están separadas en dos grupos mediante pestañas. La pestaña Funciones le permite introducir las funciones a dibujar. +Para introducir una nueva función, pulse Añadir. Haga doble clic en la celda Título e introduzca el título en ella; a continuación haga doble clic en la celda Expresión e introduzca la expresión de la función en ella. + + Captura de pantalla del diálogo de gráficos de &cantor; (pestaña de Opciones) + + + + + + Captura de pantalla del diálogo de gráficos de &cantor; (pestaña de Opciones) + + + +La pestaña Opciones se usa para definir las opciones del gráfico y de la leyenda. Puede ajustar casi cualquier opción del gráfico para conseguir el mejor resultado de la figura. + + +Diálogo de gráfico en 2D + + Captura de pantalla del diálogo de gráfico en 2D de &cantor; + + + + + + Captura de pantalla del diálogo de gráfico en 2D de &cantor; + + + +Este diálogo le permite introducir la expresión de la función, su variable y los límites de dicha variable. + + +Diálogo de gráfico en 3D + + Captura de pantalla del diálogo de gráfico en 3D de &cantor; + + + + + + Captura de pantalla del diálogo de gráfico en 3D de &cantor; + + + +Este diálogo le permite introducir la expresión de la función, sus variables y los límites de dichas variables. + + + + + +Guía de órdenes + + +La ventana principal de &cantor; + +&cantor; posee los elementos de menú típicos de &kde;. Para más información lea el capítulo Menú de los Fundamentos de &kde;. + +La siguiente lista contiene los elementos de menú adicionales o especiales de &cantor;. Por favor, tenga en cuenta que algunos menús solo se muestran para algunos motores que disponen de la correspondiente implementación. + + +El menú Archivo + + + + &Ctrl;N Archivo Nuevo +Crea una hoja de ejercicios con el motor por omisión. + + +Archivo Nuevo Motor +Crea una nueva hoja de ejercicios con el motor seleccionado. + + +Archivo Descargar hojas de ejercicios de ejemplo +Abre el diálogo para descargar ejemplos enviados por otros usuarios de &cantor; con GetHotNewStuff. + + +Archivo Abrir ejemplo +Abre el diálogo para escoger un ejemplo a cargar. Los ejemplos tienen que haberse descargado antes con Archivo Descargar hojas de ejercicios de ejemplo. + + +Archivo Guardar como texto sin formato +Permite guardar la hoja de ejercicios actual como un documento de texto sin formato. + + +Archivo Exportar a LaTeX +Permite guardar la hoja de ejercicios actual como un documento de &latex;. + + +Archivo Publicar hoja de ejercicios +Abre el diálogo para publicar su hoja de ejercicios actual y permitir que esté disponible para otros usuarios de &cantor; mediante Obtener novedades. + + +Archivo Ejecutar guion +Permite cargar y ejecutar guiones por lotes en el motor actual. + + + + + + + +El menú Ver + + + + &Ctrl;+ Ver Ampliar +Amplía la hoja de ejercicios actual un 10%. + + + &Ctrl;- Ver Reducir +Reduce la hoja de ejercicios actual un 10%. + + +Ver Mostrar el editor de guiones +Abre la ventana del editor de guiones por lotes para el motor actual. + + +Ver Paneles Ayuda +Conmuta la visibilidad de la pestaña Ayuda en la barra lateral. + + +Ver Paneles Gestor de variables +Conmuta la visibilidad del Gestor de variables en la barra lateral. + + + + + + +El menú Hoja de ejercicios + + + +Hoja de ejercicios Evaluar hoja de ejercicios +Lanza la evaluación de toda la hoja de ejercicios. + + + &Shift;Intro Hoja de ejercicios Evaluar entrada +Lanza la evaluación de la entrada actual. + + + &Ctrl;Intro Hoja de ejercicios Insertar entrada de orden +Inserta una nueva entrada de orden debajo de la posición actual del cursor. + + +Hoja de ejercicios Insertar entrada de texto +Inserta una nueva entrada de texto debajo de la posición actual del cursor. + + +Hoja de ejercicios Insertar entrada de Latex +Inserta una nueva entrada de latex debajo de la posición actual del cursor. + + +Hoja de ejercicios Insertar salto de página +Inserta un salto de página debajo de la posición actual del cursor. + + + &Shift;Supr Hoja de ejercicios Eliminar entrada actual +Elimina la entrada actual de la hoja de ejercicios. + + + + + + +El menú de Álgebra lineal + + + +Álgebra lineal Crear matriz +Abre el asistente de creación de matrices. + + +Álgebra lineal Calcular eigenvalores +Abre el asistente de introducción del nombre de la matriz para calcular sus eigenvalores y las dimensiones de las multiplicidades de los eigenvalores en el orden correspondiente. + + +Álgebra lineal Calcular eigenvectores +Abre el asistente de introducción del nombre de la matriz para calcular sus eigenvalores, las dimensiones de las multiplicidades de los eigenvalores y los eigenvectores en el orden correspondiente. + + +Álgebra lineal Invertir matriz +Abre el asistente de entrada del nombre de la matriz para encontrar la matriz invertida. + + + + + + +El menú Calcular + + + +Calcular Diferenciar +Abre el diálogo de parámetros de diferenciación. + + +Calcular Integrar +Abre el diálogo de parámetros de integración. + + +Calcular Resolver ecuaciones +Abre el diálogo de entrada de parámetros para resolver ecuaciones lineales y no lineales. + + + + + + +El menú Paquete + + + +Paquete Importar paquete +Abre el diálogo de importación de paquete. + + + + + + +El menú Trazar + + + +Trazar Trazar +Abre el diálogo de parámetros del gráfico. + + +Trazar Gráfico 2D +Abre el diálogo de parámetros del gráfico. + + +Trazar Gráfico 3D +Abre el diálogo de parámetros del gráfico. + + + + + + +Los menús Preferencias y Ayuda +&cantor; posee los elementos de menú Preferencias y Ayuda típicos de &kde;. Para más información, consulte las secciones sobre el menú Preferencias y el menú Ayuda de los Fundamentos de &kde;. + + + + + + + +Preguntas y respuestas + + + + La opción de menú Composición usando LaTeX no está disponible. + No todos los motores permiten usar todas las opciones. La versión actual permite salida &latex; para los motores Maxima, Qalculate y Sage. + + + Tengo instalado Sage/Maxima u otro CAS permitido, pero el motor correspondiente no aparece. + + Una posible explicación es que &cantor; no ha detectado correctamente su ubicación. Vaya al diálogo PreferenciasConfigurar &cantor;... y modifique la Ruta a la aplicación en cuestión en la página de su motor. + + + + ¡Vaya nombre más peculiar! ¿Qué tiene que ver con las matemáticas? + El nombre de &cantor; viene del matemático alemán Georg Cantor, el creador de la teoría de conjuntos. + + + + + + +Créditos y licencia + +&cantor; +Copyright del programa 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Copyright de la documentación © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Traducido por Leticia Martín Hernández leticia.martin@gmail.com. +&underFDL; &underGPL; + +&documentation.index; +
    + + diff --git a/po/es/docs/cantor/screenshot.png b/po/es/docs/cantor/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..940f211e41074de196dae98925340d5bf5cdb7c8 GIT binary patch literal 64562 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

    x#mTaW2t`pYxuRbx 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, 2009, 2010, 2011, 2012, 2014, 2016. +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2016-12-09 22:24+0200\n" +"Last-Translator: Marek Laane \n" +"Language-Team: Estonian \n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Marek Laane" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "qiilaq69@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Paus" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Käivita" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Peata" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Salvesta tulemus" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Täiustatud joonistamine" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Joonis" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Avaldis:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Lisavalikud:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Joonis" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktiivne valik" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Arvutamine" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Diferentsiaalarvutus" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Muutuja:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Järk: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pakett" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Paketi import" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakett:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integraalarvutus" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Alumine piirväärtus:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Ülemine piirväärtus:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "määratud integraal" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineaarne algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Maatriksi loomine" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Veerud:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Read:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Omaväärtuste arvutamine" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Maatriks:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Omavektorite arvutamine" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Pöördmaatriks" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D joonis" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Muutuja" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nimi" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Miinimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D joonis" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Esimene muutuja" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Teine muutuja" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Käivita skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Võrrandite lahendamine" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Võrrandid:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Muutujad:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    Recommended version: %4
    %2

    See %3 for more information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Soovitatav versioon: %4
    %2

    Täpsemalt räägib sellest %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Kasutatav taustaprogramm:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Määramine vaikimisi taustaprogrammiks" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia on kõrgtaseme suure jõudlusega dünaamiline " +"programmeerimiskeel tehnilisteks arvutusteks, mille süntaks peaks olema " +"tuttav ka muude tehniliste arvutuste keskkondade kasutajatele. See pakub " +"keerukamategi võimalustega kompilaatorit, üheaegset paralleelset käitamist, " +"arvulist täpsust ja ulatuslikku matemaatiliste funktsioonide teeki.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Julia enda REPL-i asukoht" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Jooniste lõimimine töölehele" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia skriptifail (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Julia REPL-i asukoht:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Jooniste lõimimine töölehele (muutmise korral uue seansi käivitamine)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Sisemiste jooniste vahevorming:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Seansi algul automaatselt käivitatavate skriptide nimekiri" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Viga: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Automaatselt käivitatavad skriptid" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua on kiire ja kerge skriptikeel lihtsa protseduurilise süntaksiga. Luas " +"on mitu matemaatikale ja teadusele orienteeritud teeki.

    Käesolev " +"taustaprogramm toetab luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "luajit'i käsu asukoht" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua skriptifail (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "luajit'i käsu asukoht:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima on sümbol- ja arvavaldiste igakülgse kasutamise süsteem, kaasa " +"arvatud diferentsiaalarvutus, integraalarvutus. Taylori read, Laplace'i " +"teisendused, tavalised diferentsiaalvõrrandid, lineaarvõrrandite süsteemid, " +"polünoomid ning hulgad, loendid, vektorid, maatriksid ja tensorid. Maxima " +"tagab äärmiselt täpsed arvulised tulemused, kasutades selleks täpseid murde " +"ning muutuva täpsusega täis- ja murdarve. Maxima võib esitada funktsioone ja " +"andmeid kahe- ja kolmemõõtmeliste joonistena." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima teostusfaili asukoht" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Muutujate haldamise lubamine" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Viga: liiga palju */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Viga: liiga palju /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Viga: oodati \" enne ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima batch-fail (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maxima käivitamine nurjus" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maximat tabas krahh, käivitatakse uuesti..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maximat tabas lühikese aja jooksul kaks krahhi, käivitamise üritamisest " +"loobutakse" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Viga - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funktsioon" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima asukoht:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Jooniste lõimimine töölehele" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Cantoril lubatakse järgida muutujate loomist/hävitamist" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave on peamiselt arvutamiseks mõeldud kõrgkeel.
    See pakub mugava " +"käsurealiidese lineaarsete ja mittelineaarsete ülesannete lahendamiseks ja " +"muudeks arvutustoiminguteks, pruukides selleks keelt, mis on valdavalt " +"ühilduv Matlabiga." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave'i teostusfaili asukoht" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave'i skriptifail (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Süntaksiviga" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave'i asukoht:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Pythoni skriptifail (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python on märkimisväärselt võimas dünaamiline programmeerimiskeel, mida " +"kasutatakse väga paljude rakenduste juures. Teadusprogrammerimiseks on " +"saadaval mitu Pythoni paketti.

    See taustaprogramm kasutab Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python on märkimisväärselt võimas dünaamiline programmeerimiskeel, mida " +"kasutatakse väga paljude rakenduste juures. Teadusprogrammerimiseks on " +"saadaval mitu Pythoni paketti.

    See taustaprogramm kasutab Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Joonisedialoog" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funktsioonid" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Pealkiri" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Avaldis" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Lisa" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Eemalda" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Puhasta nimekiri" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-muutuja" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stiil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Jooned" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punktid" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punktid ja jooned" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Kastid" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogramm" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Sammud" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Küünlajalad" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Punktid" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Pehmendamine" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Puudub" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotoonne" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturaalsed kuupsplainid" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotoonne)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funktsiooni vahemik" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-vahemik" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "D&iskreetimissagedus" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Sa&mmu suurus" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Valikud" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Joonise pealkiri" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-telje pealdis" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-telje pealdis" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Legendi asukoht" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Legendi peitmine" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Ülal vasakul" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Ülal paremal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "All vasakul" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "All paremal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "All" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Väljas" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Alusvõrgu näitamine" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Täispiirde näitamine" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Värvide kasutamine" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Sisene kuvamine" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmiline X-skaala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmiline Y-skaala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Faili valikud" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Joonise salvestamine faili" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Failitüüp" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Tuvastamine failinime põhjal" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! ei ole tavalist odavat taskukalkulaatorit matkiv tarkvara. " +"Qalculate! püüab ära kasutada tänapäeva arvutite suurepärast liidest, " +"võimsust ja paindlikkust. Qalculate! keskmes seisab avaldis. Matemaatilise " +"avaldise kõigi arvude eraldi sisestamise asemel võib kirjutada kohe terve " +"avaldise ja seda hiljem muuta. Avaldiste tõlgendamine käib paindlikult ja " +"vigu sallivalt, nii et kui teed midagi valesti, siis annab Qalculate! " +"sellest sulle ka teada. Ühese lahenduseta avaldisi ei peeta ometi veaks. " +"Qalculate! lihtsustab nii palju kui suudab ning annab tulemuseks avaldise. " +"Lisaks arvudele ja tehtemärkidele võib avaldis sisaldada suvalises " +"kombinatsioonis muutujaid, ühikuid ja funktsioone." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Kas ja kuidas ühikuid automaatselt teisendada. Märkimisel teisendatakse " +"kõige paremini sobivatesse SI ühikutesse (ühikute väikseim kogus)" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Trigonomeetriliste funktsioonide vaikimisi nurgaühik." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Parsitud ja hinnatud arvude alus." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Kas hindamise tulemust lihtsustada või faktoriseerida." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Kas esitada ratsionaalarvud kümnendarvudena, murdudena või millegi " +"vahepealsena." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Arvu numbrite kordumise näitamine ümardamise asemel kolme punktiga (nt 2/3 " +"kuvatakse 0,666666..., mitte 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Kõigi SI prefiksite kasutamine. Märkimata jätmisel ei kasutata automaatselt " +"prefikseid, mis ei ole tuhande kordsed (senti-, detsi., deka-, hekto-)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Märkimise korral kasutatakse jagamise asemel negatiivseid astmeid (nt 5/x^2 " +"asemel 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Arvude kuvamine:" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Märkimise korral kuvatakse jooniseid töölehel. Märkimata jätmisel kuvatakse " +"neid eraldi aknas." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Kas joonistel kasutada värve." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Kas kujutada alusvõrku." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Kas joonistada joonise ümber täispiirded." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Joonte paksus pikslites." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Joonise loomisel kasutatavate interpoleerimissammude arv." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Jooniste pehmendamisrežiim." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Jooniste stiil." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Legendi asukoht joonistel." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate annab teada, et trükkimine ei ole võimalik. Kas gnuplot on " +"paigaldatud?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "puudub %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 peab olema arv." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 peab olema täisarv." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 peab olema tõeväärtus." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "vigane võti %1 jaoks: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "leiti mitu avaldist ühes joonisekäsus (%1 ja %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "VIGA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "HOIATUS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Määratud nimega funktsiooni, muutujat ega ühikut pole." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funktsioon: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Joonistamisliides" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Ühe või enama funktsiooni joonistamine sisesena või eraldi aknas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "avaldis" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "valik" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "väärtus" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "täisarv" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "tõeväärtus" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "arv" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "vaikimisi: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Funktsiooni nimi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Pealkiri" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "X-telje pealdis" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Y-telje pealdis" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Pilt, millesse joonis salvestada. Kui on andmata, joonistatakse joonis " +"aknas. Kui inline=true, näidatakse pilti sellest valikust sõltumata." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Salvestatava pildi tüüp. Võib olla automaatne, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Tõene värvilise, väär ühevärvilise joonise puhul." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "X-telje minimaalne väärtus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "X-telje maksimaalne väärtus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Kas kasutada X-teljel logaritmilist skaalat." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Kas kasutada Y-teljel logaritmilist skaalat." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "X-telje logaritmiline alus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Y-telje logaritmiline alus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Kas näidata joonisel alusvõrku." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Kas joonis ümbritseda piirdega kõigil külgedel (mitte ainult teljed)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Joonte paksus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Kuhu paigutada joonise legend. Võib olla kas none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Joonise silumine. Võib olla none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Joonise stiil. Võib olla lines, points, points_lines, boxes, histogram, " +"steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Skaala kasutamine teisel X-teljel" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Skaala kasutamine teisel Y-teljel" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Kas luua joonis sisesena, mitte uues aknas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Vahemaa kahe interpoleerimispunkti vahel. Vaata ka samm." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Interpoleerimispunktide arv. Vaata ka samm." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "X-muutuja nimi. See peab olema tundmatu muutuja" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Muutujate salvestamine faili" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Kõigi praegu defineeritud muutujate salvestamine faili. Neid võib uuesti " +"laadida %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fail" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fail: fail, millesse salvestada" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Muutujate laadimine failist" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Muutujate laadimine failist, mille %1 on eelnevalt loonud." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fail: laaditav fail" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Üldine" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Arvu alus:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Murru vorming:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Kümnendmurd" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Täpne" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Murdarv" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombineeritud" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Arvude kuvamine:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Puhas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Teaduslik" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Täpsus" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Lõputu jada tähistamine:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Lubatud" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Kõigi SI prefiksite kasutamine:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Negatiivsete astmete kasutamine:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Hindamine" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Teisendamine parimatesse SI ühikutesse:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Nurgaühik:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiaanid" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Kraadid" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Goonid" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Esitamisrežiim:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Lihtsustatult" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Teguriteks lahutatult" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Joonistamine" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Jooniste kuvamine siseselt:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Värvilised joonised:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Alusvõrgu näitamine:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Täispiirete näitamine:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Joonte paksus:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Diskreetimissagedus:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Pehmendamisrežiim:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naturaalsed kuupsplainid" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Joonise stiil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Sammud" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Legendi asukoht:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R on statistiliste arvutuste ja graafika keel ja keskkond, sarnanedes S " +"keelele ja keskkonnale.
    See pakub ohtralt statistika- (lineaarsed ja " +"mittelineaarsed mudelid, klassikalised statistikatestid, aegridade analüüs, " +"liigitamine, klasterdamine...) ja graafikameetodeid ning on äärmiselt " +"hõlpsalt laiendatav. S keel on sageli statistikauuringute lemmiktööriist, R " +"aga avatud lähtekoodiga tee neis osalemiseks." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Viga faili %1 avamisel" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R-i skriptifail (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Viga käsu parsimisel" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Topeltklõps avab failivalimisdialoogi" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-i lähtefailid (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage on vaba ja avatud lähtekoodiga matemaatikatarkvara süsteem, mida " +"levitatakse GPL litsentsi alusel.
    See ühendab paljude olemasolevate " +"avatud lähtekoodiga pakettide võimsuse ühtse Pythonil põhineva liidese taha." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage teostusfaili asukoht" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 tulemus" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Viimane väljund oli: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Pythoni skriptifail (*.py);;Sage skriptifail (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage protsessi tabas selle avaldise hindamisel krahh" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage protsessi tabas krahh" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage protsess lõpetas selle avaldise hindamisel töö" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage protsess lõpetas töö" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage käivitamine nurjus" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage asukoht:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.5 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Hoiatus: see taustaprogramm töötab ainult Scilabi versiooniga 5.5 " +"või uuem

    Scilab on vabatarkvaraline platvormist sõltumatu " +"arvutamistarkvara ning kõrgtaseme arvutamisele orienteeritud " +"programmeerimiskeel.

    Scilabi levitatakse vastavalt CeCILL litsentsile " +"(GPL-iga ühilduv)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"scilab-adv-cli käsu asukoht (hoiatus: Scilabi versioon peab olema vähemalt " +"5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "Scilab script file (*.sce);;Scilab function file (*.sci)" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "Scilabi skriptifail (*.sce);;Scilabi funktsioonifail (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "scilab-adv-cli käsu asukoht:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Laadi alla näidistöölehti" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Ava näidis" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantori tööleht (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Faili avamine" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Taustaprogrammi ei leitud

    \n" +"
    Võiksid proovida järgmisi asju:\n" +"
    • Seadistuste muutmine seadistustedialoogis;
    • " +"
    • Järgmise programmi pakettide paigaldamine:
    • %2
    " +msgstr[1] "" +"

    Taustaprogrammi ei leitud

    \n" +"
    Võiksid proovida järgmisi asju:\n" +"
    • Seadistuste muutmine seadistustedialoogis;
    • Ühe " +"järgmistest programmidest pakettide paigaldamine:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Viga" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Seanss %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Cantori komponendi leidmine nurjus." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Avatud on mitu salvestamata töölehte. Kas sulgeda need?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Cantori sulgemine" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Aktiivset projekti on muudetud. Kas salvestada see?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Projekti salvestamine" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Vaikimisi kasutatav taustaprogramm" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Ladumissüsteem vaikimisi" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Süntaksi esiletõstmine vaikimisi" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Lõpetamise vaikimisi lubamine" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Avaldiste nummerdamine vaikimisi" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Vaikimisi muutuste animeerimine töölehel" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Aktiivsele järgnevate kirjete automaatne taashindamine" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Taustaprogramm %1 ei ole paigaldatud" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Taustaprogrammiga %1 tekkis mõningaid probleeme,\n" +"palun kontrolli seadistust või paigalda vajalikud paketid.\n" +"Praegu saab seda töölehte ainult näha." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Salvesta lihttekstina" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Ekspordi LaTeXina" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Hinda töölehte" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "LaTeXit kasutav ladumissüsteem" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Süntaksi esiletõstmine" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Lõpetamine" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Reanumbrid" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Töölehe animeerimine" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Käivita taustaprogramm uuesti" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Hinda kirjet" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Lisa käsukirje" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Lisa tekstikirje" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Lisa käsukirje" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Lisa LaTeXi kirje" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Lisa leheküljevahetus" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Lisa pilt" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Eemalda aktiivne kirje" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Näita %1 abi" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Näita skriptiredaktorit" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Lõpetamise näitamine" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantori komponent" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015: Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Salvestamine" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Salvesta" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Käivita taustaprogramm uuesti" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Katkesta" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Arvutamine..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Valmis" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Seansi viga: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initsialiseerimine on lõpetatud" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Seansi initsialiseerimine" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Nimetu" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Kas soovid laadida aktiivse töölehe avalikku veebiserverisse?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Küsimus - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Tööleht ei ole salvestatud. Enne üleslaadimist tuleb see salvestada." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Hoiatus - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "See taustaprogramm ei toeta skripte" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Redigeerimine" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vaade" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Tööleht" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fail" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Uus" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneelid" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Seadistused" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Valmis" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X-vahemik" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X-vahemik" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X-vahemik" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Teksti &värv..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Font" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Rasvane" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "Kaldk&iri" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Katkestatud" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Otsinguriba" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Otsing:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Järgmine" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Eelmine" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Asendus:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Asenda" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Asenda &kõik" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Otsimise koht:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Tõstutundlik" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Seadista pilti" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Pildi lisamiseks tee siin paremklõps" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Pildi %1 laadimine nurjus" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Pildi seadistused" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Ava" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Kuva suurus" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Laius" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Kõrgus" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Eelvaatlus" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Trükkimise suurus" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Kuvasuuruse kasutamine" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automaatne)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Pildifaili avamine" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Näita LaTeXi koodi" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "LaTeXi teostusfaili asukoht" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Dvips-i teostusfaili asukoht" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nimi" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Väärtus" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Alates:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Kuni:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Üldpealkiri" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abstsissi skaala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinaadi skaala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Joonise pealkiri:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE matemaatikatarkvara kasutajaliides" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016: Filipe Saraiva
    (C) 2009-2015: Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Hooldaja
    Qt5/KF5 port, Scilabi ja Pythoni taustaprogrammid" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Algne autor
    Hooldaja (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra taustaprogramm" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave'i taustaprogramm" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Liides" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantori ikoon" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Taustaprogrammi kasutamine" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Avatavad dokumendid." + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Viga faili %1 avamisel" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Lehekülje vahetus ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Matemaatika KDE moodi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nimi:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Väärtus:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Lisa uus muutuja" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Laadi muutujad" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Salvesta muutujad" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Puhasta muutujad" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Kas tõesti eemaldada kõik muutujad?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Kinnitus - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Faili laadimine" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Eemalda tulemus" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"KDE tekstiredaktori komponenti ei leitud.\n" +"Palun kontrolli oma KDE paigaldust." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skriptiredaktor" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skriptiredaktor - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Ei leitud" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Jõuti algusse" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Jõuti lõppu" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Asendati %1 esinemine" +msgstr[1] "Asendati %1 esinemist" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Käsud" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Tulemused" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Vead" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeXi kood" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Vaikimisi taustaprogramm:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Sisselülitamisel hindab Cantor automaatselt kõiki aktiivsele kirjele " +"järgnevaid kirjeid." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Kirjete automaatne taashindamine" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Vaikeväärtused" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "LaTeXi ladumissüsteemi lubamine" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Süntaksi esiletõstmise lubamine" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Lõpetamise lubamine" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Reanumbrite lubamine" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Töölehe animatsioonide lubamine" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Näita renderdust" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Näita koodi" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Eps-faili renderdamine nurjus. Nähtavasti läheb vaja lisapakette" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Faili %1 kirjutamine nurjus." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Faili kirjutamine nurjus." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Viga faili %1 salvestamisel" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Viga lates.xsl laaditabeli laadimisel" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Käsukirje" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Tekstikirje" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Lisa käsukirje" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeXi kirje" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Pilt" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Lehekülje vahetus" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Lisa tekstikirje" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Text Entry Before" +msgid "Insert Entry Before" +msgstr "Tekstikirje ees" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Lisa LaTeXi kirje" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Teksti &värv..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Värv" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Teksti &esiletõstmine..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Font" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Fondi &suurus" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Rasvane" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "Kaldk&iri" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "Alla&joonitud" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Lä&bikriipsutatud" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Joonda &vasakule" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Vasakule" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Joonda &keskele" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Keskele" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Joonda &paremale" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Paremale" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "Rööp&joonda" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Rööpselt" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Eemalda kirje" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Lohista kirjet" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Taustaprogrammi, millega see fail loodi, ei ole paigaldatud. Vajalik on %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Avalda tööleht" + +#~ msgid "Waiting for Image..." +#~ msgstr "Pildi ootamine..." + +#~ msgid "Insert" +#~ msgstr "Lisamine" + +#~ msgid "Insert Before" +#~ msgstr "Lisa ette" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Faili %1 avamine nurjus - tundmatu MIME tüüp" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeXi dokument" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantori tööleht" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Cantori R-i taustaprogrammi server" + +#~ msgid "R Server" +#~ msgstr "R-i server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009: Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Kasutamine: saveVariables fail" + +#~ msgid "Saving failed." +#~ msgstr "Salvestamine nurjus." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Kasutamine: loadVariables fail" + +#~ msgid "Loading failed." +#~ msgstr "Laadimine nurjus." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013: Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Pythoni käsu asukoht" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantori R-i server" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Kas eksportida ka pildid?" + +#, fuzzy +#~| msgid "Path to scilab-adv-cli command:" +#~ msgid "Path to python2 command:" +#~ msgstr "scilab-adv-cli käsu asukoht:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Muutujate haldamise lubamine" + +#~ msgid "Could not start the server." +#~ msgstr "Serveri käivitamine nurjus." + +#~ msgid "Pause Animation" +#~ msgstr "Peata animatsioon" + +#~ msgid "Start Animation" +#~ msgstr "Käivita animatsioon" + +#~ msgid "Restart Animation" +#~ msgstr "Käivita animatsioon uuesti" + +#~ msgid "Append Command Entry" +#~ msgstr "Lisa käsukirje taha" + +#~ msgid "Append Text Entry" +#~ msgstr "Lisa tekstikirje taha" + +#~ msgid "Append Latex Entry" +#~ msgstr "Lisa LaTeXi kirje" + +#~ msgid "Append Image" +#~ msgstr "Lisa pilt" + +#~ msgid "Append Page Break" +#~ msgstr "Lisa leheküljevahetus" + +#~ msgid "Other" +#~ msgstr "Muu" + +#~ msgid "And %1 more..." +#~ msgstr "Ja veel %1..." + +#~ msgid "Main Toolbar" +#~ msgstr "Peamine tööriistariba" + +#~ msgid "Completion Style:" +#~ msgstr "Lõpetamise stiil:" + +#~ msgid "Popup" +#~ msgstr "Hüpikdialoog" + +#~ msgid "The style used for Completion" +#~ msgstr "Lõpetamisel kasutatav stiil" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Sage teostusfaili asukoht" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Lisa käsukirje ette" + +#~ msgid "Command Entry Before" +#~ msgstr "Käsukirje ees" + +#~ msgid "GroupBox" +#~ msgstr "Liitkast" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "See test nõuab töötavat %1 taustaprogrammi" + +#~ msgid "Form" +#~ msgstr "Vorm" + +#~ msgid "Help" +#~ msgstr "Abi" + +#~ msgid "Show Help Panel" +#~ msgstr "Abipaneeli näitamine" + +#~ msgid "Uploading successful" +#~ msgstr "Üleslaadimine õnnestus" + +#~ msgid "Error uploading File %1" +#~ msgstr "Viga faili %1 üleslaadimisel" + +#~ msgid "MathematiKPart" +#~ msgstr "MathematiKPart" + +#~ msgid "MathematiK" +#~ msgstr "MathematiK" diff --git a/po/et/docs/cantor/index.docbook b/po/et/docs/cantor/index.docbook new file mode 100644 index 0000000..429e7f8 --- /dev/null +++ b/po/et/docs/cantor/index.docbook @@ -0,0 +1,1044 @@ + + + + ATEX"> + + +]> + + + +&cantor;i käsiraamat + + + Alexander Rieder alexanderrieder@gmail.com +MarekLaane
    bald@smail.ee
    Tõlge eesti keelde
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2014-05-09 +0.5 (&kde; 4.14) + + +&cantor; on rakendus, mille eesmärk on pakkuda kena töölehevaadet teistele vaba takrvara matemaatikaprogrammidele. + + + +KDE +kdeedu +matemaatika +matemaatika +Cantor +Sage +Python +Lua +Scilab +R +Maxima + + +
    + + +Sissejuhatus + +&cantor; on rakendus, mis võimaldab kasutada oma lemmik-matemaatikarakendust kenas ja &kde;-ga lõimitud tööleheliideses. Mitmed dialoogid aitavad toime tulla levinumate ülesannetega ning töölehti on võimalik teistega jagada. + + + +&cantor;i kasutamine + +Pilt: +&cantor;i pilt + + + + + + Pilt + + + + + + + +&cantor;i omadused + + Selgesti mõistetav töölehevaade avaldiste hindamiseks. + Töölehel näeb tulemusi graafiku kujul. + Lihtne pluginapõhine struktuur võimaldab lisada uusi taustaprogramme. + Uue kraami hankimise võimalus lubab alla laadida näidistöölehti (ja ka üles laadida). + Matemaatikavalemite kasutamine &latex;i abil. + Taustaprogrammiteadlik süntaksi esiletõstmine. + Pluginapõhised abidialoogid levinumate ülesannete täitmiseks, näiteks funktsiooni integreerimiseks või maatriksi sisestamiseks. + + + + +&cantor;i taustaprogrammid +&cantor; võimaldab kasutada mitut taustaprogrammi. Sinu valik sõltub sellest, mida soovid saavutada. +Praegu on saadaval järgmised taustaprogrammid: + + Sage: + + Sage on vaba ja avatud lähtekoodiga matemaatikatarkvara süsteem, mida levitatakse GPL litsentsi alusel. See ühendab paljude olemasolevate avatud lähtekoodiga pakettide võimsuse ühtse Pythonil põhineva liidese taha. Täpsemalt kõneleb sellest http://sagemath.org. + + + + Maxima: + + Maxima on sümbol- ja arvavaldiste igakülgse kasutamise süsteem, kaasa arvatud diferentsiaalarvutus, integraalarvutus. Taylori read, Laplace'i teisendused, tavalised diferentsiaalvõrrandid, lineaarvõrrandite süsteemid, polünoomid ning hulgad, loendid, vektorid, maatriksid ja tensorid. Maxima tagab äärmiselt täpsed arvulised tulemused, kasutades selleks täpseid murde ning muutuva täpsusega täis- ja murdarve. Maxima võib esitada funktsioone ja andmeid kahe- ja kolmemõõtmeliste joonistena. Täpsemalt kõneleb sellest http://maxima.sourceforge.net. + + + + R: + + R on statistiliste arvutuste ja graafika keel ja keskkond, sarnanedes S keelele ja keskkonnale. See pakub ohtralt statistika- (lineaarsed ja mittelineaarsed mudelid, klassikalised statistikatestid, aegridade analüüs, liigitamine, klasterdamine...) ja graafikameetodeid ning on äärmiselt hõlpsalt laiendatav. S keel on sageli statistikauuringute lemmiktööriist, R aga avatud lähtekoodiga tee neis osalemiseks. Täpsemalt kõneleb sellest http://www.r-project.org. + + + + &kalgebra;: + + &kalgebra; on MathML-põhine graafikute arvutaja, mis kuulub &kde; õpirakenduste projekti koosseisu. Täpsemat teavet annab veebilehekülg http://edu.kde.org/kalgebra/. + + + + Qalculate!: + + Qalculate! ei ole tavalist odavat taskukalkulaatorit matkiv tarkvara. Qalculate! püüab ära kasutada tänapäeva arvutite suurepärast liidest, võimsust ja paindlikkust. Qalculate! keskmes seisab avaldis. Matemaatilise avaldise kõigi arvude eraldi sisestamise asemel võib kirjutada kohe terve avaldise ja seda hiljem muuta. Avaldiste tõlgendamine käib paindlikult ja vigu sallivalt, nii et kui teed midagi valesti, siis annab Qalculate! sellest sulle ka teada. Ühese lahenduseta avaldisi ei peeta ometi veaks. Qalculate! lihtsustab nii palju kui suudab ning annab tulemuseks avaldise. Lisaks arvudele ja tehtemärkidele võib avaldis sisaldada suvalises kombinatsioonis muutujaid, ühikuid ja funktsioone. Rohkem teavet annab veebilehekülg http://qalculate.sourceforge.net/. + + + + Python2: + + Python on märkimisväärselt võimas dünaamiline programmeerimiskeel, mida kasutatakse väga paljude rakenduste juures. Teadusprogrammeerimiseks on saadaval mitu Pythoni paketti. + Pythonit levitatakse vastavalt Pythoni tarkvara sihtasutuse litsentsile (ühildub GPL-iga). Rohkem teavet annab ametlik veebilehekülg. + + Taustaprogramm lisab &cantor;i peamenüüsse ühe täiendava menüü: Pakett. Selle menüü ainuke kirje on PakettImpordi pakett. Selle abil saab importida Pythoni pakette töölehele. + + + See taustaprogramm toetab ainult Python 2. + + + + + Scilab: + + Scilab on vabatarkvaraline platvormist sõltumatu arvutamistarkvara ning kõrgtaseme arvutamisele orienteeritud programmeerimiskeel. + Scilabi levitatakse vastavalt CeCILL litsentsile (ühildub GPL-iga). Rohkem teavet annab veebilehekülg http://www.scilab.org/. + + Taustaprogrammi kasutamiseks peab süsteemi olema paigaldatud Scilabi versioon 5.5 või uuem. + + + + + Octave: + + &GNU; Octave on peamiselt arvutamiseks mõeldud kõrgkeel. See pakub mugava käsurealiidese lineaarsete ja mittelineaarsete ülesannete lahendamiseks ja muudeks arvutustoiminguteks, pruukides selleks keelt, mis on valdavalt ühilduv MATLAB-iga. Täpsemalt kõneleb sellest veebilehekülg http://www.gnu.org/software/octave/. + + + + Lua: + + Lua on kiire ja kerge skriptikeel lihtsa protseduurilise süntaksiga. Luas on mitu matemaatikale ja teadusele orienteeritud teeki. + Rohkem teavet annab veebilehekülg http://www.lua.org/. + See taustaprogramm toetab luajit 2. + + + + + + + +&cantor;i töötsoon + + + &cantor;i töötsoon + + + + + + &cantor;i töötsoon + + + + +&cantor;i töötsoon koosneb kolmest osast: + Kaardiriba, kus saab liikuda avatud töölehtede vahel. + Abipaneel, kus näeb käskude kohta teavet, kui sisestada "? käsk". + Muutujate haldamise paneel, kus näeb kõiki aktiivse töölehe saadaolevaid muutujaid. Abi ja muutujate haldamise paneele näidatakse &cantor;i akna külgribal eraldi kaartidel. Muutujate haldurit saab kasutada ainult Maxima (kui see on sisse lülitatud Seadistused&cantor;i seadistamine... Maxima leheküljel), &kalgebra; Octave'i, Python 2, Qualculate'i ja Scilabi taustaprogrammide puhul. + Tööleht ise. + + + +Tööleht +Tööleht on &cantor;i põhiline tööpiirkond. Selle abil saab sisestada avaldisi, lasta taustaprogrammil sooritada arvutusi ning vaadata tulemusi. Käsud, mida tööleht tunnistab, sõltuvad kasutatavast taustaprogrammist, mistõttu tuleb omandada vajaliku taustaprogrammi süntaks (selle juures on suureks abiks nupp Näita abi). Kui tead käsku, aga vajad täpsemat teavet, võid kirjutada "? käsk" ning töölehest paremal ilmubki nähtavale kontekstiabi. Kui soovid näha mõningaid näidistöölehti, vali menüüst Fail käsk Laadi alla näidistöölehti ning laadi alla töölehti, mida teised kasutajad on avalikuks teinud. +Kõigi töölehe käsukirjete kontrollimiseks saab kasutada töölehe paremas osas leiduvaid juhtnuppe, mida näidatakse, kui viia hiirekursor kirjevälja kohale. Kõigi kirjete korral on kolm põhitoimingut: Hinda kirjet kirje arvutamise tulemuste uuendamiseks, Lohista kirjet kirje liigutamiseks töölehel teise kohta ning Eemalda kirje kirje eemaldamiseks aktiivselt töölehelt. +Töölehe kirjete fondi ja joondamise seadistusi saab muuta töölehe kohal asuva tööriistariba vahendusel. + + Seadistused + Menüü Seadistused võimaldab muuta mõningaid aktiivse töölehe välimuse seadistusi. + + + Matemaatikavalemite kasutamine &latex;i abil + + See muudab viisi, kuidas näidatakse tulemusi. Sisselülitamise korral saadetakse tulemus läbi &latex;i süsteemi, mis tagab visuaalselt kenad valemid. Näiteks 3*x^2*sqrt(2)*x+2/3 asemel näeb + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Süntaksi esiletõstmine + + Süntaksi esiletõstmine suurendab koodi loetavust, tõstes eri värviga esile võtmesõnad või kokkukuuluvad sulud. + + + + Lõpetamine + + Selle sisselülitamisel näitab &cantor; parajasti sisestatava käsu võimalikke kujusid, kui vajutad TAB-klahvi. Kui on ainult üks valik, sisestatakse see sinu eest. + + + + Reanumbrid + + See määrab, kas erinevate avaldiste ees on näha numbrid. Nii saab meeles hoida vanemaid tulemusi - Maximas käib see näiteks käsu %O1 abil. + + + + Töölehe animeerimine + + Selle abil saab määrata, kas töölehe muutuste esiletõstmiseks kasutatakse mitmesuguseid animatsioone või mitte. + + + + + + + + + +Käskude seletused + + +&cantor;i peaaken + +&cantor; kasutab tavapäraseid &kde; menüü kirjeid, millest kõneleb lähemalt &kde; põhialuste käsiraamatu menüüd käsitlev osa. + +&cantor;i täiendavad või spetsiaalsed menüükirjed: + + +Menüü Fail + + + + &Ctrl;N Fail Uus +Uue töölehe loomine vaikimisi taustaprogrammiga. + + +Fail Uus taustaprogramm +Uue töölehe loomine valitud taustaprogrammiga. + + +Fail Laadi alla näidistöölehti +Avab dialoogi näidiste allalaadimiseks, mida on teised &cantor;i kasutajad üles laadinud GetHotNewStuffi abil. + + +Fail Ava näidis +Avab dialoogi laaditava näidise valimiseks. Näidised tuleb eelnevalt alla laadida menüükäsuga Fail Laadi alla näidistöölehti + + +Fail Salvesta lihttekstina +Salvestab aktiivse töölehe lihttekstidokumendina. + + +Fail Ekspordi LaTeXina +Salvestab aktiivse töölehe &latex;i dokumendina. + + +Fail Avalda tööleht +Avab dialoogi sinu aktiivse töölehe avaldamiseks ja selle muutmiseks kättesaadavaks teistele &cantor;i kasutajatele GetHotNewStuffi abil. + + +Fail Käivita skript +Laadib ja käivitab aktiivse taustaprogrammi skripte. + + + + + + + +Menüü Vaade + + + + &Ctrl;+ Vaade Suurenda +Suurendab aktiivset töölehte 10% võrra. + + + &Ctrl;- Vaade Vähenda +Vähendab aktiivset töölehte 10% võrra. + + +Vaade Näita skriptiredaktorit +Avab aktiivse taustaprogrammi skripti redaktori. + + +Vaade Paneelid Abi +Lülitab Abi kaardi näitamise külgribal sisse või välja. + + +Vaade Paneelid Muutujate haldur +Lülitab muutujate halduri kaardi näitamise külgribal sisse või välja. + + + + + + +Menüü Tööleht + + + +Tööleht Hinda töölehte +Käivitab terve töölehe hindamise. + + + &Shift;Return Tööleht Hinda kirjet +Käivitab aktiivse kirje hindamise. + + + &Ctrl;Return Tööleht Lisa käsukirje +Lisab uue käsukirje kursori asukohta. + + +Tööleht Lisa tekstikirje +Lisab uue tekstikirje kursori asukohta. + + +Tööleht Lisa pilt +Lisab pildimalli kursori asukohta. Sul tuleb klõpsata mallil &HPNga;, et panna paika pildi üksikasjad. + + +Tööleht Lisa leheküljevahetus +Lisab leheküljevahetuse kursori asukohta. + + + &Shift;Del Tööleht Eemalda aktiivne kirje +Eemaldab aktiivse kirje töölehelt. + + + + + + +Menüü Seadistused +See menüü sisaldab tavapäraseid &kde; menüü Seadistused kirjeid ning kirjeid, mida tutvustab seadistuste osa. + + + +Menüü Abi +&help.menu.documentation; + + + + + +&cantor; arendajatele + +&cantor;it saab hõlpsasti laiendata pluginate abil. Kirjutada saab järgmisi asju + + Taustaprogrammid: + + Uus taustaprogramm võimaldab kasutada &cantor;i liidest mõne teise programmiga. + + + + Abilised: + + Abilised pakuvad dialooge levinumate ülesannete automatiseerimiseks (näiteks maatriksi sisestamine või skripti käivitamine). + + + + +Praegu puuduvad spetsiaalsed arendajate õppematerjalid ja API dokumentatsioon, nii et kui soovid pluginat kirjutada, tuleb endal lähtekoodi uurida. Kõik liiede definitsioonid asuvad kataloogis lib. Teostuse näidisteks on &cantor;iga kaasas olevad pluginad. + + + + +Küsimused ja vastused +&reporting.bugs; &updating.documentation; + + Menüükirje Matemaatikavalemite kasutamine LaTeXi abil puudub + Kõik taustaprogrammid ei toeta kõiki võimalusi. Praeguses versioonis on &latex;i väljund toetatud Maxima, Qalculate! ja Sage taustaprogrammis. + + + Paigaldasin Sage/Maxima, aga vastavat taustaprogrammi pole näha. + + Asi võib olla selles, et &cantor; ei osanud seda üles leida. Ava dialoog Seadistused&kappname; seadistamine... ja muuda vajaliku rakenduse asukohta. + + + + Miks nii imelik nimi - mis on sellel pistmist matemaatikaga? + &cantor; on saanud nime saksa matemaatiku Georg Cantori järgi, kes oli hulgateooria looja. + + + + + + +Autorid ja litsents + +&cantor; +Rakenduse autoriõigus 2009-2011: Alexander Rieder alexanderrieder@gmail.com + +Dokumentatsiooni autoriõigus © 2009-2011: Alexander Rieder alexanderrieder@gmail.com + +Tõlge eesti keelde: Marek Laane bald@smail.ee +&underFDL; &underGPL; + + +Paigaldamine + + +&cantor;i hankimine +&install.intro.documentation; + + +Nõuded + +&cantor;i edukaks kasutamiseks on vajalik &kde; 4. Kui soovid ladumissüsteemi kasutada, peavad paigaldatud olema &latex; ja LibSpectre. Kindla taustaprogrammi kasutamiseks peab paigaldatud olema vastav matemaatikapakett. + + + + + + + + + +Kompileerimine ja paigaldamine +&install.compile.documentation; + + +Seadistamine + +Sõltuvalt süsteemist võib olla vajalik muuta &cantor;i kasutatavate taustaprogrammide asukohta. + + + + + +&documentation.index; +
    + + diff --git a/po/eu/cantor.po b/po/eu/cantor.po new file mode 100644 index 0000000..13a7b6d --- /dev/null +++ b/po/eu/cantor.po @@ -0,0 +1,3268 @@ +# Translation of cantor.po to Euskera/Basque (eu). +# Copyright (C) 2011 This_file_is_part_of_KDE +# This file is distributed under the same license as the kdeedu package. +# +# Iñigo Salvador Azurmendi , 2011. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2011-10-11 23:56+0200\n" +"Last-Translator: Iñigo Salvador Azurmendi \n" +"Language-Team: Basque \n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Iñigo Salvador Azurmendi" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "xalba@euskalnet.net" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Gorde emaitza" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Marrazketa aurreratua" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Marraztu" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Adierazpena:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Aukera gehigarriak:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Marraztu" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Kalkulatu" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Aldagaia:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Beheko muga:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Goiko muga:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Algebra &lineala" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Sortu matrizea" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Zutabeak:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Errenkadak:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Kalkulatu autobalioak" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrizea:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Kalkulatu autobektoreak" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Matrizea alderantzikatu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Aldagaia" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Izena" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Gutxienekoa:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Gehienezkoa:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. aldagaia" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. aldagaia" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Exekutatu script-a" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Ebatzi ekuazioak" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ekuazioak:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Aldagaiak:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Begiratu %3 informazio " +"gehiago eskuratzeko
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Hautatu erabili beharreko 'backend':" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Egin hau 'backend' lehenetsia" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R script fitxategia" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Maxima-rako bidea:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Saioaren hasieran automatikoki exekutatu beharreko script-en zerrenda" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Akatsa: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command" +msgstr "Maxima-rako bidea:" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R script fitxategia" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command:" +msgstr "Maxima-rako bidea:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima-ren exekutagarrirako bidea" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima batch fitxategia" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maxima abiarazteak huts egin du" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima kraskatu egin da. Berrabiarazten..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima bitan kraskatu da oso denbora laburrean. Abiarazteko saiakerak gelditu" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Akatsa - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "function" +msgstr "Ekuazioak:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima-rako bidea:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave-ren exekutagarrirako bidea" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave script fitxategia" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Sintaxi akatsa" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave-rako bidea:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R script fitxategia" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "Functions" +msgstr "Ekuazioak:" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Expression" +msgstr "Adierazpena:" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, fuzzy, kde-format +#| msgid "Remove Entry" +msgid "Remove" +msgstr "Kendu sarrera" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, fuzzy, kde-format +#| msgid "Clear Variables" +msgid "Clear List" +msgstr "Garbitu aldagaiak" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, fuzzy, kde-format +#| msgid "Variable" +msgid "X variable" +msgstr "Aldagaia" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, fuzzy, kde-format +#| msgid "Plot title:" +msgid "Plot title" +msgstr "Marrazkiaren izenburua:" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, fuzzy, kde-format +#| msgid "Display Size" +msgid "Display Grid" +msgstr "Bistaratu neurria" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, fuzzy, kde-format +#| msgid "Display Size" +msgid "Display inline" +msgstr "Bistaratu neurria" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "expression" +msgstr "Adierazpena:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, fuzzy, kde-format +#| msgctxt "@title:column" +#| msgid "Value" +msgid "value" +msgstr "Balioa" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, fuzzy, kde-format +#| msgid "Line Numbers" +msgid "number" +msgstr "Lerro zenbakiak" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, fuzzy, kde-format +#| msgid "Defaults" +msgid "default: %1" +msgstr "Lehenetsiak" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load variables from a file" +msgstr "Zamatu aldagaiak" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Orokorra" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Precision" +msgstr "Adierazpena:" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, fuzzy, kde-format +#| msgid "Evaluate Entry" +msgid "Evaluate" +msgstr "Ebaluatu sarrera" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, fuzzy, kde-format +#| msgid "Plot" +msgid "Plotting" +msgstr "Marraztu" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, fuzzy, kde-format +#| msgid "Display Size" +msgid "Display plots inline:" +msgstr "Bistaratu neurria" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show grid:" +msgstr "Erakutsi kodea" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, fuzzy, kde-format +#| msgid "Plot title:" +msgid "Plot Style:" +msgstr "Marrazkiaren izenburua:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R lengoaia bat da eta estatistika kalkulu eta grafikoentzako ingurune bat, S " +"lengoaia eta ingurunearen antzekoa.
    teknika estatistiko (eredu lineala " +"eta ez-lineala, proba estatistiko klasikoak, denbora-serie azterketa, " +"sailkapena, multzokatzea, ...) eta grafiko aniztasun zabala hornitzen du, " +"eta oso hedagarria da. S lengoaia maiz izaten da estatistika metodologian " +"ikertzeko hautatutako bitartekoa, eta R-k jarduera horretan esku hartzeko " +"Iturburu Irekiko bide bat ematen du." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Akatsa %1 fitxategia irekitzerakoan" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R script fitxategia" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Akatsa komandoaren azterketa sintaktikoan" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Klik bikoitza fitxategi hautaketa elkarrizketa irekitzeko" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R iturburu fitxategiak (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage-ren exekutagarrirako bidea" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1-(r)en emaitza" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Azken irteera izan da: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python script fitxategia\n" +"*.sage|Sage script fitxategia" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage prozesua kraskatu egin da adierazpen hau ebaluatu bitartean" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage prozesua kraskatu egin da" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage prozesua irten egin da adierazpen hau ebaluatu bitartean" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage prozesua irten egin da" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage abiarazteak huts egin du" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage-rako bidea:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.py|Python script fitxategia\n" +"*.sage|Sage script fitxategia" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Jaitsi adibide lan-orria" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Ireki adibidea" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor lan-orria" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open image file" +msgid "Open file" +msgstr "Ireki irudi fitxategia" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Akatsa" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "%1 saioa" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Ezin izan da aurkitu Cantor atala." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Gorde emaitza" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Modu lehenetsian erabiltzen den 'backend'" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Erabili sintaxi nabarmenketa modu lehenetsian" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Gaitu adierazpenen zenbakitzea modu lehenetsian" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automatikoki berrebaluatu unekoaren azpiko sarrerak" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "%1 'backend' instalatu gabe dago" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Arazo batzuk daude %1 'backend'-arekin,\n" +"mesedez egiaztatu zure konfigurazioa edo instalatu beharrezko paketeak.\n" +"Lan-orri hau besterik ezingo duzu ikusi." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, fuzzy, kde-format +#| msgid "Export to LaTex" +msgid "Export to LaTeX" +msgstr "Esportatu LaTex-era" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Ebaluatu lan-orria" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Sintaxi nabarmenketa" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Lerro zenbakiak" + +#: cantor_part.cpp:270 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Animate Worksheet" +msgstr "Ebaluatu lan-orria" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Berrabiarazi 'backend'" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Ebaluatu sarrera" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Txertatu komando sarrera" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Txertatu testu sarrera" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Txertatu komando sarrera" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Txertatu Latex sarrera" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Txertatu orri jauzia" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Txertatu irudia" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Kendu uneko sarrera" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Erakutsi script editorea" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2011 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2011 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save as" +msgstr "Gorde emaitza" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Berrabiarazi 'backend'" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Kalkulatzen..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Prest" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Saioaren akatsa: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Hasieraketa amaituta" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Saioa hasieratzen" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Izengabea" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Uneko lan-orria web zerbitzari publiko batera igo nahi duzu?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Galdera - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Lan-orria ez dago gordeta. Gorde egin behar zenuke igo baino lehen." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Abisua - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "'Backend' honek ez ditu script-ak onartzen." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Ikusi" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Lan-orria" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fitxategia" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Berria" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panelak" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "E&zarpenak" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Prest" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgid "Text Entry" +msgid "Text Color" +msgstr "Testu sarrera" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configuratu irudia" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Eskuinarekin klikatu hemen irudia txertatzeko" + +#: imageentry.cpp:222 +#, fuzzy, kde-format +#| msgid "Cannot load image " +msgid "Cannot load image %1" +msgstr "Irudia ezin zamatu " + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Irudiaren ezarpenak" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Ireki" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Bistaratu neurria" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Zabalera" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Altuera" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Ireki irudi fitxategia" + +#: latexentry.cpp:67 textentry.cpp:65 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show LaTeX code" +msgstr "Erakutsi kodea" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Latex-en exekutagarrirako bidea" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Izena" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Balioa" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Nondik:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Nora:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Izenburu nagusia" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abzisaren eskala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordenatuaren eskala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Marrazkiaren izenburua:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDEren bitartekoa aplikazio matematikoentzako" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2011 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2011 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Octave backend" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Octave 'backend'" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra 'backend'" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave 'backend'" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Erabili 'backend' hau" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Ireki beharreko dokumentua" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Akatsa %1 fitxategia irekitzerakoan" + +#: pagebreakentry.cpp:39 +#, fuzzy, kde-format +#| msgid "Page Break" +msgid "--- Page Break ---" +msgstr "Orri jauzia" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Matematikak lantzeko KDEren modua" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Izena:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Balioa:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Erantsi aldagai berria" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Zamatu aldagaiak" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Biltegiratu aldagaiak" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Garbitu aldagaiak" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Ziur zaude aldagai guztiak kendu nahi dituzula?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Baieztapena - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load file" +msgstr "Zamatu aldagaiak" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Kendu emaitza" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Ezin izan da KDE testu-editore osagai bat aurkitu;\n" +"mesedez egiaztatu zure KDEren instalazioa." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Script editorea" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Script editorea - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Command Entry" +msgid "Commands" +msgstr "Komando sarrera" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Result" +msgid "Results" +msgstr "Emaitza" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Error" +msgid "Errors" +msgstr "Akatsa" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "'Backend' lehenetsia:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Gaituta dagoenean, Cantorrek automatikoki ebaluatuko ditu unekoaren azpiko " +"sarrera guztiak." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Berrebaluatu sarrerak automatikoki" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Lehenetsiak" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Gaitu sintaxi nabarmenketa" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Gaitu lerro zenbakiak" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Enable Worksheet Animations" +msgstr "Ebaluatu lan-orria" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Erakutsi kodea" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Ezin errendatu Eps fitxategia. Pakete osagarriak behar izan ditzakezu." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Ezin idatzi %1 fitxategia." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Ezin idatzi %1 fitxategia." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Akatsa %1 fitxategia gordetzerakoan" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Akatsa latex.xsl estilo-orria zamatzerakoan" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Komando sarrera" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Testu sarrera" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Txertatu komando sarrera" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, fuzzy, kde-format +#| msgid "Text Entry" +msgid "LaTeX Entry" +msgstr "Testu sarrera" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, fuzzy, kde-format +#| msgid "Image Entry" +msgid "Image" +msgstr "Irudi sarrera" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Orri jauzia" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Txertatu testu sarrera" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Entry Before" +msgid "Insert Entry Before" +msgstr "Txertatu sarrera aurretik" + +#: worksheet.cpp:1264 +#, fuzzy, kde-format +#| msgid "Insert Latex Entry" +msgid "Insert LaTeX Entry" +msgstr "Txertatu Latex sarrera" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, fuzzy, kde-format +#| msgid "Height" +msgctxt "@label right justify" +msgid "Right" +msgstr "Altuera" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Kendu sarrera" + +#: worksheetentry.cpp:707 +#, fuzzy, kde-format +#| msgid "Image Entry" +msgid "Drag Entry" +msgstr "Irudi sarrera" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Fitxategi hau sortzeko erabili zen 'backend' ez dago instalatuta. %1 " +#~ "behar du" + +#~ msgid "Publish Worksheet" +#~ msgstr "Argitaratu lan-orria" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert" +#~ msgstr "Txertatu sarrera" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Ezin ireki %1 fitxategia: MIME mota ezezaguna" + +#, fuzzy +#~| msgid "*.tex|LaTex Document" +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTex dokumentua" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor lan-orria" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Cantorren R 'backend'-arentzako zerbitzaria" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#, fuzzy +#~| msgid "Load Variables" +#~ msgid "Usage: loadVariables file" +#~ msgstr "Zamatu aldagaiak" + +#, fuzzy +#~| msgid "Load Variables" +#~ msgid "Loading failed." +#~ msgstr "Zamatu aldagaiak" + +#, fuzzy +#~| msgid "(C) 2009-2011 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2011 Alexander Rieder" + +#~ msgid "Cantor Server for R" +#~ msgstr "R-rentzako Cantor zerbitzaria" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Irudiak ere esportatu nahi dituzu?" + +#~ msgid "Could not start the server." +#~ msgstr "Ezin izan da zerbitzaria abiarazi." + +#~ msgid "Pause Animation" +#~ msgstr "Eten animazioa" + +#~ msgid "Start Animation" +#~ msgstr "Hasi animazioa" + +#~ msgid "Restart Animation" +#~ msgstr "Berrabiarazi animazioa" + +#~ msgid "Append Command Entry" +#~ msgstr "Erantsi komando sarrera" + +#~ msgid "Append Text Entry" +#~ msgstr "Erantsi testu sarrera" + +#~ msgid "Append Latex Entry" +#~ msgstr "Erantsi Latex sarrera" + +#~ msgid "Append Image" +#~ msgstr "Erantsi irudia" + +#~ msgid "Append Page Break" +#~ msgstr "Erantsi orri jauzia" + +#~ msgid "And %1 more..." +#~ msgstr "Eta %1 gehiago..." + +#~ msgid "Main Toolbar" +#~ msgstr "Tresna-barra nagusia" + +#~ msgid "Popup" +#~ msgstr "Azaleratu" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Sage-ren exekutagarrirako bidea" diff --git a/po/fi/cantor.po b/po/fi/cantor.po new file mode 100644 index 0000000..91ea201 --- /dev/null +++ b/po/fi/cantor.po @@ -0,0 +1,3240 @@ +# KDE Finnish translation sprint participants: +# Author: Artnay +# Author: Lliehu +# Author: Niklas Laxström +# Lasse Liehu , 2012, 2013, 2014, 2015, 2016. +# Tommi Nieminen , 2018. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-08-23 20:28+0200\n" +"Last-Translator: Tommi Nieminen \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POT-Import-Date: 2013-01-13 20:43:20+0000\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jiri Grönroos, Lasse Liehu, Tommi Nieminen" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" +"jiri.gronroos+kde@iki.fi, lasse.liehu@gmail.com, translator@legisign.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Tauko" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Käynnistä" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Pysäytä" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Tallenna tulos" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Lisää kaavio-ominaisuuksia" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Piirrä" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Lauseke:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Lisäasetukset:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Piirrä" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Asetus käytössä" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Laske" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Derivoi" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Muuttuja:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Kertaa: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paketti" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Tuo paketti" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paketti:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integroi" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Alaraja:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Yläraja:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "määrätty integraali" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineaarialgebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Luo matriisi" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Sarakkeita:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rivejä:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Laske ominaisarvot" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriisi:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Laske ominaisvektorit" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Käännä matriisi" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "3D-piirto" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Muuttuja" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nimi" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimi:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimi:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "2D-piirto" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. muuttuja" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. muuttuja" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Suorita skripti" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Ratkaise yhtälöitä" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Yhtälöt:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Muuttujat:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Suositeltu versio: %4

    %2

    Katso lisätietoa: %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Valitse käytettävä taustajärjestelmä:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Aseta oletustaustajärjestelmäksi" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia on tehokas korkean tason dynaaminen ohjelmointikieli " +"tekniseen laskentaan. Sen syntaksi on tuttu muiden teknisen laskennan " +"ympäristöjen käyttäjille. Se tarjoaa edistyneen kääntäjän, hajautetun " +"rinnakkaissuorituksen, suuren numeerisen tarkkuuden ja laajan matemaattisen " +"funktiokirjaston.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Julian oman REPLin sijainti" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Yhdistä kaaviot työkirjaan" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia-skriptitiedosto (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Julian REPLin sijainti:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Yhdistä kaaviot työkirjaan (käynnistä uusi istunto muutosten jälkeen)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Istunnon aluksi automaattisesti suoritettavien skriptien luettelo" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Virhe: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Automaattisesti suoritettavat skriptit" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua on nopea ja kevyt skriptikieli, jolla on yksinkertainen " +"proseduraalinen syntaksi. Luaan on useita matematiikka- ja " +"tiedesuuntautuneita kirjastoja.

    Tämä taustaosa tukee luajit 2:ta.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "luajit-komennon sijainti" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua-skriptitiedosto (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "luajit-komennon sijainti:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima on symbolisten ja numeeristen lausekkeiden käsittelyjärjestelmä, joka " +"sisältää differentiaali- ja integraalilaskennan, Taylorin sarjat, Laplacen " +"muunnokset, tavalliset differentiaaliyhtälöt, lineaariyhtälöiden " +"järjestelmät, polynomit, joukot, listat, vektorit, matriisit ja tensorit. " +"Maxima käyttää tarkkoja murto-osia, mielivaltaisen tarkkuuden kokonaislukuja " +"ja vaihtuvan tarkkuuden liukulukuja tuottamaan tarkkoja numeerisia tuloksia. " +"Maxima voi piirtää funktioita ja tietoa kaksi- ja kolmiulotteisesti." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima-ohjelmatiedoston sijainti" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Käytä muuttujien hallintaa" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Virhe: Liian monta */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Virhe: Liian monta /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Virhe: odotettiin \" ennen ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima-eräajotiedosto (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maximan käynnistys epäonnistui" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima kaatui. Käynnistetään uudelleen…" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima kaatui kahdesti lyhyessä ajassa. Lakataan yrittämästä käynnistää sitä" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Virhe – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funktio" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maximan sijainti:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Sisällytä kaaviot työkirjaan" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Pane Cantor seuraamaan muuttujien luomista ja tuhoamista" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave on korkean tason ensi sijassa numeerinen laskennan " +"ohjelmointikieli.
    Se tarjoaa mukavan komentorivikäyttöliittymän " +"lineaari- ja ei-lineaariongelmia numeeriseen ratkaisemiseen ja numeerisiin " +"kokeiluihin kielellä, joka on enimmäkseen Matlab-yhteensopiva." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave-ohjelmatiedoston sijainti" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave-skriptitiedosto (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaksivirhe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octaven sijainti:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python-skriptitiedosto (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python on huomattavan tehokas dynaaminen ohjelmointikieli, jota käytetään " +"monilla sovellusaloilla. Tieteellisen ohjelmointiin on useita Python-" +"paketteja.

    Tämä taustaosa tukee Python 2:ta.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python on huomattavan tehokas dynaaminen ohjelmointikieli, jota käytetään " +"monilla sovellusaloilla. Tieteellisen ohjelmointiin on useita Python-" +"paketteja.

    Tämä taustaosa tukee Python 3:a.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor – Kaaviovalintaikkuna" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funktiot" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Otsikko" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Lauseke" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Lisää" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Poista" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Tyhjennä luettelo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-muuttuja" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Tyyli" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Viivat" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Pisteet" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Pisteet ja viivat" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Laatikot" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogrammi" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Vaiheet" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Pisteet" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Pehmennys" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ei mitään" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotoninen" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézier (monotoninen)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funktion ala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-alue" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Näytteen&ottotaajuus" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "&Vaiheen koko" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Valinnat" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Kuvaajan otsikko" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-akselin nimike" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-akselin nimike" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Selitteen sijainti" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Piilota selite" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Ylävasemmalla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Yläoikealla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Alavasemmalla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Alaoikealla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Alla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Ulkopuolella" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Näytä ruudukko" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Näytä koko reuna" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Käytä värejä" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Näytä tässä" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritminen x-asteikko" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritminen y-asteikko" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Tiedostovalinnat" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Tallenna kuvaaja tiedostoon" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tiedostotyyppi" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Havaitse tiedostonimestä" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! ei ole tavallinen ohjelmistotoisinto halvimmasta mahdollisesta " +"laskimesta. Qalculate! pyrkii saamaan kaiken irti nykytietokoneiden " +"ylivertaisesta käyttöliittymästä, tehosta ja joustavuudesta. Qalculate!’ssa " +"huomion keskipisteessä on lausekkeen syöttö. Sen sijaan että syöttäisit " +"matemaattisen lausekkeen kunkin luvun erikseen, voit kirjoittaa koko " +"lausekkeen ja myöhemmin muokata sitä. Lausekkeet tulkitaan joustavasti ja " +"virhesietoisesti. Jos kuitenkin teet jotain väärin, Qalculate! kertoo sen " +"sinulle. Lausekkeet, joita ei voi kokonaan ratkaista, eivät kuitenkaan ole " +"virheitä. Qalculate! vastaa sieventämällä lauseketta niin pitkälle kuin voi. " +"Lukujen ja aritmeettisten operaattorien lisäksi lauseke voi sisältää " +"muuttujia, yksiköitä ja funktioita minä tahansa yhdistelminä." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Muunnetaanko yksiköt automaattisesti ja miten. Jos valittu, muunnetaan " +"sopivimmiksi SI-yksiköiksi (vähin määrä yksiköitä)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Trigonometristen funktioiden oletuskulmayksikkö." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Jäsennettyjen ja laskettujen lukujen kanta." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Sievennetäänkö tai faktoroidaanko laskentatulokset." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Näytetäänkö rationaaliluvut desimaaleina, murtolukuina vai jonakin siltä " +"väliltä." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Näytä määrättömästi jatkuva lukusarja kolmella pisteellä pyöristämisen " +"sijaan (esim. 2/3 tuottaa vastaukseksi 0,666666… eikä 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Käytä kaikkia desimaalisia SI-etuliitteitä. Jollei valittu, etuliitteitä, " +"jotka eivät ole tuhannen monikertoja (sentti-, desi-, deka-, hehto-), ei " +"käytetä automaattisesti." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Jos valittu, käytetään negatiivisia eksponentteja murto-osien sijaan (esim. " +"5/x^2:sta tulee 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numeerinen näyttö." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Jos valittu, kaaviot näytetään työkirjassa. Jollei, ne näytetään eri " +"ikkunassa." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Käytetäänkö kaavioissa värejä." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Piirretäänkö ruudukko." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Piirretäänkö kaavion ympärille reunaviivat." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Viivan paksuus kuvapisteinä." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Kaaviota piirrettäessä käytettyjen interpolaatiovaiheiden määrä." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Kaavioiden pehmennystapa." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Kaavioiden tyyli." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Kaavioiden selitteen sijainti." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate ilmoittaa, että se ei voi tulostaa. Onko gnuplot asennettu?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "puuttuva %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 on oltava luku." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 on oltava kokonaisluku." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 on oltava totuusarvo." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "löytyi useampia lausekkeita yhdelle piirtokomennolle (%1 ja %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "VIRHE" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "VAROITUS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Annetun nimistä funktiota, muuttujaa tai yksikköä ei ole olemassa." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funktio: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Kaaviokäyttöliittymä" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Piirtää yhden tai useampia funktioita joko työkirjaan tai eri ikkunaan." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "lauseke" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "valinta" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "arvo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "kokonaisluku" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "totuusarvo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "luku" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "oletus: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Funktion nimi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Otsikon nimiö" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-akselin nimike" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-akselin nimike" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Kuva, johon kaavio tallennetaan. Jos tyhjä, kaavio näytetään ruudulla " +"ikkunana. Jos inline=true, kuva näytetään tästä asetuksesta riippumatta." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Tallennettavan kuvan tyyppi. Voi olla automaattinen, PNG, PS, EPS, LaTeX, " +"SVG tai fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Jos valittu, kaavioissa käytetään värejä, jollei, piirretään mustavalkoisena." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "X-akselin vähimmäisarvo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "X-akselin enimmäisarvo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Käytetäänkö x-akselilla logaritmista asteikkoa." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Käytetäänkö y-akselilla logaritmista asteikkoa." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "X-akselin logaritminen kanta." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Y-akselin logaritminen kanta." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Näytetäänkö kaaviossa ruudukko." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Ympäröidäänkö kaavio kaikilta sivuiltaan reunaviivalla (ei vain akselit)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Viivojen paksuus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Minne kaavion selite sijoitetaan: ei mihinkään, ylävasemmalle, yläoikealle, " +"alavasemmalle, alaoikealle, alle tai ulkopuolelle" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Piirretäänkö kaavio tähän uuden ikkunan sijaan." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Kahden interpolointipisteen etäisyys. Ks. myös vaihe." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Intepolointipisteiden määrä. Ks. myös vaihe." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "x-muuttujan nimi. Tämän on oltava tuntematon muuttuja" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Tallenna muuttujat tiedostoon" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Tallenna kaikki määritellyt muuttujat tiedostoon. %1 voi ladata ne uudelleen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "tiedosto" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "tiedosto: tiedosto, johon tallennetaan" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Lataa muuttujat tiedostosta" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Lataa muuttujat tiedostosta, jonka %1 on aiemmin luonut." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "tiedosto: ladattava tiedosto" + +# Ei perusasetukset, koska tässä on general vs backend specific settings +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Perusasetukset" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Lukukanta:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Murto-osamuoto:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Desimaalinen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Tarkka" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Murtoluvut" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Yhdistetty" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Numeerinen näyttö:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Puhdas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Tieteellinen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Tarkkuus" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Osoita äärettömät sarjat:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Käytössä" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Käytä kaikkia SI-etuliitteitä:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Käytä negatiivisia eksponentteja:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Suorita" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Muunna parhaiksi SI-yksiköiksi:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Kulmayksikkö:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiaanit" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Asteet" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Goonit" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Sievennä" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktoroi" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Kaaviot" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Värilliset kaaviot:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Näytä ruudukko:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Näytä täydet reunat:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Viivojen paksuus:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Näytteenottotaajuus:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Pehmennystapa:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Kaaviotyyli:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Vaiheet" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Selitteen sijainti:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R on tilastollisen laskennan ja piirtämisen kieli ja ympäristö, joka " +"muistuttaa S-kieltä ja -ympäristöä.
    Se tarjoaa laajalti erilaisia " +"tilastollisia (lineaarinen ja ei-lineaarinen mallinnus, perinteiset " +"tilastotestit, aikasarja-analyysi, luokittelu, klusterointi…) ja " +"piirtotekniikoita ja on hyvin laajennettavissa. S-kieli on usein " +"tilastometodologisen tutkimuksen valinta, ja R tarjoaa avoimen lähdekoodin " +"reitin siihen osallistumiseksi." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Tiedoston %1 avaaminen epäonnistui" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R-skriptitiedosto (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Virhe jäsennettäessä komentoa" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Avaa tiedostonvalintaikkuna kaksoisnapsauttamalla" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-lähdetiedostot (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage on vapaa GPL-lisenssoitu avoimen lähdekoodin matemaattinen " +"ohjelmistojärjestelmä.
    Se yhdistää useamman avoimen lähdekoodin paketin " +"tehot yhteen Python-pohjaiseen käyttöliittymään." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage-ohjelmatiedoston sijainti" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Tulos – %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Viimeisin tuloste oli: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python-skriptitiedosto (*.py);;Sage-skriptitiedosto (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Sagen versiota %1.%2 ei tueta. Päivitä asennus tuettuun versioon, jotta sitä " +"voi käyttää Cantorin kanssa." + +# pmap: =:gen=Cantorin: +# pmap: =:elat=Cantorista: +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage-prosessi kaatui suorittaessaan tätä lauseketta" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage-prosessi kaatui" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage-prosessi päättyi suorittaessaan tätä lauseketta" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage-prosessi päättyi" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sagen käynnistys epäonnistui" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sagen sijainti:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab on vapaata ohjelmistoa, monialustainen numeerisen laskennan " +"paketti ja korkean tason numeerisesti suuntautunut ohjelmointikieli.Scilabia jaetaan (GPL-yhteensopivalla) CeCILL-lisensillä" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"scilab-adv-cli-komennon sijainti (Varoitus: Scilab-version tarvitsee olla " +"suurempi tai yhtä suuri kuin 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab-skriptitiedosto (*.sce);;Scilab-funktiotiedosto (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "scilab-adv-cli-komennon sijainti:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Lataa esimerkkityökirjoja" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Avaa esimerkki" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor-työkirja (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Avaa tiedosto" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Taustaosaa ei löytynyt

    \n" +"
    Voit kokeilla:\n" +"
    • muuttaa asetuksia asetusikkunassa
    • asentaa seuraavan " +"ohjelman paketit:
    • %2
    " +msgstr[1] "" +"

    Taustaosaa ei löytynyt

    \n" +"
    Voit kokeilla:\n" +"
    • muuttaa asetuksia asetusikkunassa
    • asentaa seuraavien " +"ohjelmien paketit:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Virhe" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Istunto %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Cantor-osaa ei löytynyt." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Useampia tallentamattomia työkirjoja on auki. Haluatko sulkea ne?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Sulje Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Nykyistä projektia on muutettu. Haluatko tallentaa sen?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Tallenna projekti" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Oletusarvoisesti käytettävä taustaosa" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Älä lado oletusarvoisesti" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Korosta syntaksi oletusarvoisesti" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Käytä täydennystä oletusarvoisesti" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Numeroi lausekkeet oletusarvoisesti" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animoi työkirjan muutokset oletusarvoisesti" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Laske automaattisesti nykyisen alla olevat tietueet uudelleen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Taustaosaa %1 ei ole asennettu" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Taustaosassa %1 on joitakin ongelmia.\n" +"Tarkista asetuksesi tai asenna tarvittavat paketit.\n" +"Voit vain katsella tätä työkirjaa." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Tallenna muotoilematon teksti" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Vie Latexina" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Suorita työkirja" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Lado käyttäen LaTeXia" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaksin korostus" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Täydennys" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Rivinumerot" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animoi työkirja" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Käynnistä taustajärjestelmä uudelleen" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Suorita kenttä" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Lisää komentokenttä" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Lisää tekstikenttä" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Lisää komentokenttä" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Lisää LaTeX-kenttä" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Lisää sivunvaihto" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Lisää kuva" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Poista nykyinen kenttä" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Näytä %1-ohje|/|Näytä $[yhdysmerkki %1 ohje]" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Näytä skriptimuokkain" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Näytä täydennys" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009–2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Tallenna nimellä" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Tallenna" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Käynnistä taustajärjestelmä uudelleen" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Keskeytä" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Lasketaan…" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Valmis" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Istuntovirhe: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Alustus valmis" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Alustetaan…" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Nimetön" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Haluatko lähettää nykyisen työkirjan julkiselle WWW-palvelimelle?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Kysymys – Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Työkirjaa ei ole tallennettu. Se pitäisi tallentaa ennen lähetystä." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Varoitus – Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Tämä taustajärjestelmä ei tue skriptejä." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Muokkaa" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Näytä" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Työkirja" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Tiedosto" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Uusi" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneelit" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Asetukset" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Valkoinen" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Musta" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Tummanpunainen" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Punainen" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Vaaleanpunainen" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Tummanvihreä" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Vihreä" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Vaaleanvihreä" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Tummansininen" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Sininen" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Vaaleansininen" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Tummankeltainen" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Keltainen" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Vaaleankeltainen" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Tummansyaani" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Syaani" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Vaaleansyaani" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Tummanvioletti" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Violetti" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Vaaleanvioletti" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Tummanoranssi" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Oranssi" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Vaaleanoranssi" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Tummanharmaa" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Harmaa" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Vaaleanharmaa" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Taustaväri" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Tekstiväri" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Fontti" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Lihavoitu" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Kursivoitu" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Suurenna kokoa" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Pienennä kokoa" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Valitse" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Keskeytetty" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Hakurivi" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "…" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Etsi:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Seuraava" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Edellinen" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Korvaa:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Korvaa" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Ko&rvaa kaikki" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Etsi:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Erota &pien- ja suuraakkoset" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Kuvan asetukset" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Lisää kuva napsauttamalla hiiren oikeaa" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Kuvan %1 lataaminen epäonnistui" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Kuvan asetukset" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Avaa" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Koko näytöllä" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Leveys" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Korkeus" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Esikatselu" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Koko tulostettuna" + +# Vapaahko, mutta mielestäni käypä suomennos. Konteksti: kuvan asetuksissa voi asettaa kuvan näkymään eri kokoisena näytöllä ja tulostettuna. Tämä kertoo, että tulostettu koko on sama kuin näytöllä näytetyn kuvan koko. +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Sama kuin näytöllä" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automaattinen)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Avaa kuvatiedosto" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Näytä LaTeX-koodi" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "latex-ohjelmatiedoston sijainti" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "dvips-ohjelmatiedoston sijainti" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nimi" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Arvo" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Lähettäjä:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Vastaanottaja:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Pääotsikko" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abskissa-asteikko" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinaatta-asteikko" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Kaavion otsikko:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE:n käyttöliittymä matemaattisille ohjelmistoille" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2016 Filipe Saraiva
    © 2009–2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Ylläpitäjä
    Qt5/KF5-sovitus, Scilab- ja Python-taustajärjestelmät" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Alkuperäinen tekijä
    Ylläpitäjä (2009–2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra-taustajärjestelmä" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave-taustajärjestelmä" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Käyttöliittymä" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantorin kuvake" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Käytä taustajärjestelmää " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Avattavat tiedostot." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Tiedoston %1 avaaminen epäonnistui" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Sivunvaihto ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Matematiikkaa KDE:n tapaan" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nimi:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Arvo:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Lisää uusi muuttuja" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Lataa muuttujia" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Tallenna muuttujia" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Tyhjennä muuttujat" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Haluatko varmasti poistaa kaikki muuttujat?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Vahvistus – Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Lataa tiedosto" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Poista tulos" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Tekstimuokkainosaa ei löytynyt\n" +"Tarkasta KDE-asennuksesi." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skriptimuokkain" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skriptimuokkain – %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Ei löytynyt" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Saavutettiin alku" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Saavutettiin loppu" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Korvattiin %1 osuma" +msgstr[1] "Korvattiin %1 osumaa" + +# Konteksti: "Search in: Commands, Results, Errors, Text, LaTeX Code". Käytetään myös kohtana valikossa, josta voi poistaa tai kohtia luettelosta tai lisätä kohtia siihen. +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "komennoista" + +# Konteksti: "Search in: Commands, Results, Errors, Text, LaTeX Code". Käytetään myös kohtana valikossa, josta voi poistaa tai kohtia luettelosta tai lisätä kohtia siihen. +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "tuloksista" + +# Konteksti: "Search in: Commands, Results, Errors, Text, LaTeX Code". Käytetään myös kohtana valikossa, josta voi poistaa tai kohtia luettelosta tai lisätä kohtia siihen. +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "virheistä" + +# Konteksti: "Search in: Commands, Results, Errors, Text, LaTeX Code". Käytetään myös kohtana valikossa, josta voi poistaa tai kohtia luettelosta tai lisätä kohtia siihen. +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "tekstistä" + +# Konteksti: "Search in: Commands, Results, Errors, Text, LaTeX Code". Käytetään myös kohtana valikossa, josta voi poistaa tai kohtia luettelosta tai lisätä kohtia siihen. +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX-koodista" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Oletustaustajärjestelmä:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Jos valittu, Cantor laskee automaattisesti kunkin syötteen nykyisen alta." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Laske syötteet automaattisesti" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Oletukset" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Käytä LaTeX-ladontaa" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Käytä syntaksin korostusta" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Käytä täydennystä" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Käytä rivinumeroita" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Käytä työkirja-animaatioita" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Näytä hahmonnettuna" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Näytä koodi" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "EPS-tiedostoa ei voi hahmontaa. Saatat tarvita lisäpaketteja" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Tiedostoon %1 kirjoittaminen epäonnistui." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Tiedoston kirjoittaminen epäonnistui." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Virhe tallennettaessa tiedostoa %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "latex.xsl-tyylisivun lataaminen epäonnistui" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Valittu tiedosto ei ole kelvollinen Cantor-projektitiedosto." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Komentokenttä" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Tekstikenttä" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Lisää komentokenttä" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX-kenttä" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Kuva" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sivunvaihto" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Lisää kohta jälkeen" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Lisää kohta ennen" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Lisää LaTeX-kenttä" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Tekstin &väri…" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Väri" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Tekstin &korostus…" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Fontti" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Fontt&ikoko" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Lihavoitu" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursivoitu" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Alleviivattu" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Yliviivattu" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Sijoita &vasemmalle" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Vasemmalle" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Sijoita &keskelle" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Keskelle" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Tasaa &oikealle" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Oikealle" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Tasaa molemmilta reunoilta" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Tasaa" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Poista kenttä" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Vedä kenttää" + +# %1: taustaosan nimi +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Tämä tiedosto on luotu taustajärjestelmälla %1, jota ei ole asennettu." + +#~ msgid "Publish Worksheet" +#~ msgstr "Julkaise työkirja" + +#~ msgid "Waiting for Image..." +#~ msgstr "Odotetaan kuvaa…" + +#~ msgid "Insert" +#~ msgstr "Lisää" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "%1 ei voida avata: tuntematon MIME-tyyppi" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX-tiedosto" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor-työkirja" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Cantorin R-taustaosan palvelin" + +#~ msgid "R Server" +#~ msgstr "R-palvelin" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Käyttö: saveVariables tiedosto" + +#~ msgid "Saving failed." +#~ msgstr "Tallennus epäonnistui." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Käyttö: loadVariables tiedosto" + +#~ msgid "Loading failed." +#~ msgstr "Lataus epäonnistui." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009–2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "python-komennon sijainti" + +#~ msgid "Path to python2 command:" +#~ msgstr "python2-komennon polku:" + +#~ msgid "Could not start the server." +#~ msgstr "Palvelimen käynnistys epäonnistui." diff --git a/po/fr/cantor.po b/po/fr/cantor.po new file mode 100644 index 0000000..d2e38a8 --- /dev/null +++ b/po/fr/cantor.po @@ -0,0 +1,3334 @@ +# translation of cantor.po to Français +# translation of cantor.po to +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Joëlle Cornavin , 2009, 2010, 2011, 2012, 2013. +# Vincent PINON , 2013, 2014, 2015, 2016, 2017. +# Simon Depiets , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-07-30 17:31+0800\n" +"Last-Translator: Simon Depiets \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 2.0\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Joëlle Cornavin, Vincent Pinon, Simon Depiets" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jcorn@free.fr, vpinon@kde.org, sdepiets@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pause" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Démarrer" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Arrêter" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Enregistrer le résultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Traçage avancé" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Graphe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expression :" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Options supplémentaires :" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Tracer un graphique" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Option active" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calculer" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Différencier" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variable :" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Temps : " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paquet" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importer un paquet" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paquet :" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Intégrer" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Limite inférieure :" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Limite supérieure :" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "intégrale définie" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Algèbre &linéaire" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Créer une matrice" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Colonnes :" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Lignes :" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calculer des valeurs propres" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrice :" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calculer des vecteurs propres" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverser une matrice" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Graphe 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variable" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nom" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum :" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum :" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Graphe 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1ère variable" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2e variable" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Exécuter un script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Résoudre des équations" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Équations :" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variables :" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Version recommandée : %4

    %2

    Consultez %3 pour plus d'informations
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Choisissez le moteur à utiliser :" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "En faire le moteur par défaut" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia est un langage de programmation dynamique de haut niveau, à " +"hautes-performances, pour les calculs techniques, avec une syntaxe " +"familiaire pour les utilisateurs d'autres environnements de calcul " +"technique. Il offre un compilateur sophistiqué, une exécution parallèle " +"distribuée, une bonne précision numérique, et une bibliothèque de fonctions " +"mathématiques complète.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Emplacement du REPL natif Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Intégrer des graphes dans la feuille de calcul" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Fichier de script Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Emplacement du REPL Julia :" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Intégrer des graphes dans une feuille de calcul (démarrer une nouvelle " +"session après changement)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Format intermédiaire des tracés dans la feuille de calcul :" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Liste des scripts à lancer automatiquement au début de la session" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Erreur : %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1 : %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts à lancer automatiquement" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua est un langage de script rapide et léger, avec une syntaxe " +"procédurale simple. Il existe plusieurs bibliothèques dans Lua destinées aux " +"mathématiques et aux sciences.

    Ce moteur pend en charge luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Emplacement de la commande luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Fichier de script Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Emplacement de la commande luajit :" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima est un système conçu pour la manipulation d'expressions symboliques " +"et numériques, dont la différentiation, l'intégration, la série de Taylor, " +"les transformées de Laplace, équations différentielles ordinaires, systèmes " +"d'équations linéaires, polynômes, ainsi que les ensembles, listes, vecteurs, " +"matrices et tenseurs. Maxima offre des résultats numériques d'une grande " +"précision grâce à l'utilisation de fractions exactes, d'entiers à précision " +"arbitraire et de nombres à virgule flottante à précision variable. Maxima " +"peut tracer des fonctions et des données en deux et trois dimensions. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Emplacement de l'exécutable Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Activer la gestion des variables" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Erreur : trop de « */ »" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Erreur : trop de « /* »" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Erreur: « \" » était attendu avant ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Fichier séquentiel Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Impossible de démarrer Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima s'est arrêté de façon anormale. Redémarrage..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima s'est arrêté de façon anormale deux fois en un court laps de temps. " +"Arrêt pour tenter de démarrer" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Erreur - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "fonction" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Emplacement de Maxima :" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Intégrer des graphes dans une feuille de calcul" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" +"Permettre à Cantor de suivre la création / la destruction des variables" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave est un langage évolué, principalement destiné aux calculs " +"numériques.
    Il fournit une interface en ligne de commande pratique pour " +"résoudre numériquement des problèmes linéaires et non linéaires, et pour " +"effectuer d'autres expérimentations numériques à l'aide d'un langage en " +"grande partie compatible avec Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Emplacement de l'exécutable Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Fichier de script Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Erreur de syntaxe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Emplacement de Octave :" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Fichier de script Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python est un langage de programmation dynamique remarquablement " +"puissant, qui est utilisé dans des domaines d'application très variés. Il y " +"a plusieurs paquets Python pour la programmation scientifique.

    Ce " +"moteur prend en charge Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python est un langage de programmation dynamique remarquablement " +"puissant, qui est utilisé dans des domaines d'application très variés. Il y " +"a plusieurs paquets Python pour la programmation scientifique.

    Ce " +"moteur prend en charge Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Boîte de dialogue de tracé" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Fonctions" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Titre" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expression" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Ajouter" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Supprimer" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Effacer la liste" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variable X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Style" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Lignes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Points" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Points et lignes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Cases" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogramme" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Pas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Chandeliers" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Points" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Lissage" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Aucun" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotone" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Splines cubiques naturelles" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézier (monotone)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Intervalle de fonction" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Intervalle de X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Taux d'écha&ntillonnage" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Taille de pa&s" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Options" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Titre du tracé" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Étiquette de l'axe de X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Étiquette de l'axe de Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Position de la légende" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Cacher la légende" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "En haut à gauche" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "En haut à droite" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "En bas à gauche" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "En bas à droite" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "En dessous" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "En dehors" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Afficher une grille" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Afficher une bordure continue" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Utiliser des couleurs" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Afficher dans la feuille de calcul" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Échelle x logarithmique" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Échelle y logarithmique" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Options des fichiers" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Enregistrer le tracé dans un fichier" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Type de fichier" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Détecter à partir du nom de fichier" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! n'est pas votre réplication logicielle habituelle de la " +"calculatrice la moins chère disponible. Qalculate! a pour objectif " +"d'utiliser pleinement l'interface, la puissance et la flexibilité " +"supérieures des ordinateurs modernes. Le centre de l'attention, dans " +"Qalculate! est la saisie d'expressions. Au lieu de saisir chaque nombre dans " +"une expression mathématique séparément, vous pouvez directement écrire " +"l'expression entière et la modifier ultérieurement. L'interprétation " +"d'expressions est flexible, tolérante aux erreurs et, néanmoins, en cas " +"d'incorrection, Qalculate! vous en fera part. Les expressions non " +"entièrement solubles ne sont cependant pas des erreurs. Qalculate! simplifie " +"autant que faire se peut, car est il est capable de répondre par une " +"expression. En plus des nombres et des opérateurs arithmétiques, une " +"expression peut contenir n'importe quelle combinaison de variables, d'unités " +"et de fonctions." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Indiquez si et comment les unités seront automatiquement converties. Si la " +"valeur est « true », convertit en unités du SI les mieux appropriées (la " +"plus petite quantité d'unités)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unité d'angle par défaut pour les fonctions trigonométriques." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Base des nombres analysés et évalués." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Indiquez si le résultat de l'évaluation sera simplifié ou factorisé." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Décidez si les nombres rationnels seront affichés avec des décimales, comme " +"une fraction, ou une sorte de compromis entre les deux." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Affiche que la série de chiffres d'un nombre continue indéfiniment avec " +"trois points, au lieu d'arrondir (ex. 2/3 s'affiche sous la forme " +"0,666666... au lieu de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Utilisez tous les préfixes décimaux du SI. Si cette valeur est « false », " +"les préfixes n'étant pas un multiple de mille (centi, déci, déca, hecto) " +"seront employés automatiquement." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Si la valeur est « true », des exposants négatifs seront employés au d'une " +"division (ex. 5/x^2 devient 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Affichage numérique." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Si la valeur est « true », les tracés seront affichés sur la feuille de " +"calcul. Dans le cas contraire, ils apparaîtront dans une fenêtre séparée." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Décidez s'il faut ou non utiliser des couleurs dans les tracés." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Décidez s'il faut ou non tracer une grille." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" +"Décidez s'il faut ou non que des bordures continues soient dessinées autour " +"du tracé." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Largeur des lignes, en pixels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Nombre de pas d'interpolation à utiliser dans le traçage." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Mode de lissage dans les tracés." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Style des tracés." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Position de la légende dans les tracés." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate signale qu'il lui est impossible d'imprimer. Gnuplot est-il " +"installé ?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "manque %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 doit être un nombre." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 doit être un entier." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 doit être un booléen." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Option non valable pour %1 : %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" +"plusieurs expressions ont été trouvées dans une seule commande de tracé (%1 " +"et %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERREUR" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "AVERTISSEMENT" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Aucune fonction, variable ou unité portant le nom spécifié n'existe." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Fonction : %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interface de traçage" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Trace une ou plusieurs fonctions soit sur la feuille de calcul soit dans une " +"fenêtre séparée." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expression" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "option" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valeur" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "entier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booléen" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "nombre" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "par défaut : %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Le nom de la fonction" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Étiquette du titre" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Étiquette de l'axe x" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Étiquette de l'axe y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Image dans laquelle enregistrer. Si elle est vide, affiche un graphe dans " +"une fenêtre sur l'écran. Si inline=true l'image est affichée sans tenir " +"compte de cette option." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Le type d'image sous lequel enregistrer. L'un parmi auto, png, ps, eps, " +"LaTeX, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Associez à « true » pour un graphe en couleurs, « false » pour un monochrome." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Valeur minimale de l'axe x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Valeur maximale de l'axe x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Décide si une échelle logarithmique doit être utilisée pour l'axe x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Décide si une échelle logarithmique doit être utilisée pour l'axe y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Base logarithmique pour l'axe x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Base logarithmique pour l'axe y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Décide si une grille doit être affichée dans le tracé." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Décide si le tracé doit être entouré de bordures sur tous les côtés (pas " +"seulement l'axe)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Largeur des lignes." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Décide où la légende du tracé doit être placée. Une valeur parmi « none », " +"« top_left », « top_right », « bottom_left », « bottom_right », « below », " +"« outside »" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Lissage du tracé. Une valeur parmi « none », « unique », « csplines », " +"« bezier », « sbezier »" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Style de tracé. Une valeur parmi « lines », « points », « points_lines », " +"« boxes », « histogram », « steps », « candlesticks », « dots »" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Utilise une échelle sur le second axe x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Utilise une échelle sur le second axe y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Décide si le tracé doit être dessiné sur la feuille de calcul plutôt que " +"dans une nouvelle fenêtre." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Distance entre deux points d'interpolation. Voir aussi « pas »." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Nombre de points d'interpolation. Voir aussi « pas »." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Le nom de la variable x. Ce doit être une variable inconnue" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Enregistrer les variables dans un fichier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Enregistre dans un fichier toutes les variables actuellement définies. Vous " +"pouvez les recharger avec %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fichier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fichier : celui dans lequel enregistrer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Charger des variables depuis un fichier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Charge des variables depuis un fichier précédemment créé par %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fichier : le fichier à charger" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Général" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numérique :" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Format des fractions :" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Décimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exact" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fractionnaire" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combiné" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Affichage numérique :" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pur" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Scientifique" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Précision" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indiquer une série infinie :" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Activé" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Utiliser tous les préfixes du SI :" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Utiliser des exposants négatifs :" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Évaluer" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Convertir en unités les mieux appropriées du SI :" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unité d'angle :" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radians" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Degrés" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradients" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Mode de structuration :" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplifier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factoriser" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Traçage" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Afficher les tracés dans la feuille de calcul :" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Tracés en couleurs :" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Afficher la grille :" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Afficher des bordures continues :" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Largeur des lignes :" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Taux d'échantillonnage :" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Mode de lissage :" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Splines cubiques naturelles" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Style de tracé :" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Pas" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Position de la légende :" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R est un langage et un environnement conçu pour le calcul statistique et le " +"graphisme, similaire au langage et à l'environnement S.
    Il offre une " +"grande variété de techniques statistiques (modélisation linéaire et non " +"linéaire, tests statistiques classiques, analyse de séries temporelles, " +"classification, groupement...) et graphiques, tout en étant très extensible. " +"Le langage S est souvent le véhicule de choix pour la recherche en " +"méthodologie statistique, alors que R fournit une route « open source » pour " +"une participation à cette activité." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Erreur lors de l'ouverture du fichier %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Fichier de script R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Erreur de commande d'analyse syntaxique" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Double-cliquez pour ouvrir la boîte de dialogue de sélection" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Fichiers source R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage est un système de logiciel de mathématiques « open source » soumis aux " +"termes de la GPL.
    Il combine la puissance de nombreux paquets " +"« open source » existants en une interface commune reposant sur Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Emplacement de l'exécutable Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Résultat de %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"La dernière sortie était : \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Fichier de script Python (*.py);;Fichier de script Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"La version de Sage %1.%2 n'est pas prise en charge. Veuillez mettre à jour " +"votre installation de Sage vers une version prise en charge pour qu'elle " +"fonctionne avec Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" +"Le processus Sage s'est arrêté de façon anormale lors de l'évaluation de " +"l'expression" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Le processus Sage s'est arrêté de façon anormale" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" +"Le processus Sage s'est arrêté lors de l'évaluation de cette expression" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Le processus Sage s'est arrêté" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Impossible de démarrer Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Emplacement de Sage :" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab est un Logiciel Libre de calcul numérique multi-plate-forme, avec " +"un langage de programmation de haut niveau.

    Scilab est distribué sous " +"licence CeCILL (compatible GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Emplacement de la commande scilab-adv-cli (Avertissement : la version de " +"Scilab doit être supérieure ou équivalente à la version 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Fichier de script Scilab (*.sce);;Fichier de fonction Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Emplacement de la commande scilab-adv-cli :" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Télécharger des exemples de feuilles de calcul" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Ouvrir un exemple" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Feuille de calcul Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Ouvrir un fichier" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Aucun moteur n'a été trouvé

    \n" +"
    Vous pouvez essayer :\n" +"
    • De modifier les paramètres dans la boîte de dialogue de " +"configuration ;
    • D'installer des paquets pour le programme " +"suivant :
    • %2
    " +msgstr[1] "" +"

    Aucun moteur n'a été trouvé

    \n" +"
    Vous pouvez essayer :\n" +"
    • De modifier les paramètres dans la boîte de dialogue de " +"configuration ;
    • D'installer des paquets pour un des programmes " +"suivants :
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Erreur" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Session %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Impossible de trouver le composant Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Plusieurs feuilles de travail non enregistrées sont ouvertes. Voulez-vous " +"les fermer ?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Fermer Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Le projet courant a été modifié. Voulez-vous l'enregistrer ?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Enregistrer le projet" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Le moteur utilisé par défaut" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Utiliser la composition par défaut" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Utiliser la coloration syntaxique par défaut" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Activer le complètement par défaut" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Activer la numérotation des expressions par défaut" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animer les changements dans la feuille de calcul par défaut" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Réévaluer automatiquement les éléments situés sous l'actuel" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Le moteur %1 n'est pas installé" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Il y a quelques problèmes avec le moteur %1.\n" +"Veuillez vérifier votre configuration ou installer les paquets nécessaires.\n" +"Vous ne pourrez qu'afficher cette feuille de calcul." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Enregistrer en texte clair" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exporter en LaTex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Évaluer une feuille de calcul" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Composition à l'aide de LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Coloration syntaxique" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Complètement automatique" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Numéros de lignes" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animer une feuille de calcul" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Redémarrer le moteur" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Évaluer un élément" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Insérer un élément de commande" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Insérer un élément de texte" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Insérer un élément de commande" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Insérer un élément LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Insérer un saut de page" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Insérer une image" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Supprimer l'élément actuel" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Afficher l'aide pour %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Afficher l'éditeur de scripts" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Afficher le complètement automatique" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Enregistrer sous" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Enregistrer" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Redémarrer le moteur" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrompre" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Calcul..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Prêt" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Erreur de session %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initialisation terminée" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Initialisation..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sans nom" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[lecture seule]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" +"Voulez-vous envoyer la feuille de calcul actuelle à un serveur web public ?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Question - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"La feuille de calcul n'est pas enregistrée. Vous devriez l'enregistrer avant " +"de l'envoyer." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Avertissement - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Ce moteur ne prend pas en charge les scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Édition" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Affichage" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Feuille de calcul" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fichier" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nouveau" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panneaux" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Configuration" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Blanc" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Noir" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Rouge foncé" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Rouge" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Vert foncé" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Vert" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Bleu foncé" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Bleu" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Jaune foncé" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Jaune" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Cyan foncé" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cyan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta foncé" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "Intervalle de X" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Orange" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "Intervalle de X" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Gris" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Couleur d'arrière-plan" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Couleur du texte" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Police" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Gras" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Italique" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Sélectionner" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrompu" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barre de rercherche" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Chercher :" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Suivant" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Précédent" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Remplacer :" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Remplacer" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Tout rempl&acer" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Chercher dans :" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Respecter la casse" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configurer une image" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Cliquez ici avec le bouton droit pour insérer une image" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Impossible de charger l'image %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Paramètres des images" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Ouvrir" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Taille d'affichage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Largeur" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Hauteur" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Aperçu" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Taille d'impression" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Utiliser la taille d'affichage" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Ouvrir un fichier image" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Afficher le code LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Emplacement de l'exécutable LaTex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Emplacement de l'exécutable dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nom" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valeur" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Depuis :" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Vers :" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Titre principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Échelle d'abscisse" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Échelle d'ordonnée" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Titre du graphe :" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interface KDE pour des applications mathématiques" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Mainteneur
    Port vers Qt5/KF5, moteur Scilab et Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Auteur initial
    Mainteneur (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Moteur KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Moteur Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interface" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Icône Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Utiliser le moteur " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documents à ouvrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Impossible d'ouvrir le fichier « %1 »" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Saut de page ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    La méthode KDE pour faire des mathématiques" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nom :" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valeur :" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Ajouter une nouvelle variable" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Charger des variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Mémoriser des variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Effacer des variables" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Voulez-vous vraiment supprimer toutes les variables ?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmation - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Charger un fichier" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Supprimer le résultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Impossible de trouver un composant éditeur de texte pour KDE.\n" +"Veuillez vérifier votre installation KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Éditeur de scripts" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Éditeur de scripts - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Introuvable" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Début atteint" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Fin atteinte" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Remplacé %1 instance" +msgstr[1] "Remplacé %1 instances" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Commandes" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Résultats" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Erreurs" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Texte" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Code LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Moteur par défaut :" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Lorsque cette option est cochée, Cantor évalue automatiquement chaque " +"élément situé sous l'actuel." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Réévaluer les éléments automatiquement" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Paramètres par défaut" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Activer la composition LaTex" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Activer la coloration syntaxique" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Activer le complètement automatique" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Activer les numéros de lignes" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Activer les animations dans les feuilles de calcul" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Afficher le rendu" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Afficher le code" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Impossible de rendre le fichier EPS. Il se peut que vous ayez besoin de " +"paquets supplémentaires" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Impossible d'écrire le fichier %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Impossible d'écrire dans le fichier." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Erreur lors de l'enregistrement du fichier %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Problème lors du chargement de la feuille de style latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Le fichier sélectionné n'est pas un fichier de projet Cantor valable." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Élément de commande" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Élément de texte" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Insérer un élément de commande" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Élément LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Image" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Saut de page" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Insérer un élément de texte" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Insérer un élément avant" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Insérer un élément LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Couleur du texte..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Couleur" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Surligner du texte..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Police" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Taille de poli&ce" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Gras" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Italique" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Souligné" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Barré" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Aligné à &gauche" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Gauche" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Centrer" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centrer" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Aligner à d&roite" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Droite" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justifier" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justifier" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Supprimer un élément" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Faire glisser un élément" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Le moteur avec lequel ce fichier a été généré n'est pas installé. Il " +#~ "nécessite %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publier la feuille de calcul" + +#~ msgid "Waiting for Image..." +#~ msgstr "En attente d'une image..." + +#~ msgid "Insert" +#~ msgstr "Insérer" + +#~ msgid "%1: %2" +#~ msgstr "%1 : %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "impossible d'ouvrir le fichier %1 : type MIME inconnu" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Document LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Feuille de calcul Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Serveur pour le moteur R de Cantor" + +#~ msgid "R Server" +#~ msgstr "Serveur R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Utilisation : " + +#~ msgid "Saving failed." +#~ msgstr "L'enregistrement a échoué." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Utilisation : fichier loadVariables" + +#~ msgid "Loading failed." +#~ msgstr "Le chargement a échoué." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Emplacement de la commande python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Serveur Cantor pour R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Voulez-vous également exporter les images ?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Emplacement de la commande python2" + +#~ msgid " Enable Variable Management" +#~ msgstr " Activer la gestion des variables" + +#~ msgid "Could not start the server." +#~ msgstr "Impossible de démarrer le serveur." + +#~ msgid "Pause Animation" +#~ msgstr "Mettre l'animation en pause" + +#~ msgid "Start Animation" +#~ msgstr "Démarrer l'animation" + +#~ msgid "Restart Animation" +#~ msgstr "Redémarrer l'animation" + +#~ msgid "Append Command Entry" +#~ msgstr "Ajouter un élément de commande à la fin" + +#~ msgid "Append Text Entry" +#~ msgstr "Ajouter un élément de texte à la fin" + +#~ msgid "Append Latex Entry" +#~ msgstr "Ajouter un élément LaTeX" + +#~ msgid "Append Image" +#~ msgstr "Ajouter une image" + +#~ msgid "Append Page Break" +#~ msgstr "Ajouter un saut de page" + +#~ msgid "Other" +#~ msgstr "Autre" + +#~ msgid "And %1 more..." +#~ msgstr "Et %1 de plus..." + +#~ msgid "Main Toolbar" +#~ msgstr "Barre principale" + +#~ msgid "Completion Style:" +#~ msgstr "Style de complètement :" + +#~ msgid "Popup" +#~ msgstr "Fenêtre qui apparaît" + +#~ msgid "The style used for Completion" +#~ msgstr "Le style utilisé pour le complètement du texte" diff --git a/po/fr/docs/cantor/index.docbook b/po/fr/docs/cantor/index.docbook new file mode 100644 index 0000000..18f67b8 --- /dev/null +++ b/po/fr/docs/cantor/index.docbook @@ -0,0 +1,1013 @@ + + + + ATEX"> + + +]> + + + +Manuel utilisateur de &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +&traducteurJoelleCornavin;&relecteurLudovicGrossard; + + + +2009 +Alexander Rieder + +&FDLNotice; + +12/10/2012 +0.4 (&kde; 4.10) + + +&cantor; est une application dont le but est de fournir une vue esthétique des feuilles de calcul pour d'autres paquets de programmes de mathématiques issus du Logiciel libre. + + + +KDE +kdeedu +mathématiques +maths +Cantor +Sage +R +Maxima + + + + + +Introduction + +&cantor; est une application conçue que vous puissiez utiliser vos applications de mathématiques favorites à partir d'une élégante interface de feuilles de calcul intégrée à &kde;. Elle fournit des boîtes de dialogue pour vous assister dans les tâches courantes et permet de partager vos feuilles de calcul avec d'autres utilisateurs. + + + +Utilisation de &cantor; + +Capture d'écran : +Voici une capture d'écran de &cantor; + + + + + + Capture d'écran + + + + + + + +Fonctionnalités de &cantor; + + Vue intuitive d'une feuille de calcul pour évaluer des expressions. + Résultats de la représentation graphique dans la feuille de calcul. + Structure simple reposant sur des modules externes permettant d'ajouter différents moteurs. + Intégration de nouveautés (GetHotNewStuff) permettant de télécharger (ou d'envoyer vers un serveur) des exemples de feuilles de calcul. + Composition de formules mathématiques à l'aide de &latex;. + Coloration syntaxique prenant en compte le moteur. + Boîtes de dialogue reposant sur des assistants pour vous aider dans les tâches courantes, telles que l'intégration d'une fonction ou la saisie d'une matrice. + + + + +Les moteurs de &cantor; +&cantor; offre plusieurs choix de moteurs que vous pourriez être amené à utiliser avec cette application. Le choix à effectuer dépend de ce que vous voulez réaliser. +Actuellement, sont disponibles les moteurs suivants : + + Sage : + + Sage est un progiciel de mathématiques open source gratuit sous licence GPL. Il combine la puissance de nombreux paquets open source existants, au sein d'une interface reposant sur Python. Consultez http://sagemath.org pour plus d'informations. + + + + Maxima : + + Maxima est un système conçu pour la manipulation d'expressions symboliques et numériques, dont la différentiation, l'intégration, la série de Taylor, les transformées de Laplace, les équations différentielles ordinaires, les systèmes d'équations linéaires, les polynômes, les ensembles, les listes, les vecteurs, les matrices et les. Maxima produit des résultats numériques d'une grande précision grâce à l'utilisation de fractions exactes, d'entiers à précision arbitraire et de nombres à virgule flottante à précision variable. Maxima peut tracer des fonctions et des données en deux et trois dimensions. Consultez http://maxima.sourceforge.net pour plus d'informations. + + + + R : + + R est un langage et un environnement pour le calcul statistique et le graphisme, similaire au langage et à l'environnement S. Il offre une large diversité de techniques statistiques (modélisation linéaire et non linéaire, tests statistiques classiques, analyse de séries chronologiques, classification, agrégation (clustering)... et graphiques, tout en étant très extensible. Le langage S est souvent le véhicule de choix pour la recherche en méthodologie statistique, alors que le langage R lui fournit une route open source. Consultez http://www.r-project.org pour plus d'informations. + + + + KAlgebra : + + KAlgebra est une calculatrice graphique reposant sur MathML livrée avec le projet KDE Education. Consultez http://edu.kde.org/kalgebra/ pour plus d'informations. + + + + Qalculate! : + + Qalculate! n'est pas votre réplication logicielle habituelle de la calculatrice la moins chère disponible. Qalculate! a pour objectif d'utiliser pleinement l'interface, la puissance et la flexibilité supérieures des ordinateurs modernes. Le centre de l'attention, dans Qalculate!, est la saisie d'expressions. Au lieu de saisir chaque nombre dans une expression mathématique séparément, on peut directement écrire l'expression entière et la modifier ultérieurement. L'interprétation d'expressions est flexible, tolère les erreurs et cependant, en cas d'incorrection, Qalculate! vous en fera part. Les expressions non entièrement solubles ne sont néanmoins pas des erreurs. Qalculate! simplifiera autant que faire se peut et répondra par une expression. En plus des nombres et des opérateurs arithmétiques, une expression peut contenir n'importe quelle combinaison de variables, d'unités et de fonctions. Consultez http://qalculate.sourceforge.net/ pour plus d'informations. + + + + Scilab : + + Scilab est un paquet de calcul numérique multi plates-formes, ainsi qu'un langage de programmation orienté numériquement, de haut niveau, issu du Logiciel libre. + Scilab est distribué sous licence CeCILL (compatible GPL). Consultez http://www.scilab.org/ pour plus d'informations. + + Il faut que la version 5.4 ou supérieure de Scilab soit installée dans votre système pour rendre ce moteur utilisable. + + + + + Octave : + + Octave de GNU est un langage de haut niveau, principalement destiné aux calculs numériques. Il fournit une interface en ligne de commande pratique pour résoudre numériquement des problèmes linéaires et non linéaires et pour effectuer d'autres expérimentations numériques à l'aide d'un langage en grande partie compatible avec MATLAB. Consultez http://www.gnu.org/software/octave/ pour plus d'informations. + + + + + + + +L'espace de travail de &cantor; + + + Capture d'écran de l'espace de travail de &cantor; + + + + + + Capture d'écran de l'espace de travail de &cantor; + + + + +L'interface de feuille de calcul de &cantor; est composée de trois parties : + La barre d'onglets, où vous pouvez naviguer entre les feuilles de calcul ouvertes. + Un panneau d'aide, où s'affiche l'aide pour une commande spécifique si vous saisissez ? commande. + Un panneau de gestionnaire de variables où on peut voir la liste de toutes les variables disponibles sur la feuille de calcul actuelle. Les panneaux Aide et Gestionnaire de variables sont affichés sous forme d'onglets sur une barre latérale d'une fenêtre de &cantor;. On peut employer le gestionnaire de variables pour Maxima (s'il est activé dans la page ConfigurationConfigurer &cantor;... Maxima), les moteurs KAlgebra, Octave et Qualculate uniquement. + La feuille de calcul proprement dite. + + + +La feuille de calcul +La feuille de calcul est la zone de base pour travailler avec &cantor;. Grâce à celle-ci, on peut saisir des expressions, autoriser le moteur à effectuer des calculs et en observer les résultats. Comme les commandes qu'accepte la feuille de calcul dépendent du moteur choisi, vous devrez apprendre la syntaxe du programme principal approprié (le bouton Afficher l'aide vous y mène directement). Lorsque vous connaissez la commande mais que vous avez besoin d'informations supplémentaires, vous pouvez saisir ? commande pour faire apparaître l'aide contextuelle à droite de la feuille de calcul. Si vous voulez voir quelques exemples de feuilles de calcul, vous pouvez cliquer sur Télécharger des exemples de feuilles de calcul dans le menu Fichier et télécharger les feuilles de calcul que d'autres utilisateurs ont publiées. +Pour contrôler chaque élément de commande de la feuille de calcul, on peut utiliser les boutons de contrôle affichés sur la partie droite de la feuille de calcul lorsqu'on fait passer le curseur de la souris sur le champ de saisie. Il existe trois actions de base pour chaque élément : Évaluer un élément pour actualiser le résultat des calculs concernant l'élément, Faire glisser un élément pour le déplacer ailleurs dans la feuille de calcul actuelle et Supprimer un élément pour supprimer l'élément de la feuille de calcul actuelle. +On peut modifier les paramètres des polices et l'alignement des éléments de la feuille de calcul à l'aide d'une barre d'outils située au-dessus de la feuille de calcul. + + Configuration + Le menu Configuration permet de modifier certains paramètres de l'apparence de votre feuille de calcul actuelle. + + + Composition à l'aide de &latex; + + Cette option modifie la manière dont les résultats vous sont présentés. Si elle est cochée, cette option fait passer le résultat par le système &latex;pour produire des formules visuellement esthétiques. Par exemple, 3*x^2*sqrt(2)*x+2/3 devient + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Coloration syntaxique + + La coloration syntaxique augmente la lisibilité du code, en surlignant des mots clés ou en appariant des accolades dans différentes couleurs. + + + + Complètement + + Lorsque cette option est cochée, &cantor; affiche les complètements possibles pour la commande que vous saisissez actuellement quand vous appuyez sur la touche Tab. S'il ne reste qu'un seul choix, ce paramètre insérera le reste de la commande à votre place. + + + + Activer les numéros de lignes + + Ce réglage décide s'il faut ou non afficher un numéro devant les différentes expressions. Il permet de rappeler des résultats antérieurs - dans Maxima, par exemple, il s'agit de la commande %O1. + + + + Animer la feuille de calcul + + Ce paramètre décide s'il faut ou non utiliser les différentes animarions pour surligner les changements sur une feuille de calcul. + + + + + + + + + +Référence des commandes + + +La fenêtre principale de &cantor; + +&cantor; comporte des éléments de menus en commun avec KDE. Pour plus d'informations, consultez le chapitre Menu des Fondamentaux de &kde;. + +Éléments de menus additionnels ou spéciaux dans &cantor; : + + +Le menu <quote +>Fichier</quote +> + + + + &Ctrl;N Fichier Nouveau +Crée une nouvelle feuille de calcul avec le moteur par défaut. + + +Fichier Nouveau Moteur +Crée une nouvelle feuille de calcul avec le moteur choisi. + + +Fichier Télécharger des exemples de feuilles de calcul +Ouvre la boîte de dialogue pour télécharger des exemples envoyés par d'autres utilisateurs de &cantor; avec GetHotNewStuff (Obtention de nouveautés). + + +Fichier Ouvrir un exemple +Ouvre la boîte de dialogue pour choisir un exemple à charger. Les exemples devront être téléchargés avec Fichier Télécharger des exemples de feuilles de calcul au préalable. + + +Fichier Enregistrer en texte clair +Permet d'enregistrer la feuille de calcul actuelle sous la forme d'un document en texte clair. + + +Fichier Exporter en LaTeX +Permet d'enregistrer la feuille de calcul actuelle en &latex;. + + +Fichier Publier la feuille de calcul +Ouvre la boîte de dialogue pour publier votre feuille de calcul actuelle et la mettre à la disposition d'autres utilisateurs de &cantor; grâce à la fonction GetHotNewStuff. + + +Fichier Exécuter un script +Permet de charger et d'exécuter les scripts par lots pour le moteur actuel. + + + + + + + +Le menu <quote +>Affichage</quote +> + + + + &Ctrl;+ Affichage Zoom avant +Effectue un zoom avant de la feuille de calcul actuelle de 10 %. + + + &Ctrl;- Affichage Zoom arrière +Effectue un zoom arrière de la feuille de calcul actuelle de 10 %. + + +Affichage Afficher l'éditeur de scripts +Ouvre la fenêtre de l'éditeur de scripts par lots pour le moteur actuel. + + +Affichage Panneaux Aide +(Des)Active la visibilité de l'onglet Aide dans la barre latérale. + + +Affichage Panneaux Gestionnaire de variables +(Dés)Active la visibilité de l'onglet Gestionnaire de variables dans la barre latérale. + + + + + + +Le menu <quote +>Feuille de calcul</quote +> + + + +Feuille de calcul Évaluer une feuille de calcul +Déclenche l'évaluation de la feuille de calcul entière. + + + &Maj;Entrée Feuille de calcul Évaluer un élément +Déclenche l'évaluation de l'élément actuel. + + + &Ctrl;Entrée Feuille de calcul Insérer un élément de commande +Insère un nouvel élément de commande sous la position actuelle du curseur. + + +Feuille de calcul Insérer un élément de texte +Insère un élément de texte sous la position actuelle du curseur. + + +Feuille de calcul Insérer une image +Insère le modèle de l'image sous la position actuelle du curseur. Il vous faudra cliquer avec le &BDS; sur le modèle pour configurer les détails de l'image. + + +Feuille de calcul Insérer un saut de page +Insère le saut de page sous la position actuelle du curseur. + + + &Maj;Suppr Feuille de calcul Supprimer l'élément actuel +Supprime l'élément actuel de la feuille de calcul. + + + + + + +Le menu <quote +>Configuration</quote +> +Ce menu contient les éléments de configuration standard de &kde;, ainsi que ceux décrits dans la section Configuration. + + + +Le menu <quote +>Aide</quote +> +&help.menu.documentation; + + + + + +Guide du développeur de &cantor; + +&cantor; est facilement extensible par des modules externes. Vous pouvez écrire + + Des moteurs : + + Un nouveau moteur permet d'utiliser l'interface de &cantor; avec un programme différent. + + + + Des assistants : + + Les assistants fournissent des boîtes de dialogue permettant d'automatiser des tâches courantes (telles que la saisie d'une matrice ou l'exécution d'un script). + + + + +Pour le moment, comme il n'existe pas de tutoriels spéciaux pour les développeurs ni de documentation de l'API, si vous voulez écrire un module externe, vous devrez lire les sources du début à la fin. Toutes les définitions de l'interface se trouvent dans le dossier /lib. Pour voir quelques exemples d'implémentations, jetez un coup d'œil aux modules externes livrés avec &cantor;. + + + + +Questions et réponses +&reporting.bugs; &updating.documentation; + + L'élément de menu Composition à l'aide de LaTeX n'est pas disponible + Tous les moteurs ne prennent pas en charge toutes les options. La version actuelle prend en charge la sortie &latex; pour les moteurs Maxima, Qualculate! et Sage. + + + J'ai installé Sage / Maxima, mais le moteur approprié n'apparaît pas. + + Une explication possible est que &cantor; n'a pas correctement détecté l'emplacement. Allez dans la boîte de dialogue ConfigurationConfigurer &kappname;... et changez l'emplacement de l'application appropriée. + + + + Quel nom particulier - qu'a-t-il à voir avec les mathématiques ? + Le nom donné à &cantor; vient du mathématicien allemand Georg Cantor, l'auteur de la théorie des ensembles. + + + + + + +Remerciements et licence + +&cantor; +Programme sous copyright 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Documentation sous copyright © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Traduction française par &JoelleCornavin;. Relecture par &LudovicGrossard; +&underFDL; &underGPL; + + +Installation + + +Comment obtenir &cantor; +&install.intro.documentation; + + +Prérequis + +Pour pouvoir employer &cantor; avec succès, il vous faut &kde; 4. Si vous souhaitez que la prise en charge de la composition soit activée, installez &latex; etLibSpectre. Pour utiliser les différents moteurs, le paquet de mathématiques approprié est requis. + + + + + + + + + +Compilation et installation +&install.compile.documentation; + + +Configuration + +Selon votre système, vous pouvez être amené à ajuster les emplacements des différentes applications que &cantor; utilise. + + + + + +&documentation.index; + + + diff --git a/po/fr/docs/cantor/screenshot.png b/po/fr/docs/cantor/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ffbada5cfb5247cfb885f6800375b3b9bb6d3a GIT binary patch literal 101130 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%0DG&*c& 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�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 r8H4}cBjeg?bx7|?IHK~;@F_R#R}K!|Dj literal 0 HcmV?d00001 diff --git a/po/ga/cantor.po b/po/ga/cantor.po new file mode 100644 index 0000000..cc7e11a --- /dev/null +++ b/po/ga/cantor.po @@ -0,0 +1,3139 @@ +# Irish translation of cantor +# Copyright (C) 2009 This_file_is_part_of_KDE +# This file is distributed under the same license as the cantor package. +# Kevin Scannell , 2009. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2009-12-24 06:59-0500\n" +"Last-Translator: Kevin Scannell \n" +"Language-Team: Irish \n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? " +"3 : 4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Kevin Scannell" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kscanne@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Sos" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stad" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Breac" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Slonn:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Roghanna breise:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Breac" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Ríomh" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Athróg:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Íosteorainn:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Uasteorainn:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Colúin:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rónna:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Athróg" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Ainm" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Íosmhéid:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Uasmhéid:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "An Chéad Athróg" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "An Dara hAthróg" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Rith Script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|Comhad scripte R" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Earráid: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|Comhad scripte R" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Earráid - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "feidhm" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Comhad scripte Octave" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Earráid Chomhréire" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|Comhad scripte R" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Feidhmeanna" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Teideal" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Slonn" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Cuir Leis" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Bain" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Athróg X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stíl" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Línte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Pointí" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Pointí agus Línte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Boscaí" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histeagram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Céimeanna" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Poncanna" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Slíomachán" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Neamhní" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Step size" +msgid "Step si&ze" +msgstr "Méid na céime" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Roghanna" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Barr ar chlé" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Barr ar dheis" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Bun ar chlé" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Bun ar dheis" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Thíos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Amuigh" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Roghanna Comhaid" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Cineál an chomhaid" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "%1 ar iarraidh" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "EARRÁID" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "RABHADH" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "slonn" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "rogha" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "luach" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "slánuimhir" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "Boole" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "uimhir" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "comhad" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Ginearálta" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Deachúil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Beacht" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Codánach" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Comhcheangailte" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Taispeáint uimhriúil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Glan" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Eolaíoch" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Beachtas" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Cumasaithe" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Luacháil" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Aonad uillinne:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Raidiain" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Céimeanna" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Graidiain" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simpligh" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Fachtóirigh" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Breacadh" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Taispeáin greille:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|Comhad scripte R" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "*.R|Comhad scripte R" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "*.R|Comhad scripte R" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "file" +msgid "Open file" +msgstr "comhad" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Earráid" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Seisiún %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Error - Cantor" +msgid "Close Cantor" +msgstr "Earráid - Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Aibhsiú Comhréire" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Críoch" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Uimhreacha Línte" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert LaTeX Entry" +msgid "Insert Markdown Entry" +msgstr "Ionsáigh Iontráil LaTeX" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Ionsáigh Íomhá" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2012 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save" +msgid "Save as" +msgstr "Sábháil" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Sábháil" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Idirbhriseadh" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Á Áireamh..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Réidh" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Gan ainm" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Eagar" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Amharc" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Comhad" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nua" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Painéil" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Socruithe" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Réidh" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Dath Téa&cs..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Cló" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Trom" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Iodálach" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Idirbhriste" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Aimsigh:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Ar Aghaidh" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Roimhe Seo" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Ionadaigh:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Ionadaigh" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Ion&adaigh Uile" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Cuardaigh i:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Comhoiriúnaigh an cás" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Socruithe Íomhá" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Oscail" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Leithead" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Airde" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Roimhe Seo" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Méid Phriontála" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "pct" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Ainm" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Luach" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Ó:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Chuig:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Príomhtheideal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2012 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Scilab backend" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Inneall Scilab" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Inneall KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Inneall Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Comhéadan" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Úsáid an t-inneall seo" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Cáipéis le hoscailt" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Briseadh Leathanaigh ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Ainm:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Luach:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Luchtaigh Athróga" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Glan Athróga" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Deimhniú - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Loading failed." +msgid "Load file" +msgstr "Theip ar luchtú." + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Níor aimsíodh comhpháirt eagarthóra KDE;\n" +"seiceáil do shuiteáil KDE le do thoil." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Eagarthóir Scripteanna" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Gan aimsiú" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Orduithe" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Torthaí" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Earráidí" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Téacs" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Cód LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Réamhshocruithe" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert LaTeX Entry" +msgid "Markdown Entry" +msgstr "Ionsáigh Iontráil LaTeX" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Iontráil LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Íomhá" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Briseadh Leathanaigh" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert LaTeX Entry" +msgid "Insert Entry After" +msgstr "Ionsáigh Iontráil LaTeX" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "Ionsáigh" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Ionsáigh Iontráil LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Dath Téa&cs..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Aibhsiú &Téacs..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Cló" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Trom" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Iodálach" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Scríoblíne" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Ailínigh Ar &Chlé" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Ar Chlé" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Ailínigh &Sa Lár" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Sa Lár" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Ailínigh Ar &Dheis" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Comhfhadaigh" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Comhfhadaigh" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Bain Iontráil" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "" + +#~ msgid "Insert" +#~ msgstr "Ionsáigh" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Loading failed." +#~ msgstr "Theip ar luchtú." + +#, fuzzy +#~| msgid "(C) 2009-2012 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009-2012 Alexander Rieder" + +#~ msgid "Other" +#~ msgstr "Eile" + +#~ msgid "Main Toolbar" +#~ msgstr "Príomhbharra Uirlisí" + +#~ msgid "Popup" +#~ msgstr "Preabfhuinneog" + +#~ msgid "Help" +#~ msgstr "Cabhair" diff --git a/po/gl/cantor.po b/po/gl/cantor.po new file mode 100644 index 0000000..b2ae702 --- /dev/null +++ b/po/gl/cantor.po @@ -0,0 +1,3314 @@ +# translation of mathematik.po to galician +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Marce Villarino , 2009. +# Xosé , 2009, 2010, 2011. +# Marce Villarino , 2012, 2013, 2014. +# Miguel Branco , 2013. +# Adrián Chaves Fernández , 2015, 2016, 2017. +# Adrián Chaves (Gallaecio) , 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-17 21:15+0100\n" +"Last-Translator: Adrián Chaves (Gallaecio) \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Xosé Calvo, Marce Villarino" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "xosecalvo@gmail.com, mvillarino@kde-espana.es" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausa" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Comezar" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Deter" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Gardar o resultado" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Representación avanzada" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Representar" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expresión:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opcións adicionais:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "Re&presentar" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opción activa" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcular" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Derivar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variábel:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Veces: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paquete" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importar un paquete" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paquete:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrar" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Límite inferior:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Límite superior:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integral definida" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Álxebra &lineal" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Crear unha matriz" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Columnas:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Filas:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcular os valores propios" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriz:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcular os vectores propios" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverter a matriz" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Representar en 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variábel" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nome" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Mínimo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Máximo:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Representar en 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1ª variábel" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2ª variábel" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Executar un script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Resolver ecuacións" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ecuacións:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variábeis:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versión recomendada: %4

    %2

    Consulte %3 para máis información.
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Escolla a infraestrutura que desexe utilizar:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Empregar esta infraestrutura de maneira predeterminada" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia é unha linguaxe de programación dinámica de alto rendemento " +"e alto nivel para informática técnica, cunha sintaxe que lles resultará " +"familiar aos usuarios doutros ambientes de informática técnica. Fornece un " +"compilador sofisticado, execución distribuída en paralelo, precisión " +"numérica, e unha extensa biblioteca de funcións matemáticas.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Ruta da REPL nativa de Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Intercalar as gráficas na folla de traballo" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Ficheiro de script de Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Ruta da REPL de Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Incorporar as gráficas na folla de traballo (inicie unha nova sesión se o " +"cambia)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Formato intermedio das gráficas intercaladas:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista de scripts para executar automaticamente ao iniciar unha sesión" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Erro: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts para executar automaticamente" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua é unha linguaxe de scripting rápida e lixeira, cunha sintaxe " +"procedural simple. Existen varias bibliotecas de Lua para matemáticas e " +"ciencia.

    Esta infraestrutura é compatíbel con luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Ruta á orde luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Ficheiro de script de Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Ruta á orde luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima é un sistema para a manipulación de expresións simbólicas e " +"numéricas, incluídas derivadas, integrais, series de Taylor, transformadas " +"de Laplace, ecuacións diferenciais ordinarias, sistemas de ecuacións " +"lineais, polinomios e conxuntos, listas, vectores, matrices e tensores. " +"Maxima achega resultados numéricos de gran precisión mediante o uso de " +"fraccións exactas, enteiros de precisión arbitraria e números de coma " +"flotante de precisión variábel. Maxima pode representar as funcións e os " +"datos en dúas e tres dimensións." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Ruta ao executábel de Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Activar a xestión de variábeis" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Erro: Demasiados */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Erro: Demasiados /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Erro: agardábase \" antes do ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Agardando polo resultado da gráfica" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Ficheiro de lotes de Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Non se puido iniciar Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima quebrou; reiníciase…" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima quebrou dúas veces nun período de tempo curto. Detense para intentar " +"iniciar" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Erro - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "función" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Ruta ao Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Incorporar as gráficas na folla de traballo" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Permite que Cantor siga a construción e destrución de variábeis" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"O Octave de GNU é unha linguaxe de alto nivel deseñada principalmente para " +"cálculos numéricos.
    Fornece unha interface de liña de ordes cómoda para " +"resolver numericamente problemas lineais e non lineais e para realizar " +"outros experimentos numéricos empregando unha linguaxe que é bastante " +"compatíbel con Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Ruta ao executábel de Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Ficheiro de script de Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Hai un erro sintáctico" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Ruta ao Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Ficheiro de script de Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +# skip-rule: trasno-app +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python é unha linguaxe de programación dinámica utilizada en moitos eidos " +"de aplicación. Hai varios paquetes de Python para facer programación " +"científica.

    Esta infraestrutura dá compatibilidade con Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +# skip-rule: trasno-app +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python é unha linguaxe de programación dinámica utilizada en moitos eidos " +"de aplicación. Hai varios paquetes de Python para facer programación " +"científica.

    Esta infraestrutura dá compatibilidade con Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Diálogo de representación" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funcións" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Título" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expresión" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Engadir" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Retirar" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Limpar a lista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variábel X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Estilo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Liñas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Puntos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Puntos e liñas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Caixas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histograma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Pasos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Velas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Puntos" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Suavizado" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ningún" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotónico" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Splines cúbicos naturais" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotónico)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Intervalo da función" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Intervalo nas X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Taxa de &mostraxe" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "T&amaño do paso" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opcións" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Título da gráfica" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Lenda do eixo X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Lenda do eixo Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posición da lenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Agochar a lenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Arriba á esquerda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Arriba á dereita" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "No fondo á esquerda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "No fondo á dereita" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Por baixo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Fóra" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostrar a grade" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostrar todo o bordo" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Usar cores" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostrar intercalada" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Escala logarítmica en X" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Escala logarítmica en Y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opcións do ficheiro" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Gardar o debuxo nun ficheiro" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipo de ficheiro" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detectar polo nome" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! non pretende copiar as calculadoras normais, senón usar a " +"interface, potencia e flexibilidade dos computadores modernos. O centro da " +"atención de Qalculate! é a entrada da expresión; no canto de inserir cada " +"número da expresión matemática por separado pode escribir toda a expresión e " +"posteriormente modificala. O intérprete das expresións é flexíbel e " +"tolerante aos fallos, e aínda que vostede faga algo equivocado, Qalculate! " +"hallo dicir. Porén as expresións non totalmente resolúbeis non son erros, " +"simplificaranse tanto como se poida e a resposta será unha expresión. " +"Ademais de números e operadores aritméticos as expresións poden conter " +"calquera combinación de variábeis, unidades e funcións." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Indica se as unidades deben converterse e como. Se a activa ha converter ao " +"conxunto de unidades do SI máis axeitado (o máis reducido)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unidade angular predeterminada para as funcións trigonométricas." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "A base dos números analizados e avaliados." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Indica se o resultado da avaliación ha simplificarse ou factorizado." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Indica se os números racionais han mostrarse con decimais, como fraccións ou " +"algo entre medias." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Indica con tres puntos que a serie de díxitos dun número continúa " +"infinitamente, no canto de redondear (p.ex. 2/3 resulta en 0.666666… no " +"canto de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Usa todos os prefixos decimais do SI. Se non o escolle non se han usar " +"automaticamente os prefixos que non sexan múltiplos de mil (centi, deci, " +"deca, hecto)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Se escolle esta opción hanse usar expoñentes negativos no canto de cocientes " +"(p.ex. 5/x^2 ha ser 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Pantalla numérica." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Se escolle esta opción as gráficas hanse ver dentro da folla de traballo, en " +"caso contrario han aparecer nunha xanela á parte." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Indica se deben usarse cores nas gráficas." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Indica se debe debuxarse unha grade." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Indica se debe debuxarse todo o bordo arredor da gráfica." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "A anchura das liñas, en píxeles." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" +"A cantidade de pasos de interpolación que se han usar na representación." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "O método de suavizado nas gráficas." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "O estilo das gráficas." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "A posición da lenda nas gráficas." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate di que non pode imprimir. Está instalado o gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "falta un %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 ten que ser un número." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 ten que ser un enteiro." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 ten que ser un booleano." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "opción incorrecta para %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "atopáronse varias expresións nunha orde de representación (%1 e %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERRO" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ADVERTENCIA" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" +"Non hai ningunha función, variábel nin unidade co nome que se especificou." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Función: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interface de debuxo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Representa unha ou máis funcións tanto intercalándoa como nunha xanela " +"separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expresión" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opción" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "enteiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "lóxico" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "número" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "predeterminado: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "O nome da función" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etiqueta de título" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "etiqueta do eixo X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "etiqueta do eixo Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"A imaxe onde gardar a gráfica. Se o deixa baleira mostrarase nunha xanela na " +"pantalla. Se inline=true a imaxe móstrase con independencia do que diga esta " +"opción." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"O tipo co que se debe gardar a imaxe. Os valores admitidos son auto, png, " +"ps, eps, latex, svg e fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Estabelézao como certo para que a gráfica sexa a cores, ou falso para " +"monocromo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Valor mínimo do eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Valor máximo do eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Indica se debe usarse unha escala logarítmica para o eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Indica se debe usarse unha escala logarítmica para o eixo Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "A base do logaritmo do eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "A base do logaritmo do eixo Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Indica se debe usarse unha grade no debuxo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Indica se o debuxo debe rodearse por un bordo por cada lado (non só o eixo)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Anchura das liñas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Indica onde se debe pór a lenda. O valor pode ser arriba-esquerda, arriba-" +"dereita, fondo-esquerda e fondo-dereita, abaixo ou fora." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "O suavizado da gráfica. Pode ser único, csplines, bezier ou sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"O estilo da gráfica. Pode ser puntos, liñas e puntos, caixas, histograma, " +"pasos, velas ou puntos." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Pór unha escala no segundo eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Pór unha escala no segundo eixo Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Indica se o debuxo vai debuxarse intercalado ou nunha nova xanela." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "A distancia entre dous puntos de interpolación." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "O número de puntos de interpolación. Consulte tamén o paso." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "O nome da variábel x. Esta variábel debe ser unha incógnita." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Gardar as variábeis nun ficheiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Garda nun ficheiro todas as variábeis definidas. Poden cargarse de novo con " +"%1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "ficheiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "ficheiro: o ficheiro onde gardar" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Cargar as variábeis dun ficheiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Carga as variábeis dun ficheiro previamente creado con %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "ficheiro: o ficheiro que se vai cargar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Xeral" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numérica:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Formato da fraccións:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exacto" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fraccionario" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combinado" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Pantalla numérica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pura" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Científica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisión" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indicar as series infinitas:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Activado" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usar todos os prefixos do SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usar expoñentes negativos:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Avaliar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Converter para as mellores unidades do SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unidade dos ángulos:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiáns" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradiáns" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Método de estruturación:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplificar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factorizar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Representación" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Intercalar as gráficas:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Colorear as gráficas:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostrar a grade:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostrar todos os bordos:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Anchura das liñas:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Taxa de mostraxe:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Método de suavizado:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Splines cúbicos naturais" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Estilo da gráfica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Pasos" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posición da lenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R é unha linguaxe e un ambiente de cálculo e gráficos estatísticos, similar " +"á linguaxe e ao ambiente S.
    Fornece unha ampla variedade de técnicas " +"estatísticas (modelado lineal e non lineal, probas de estatística clásicas, " +"análise de series temporais, clasificación, clustering, …) e gráficas e é " +"moi extensíbel. A linguaxe S é con frecuencia o ambiente preferido na " +"investigación en métodos estatísticos pero R ofrece a alternativa de código " +"aberto para traballar nese eido." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Produciuse un erro ao abrir o ficheiro %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Ficheiro de script de R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Producise un erro ao analizar a orde" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Prema dúas veces para abrir o diálogo de selección de ficheiros" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Ficheiros fonte de R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage é un sistema de software matemático de código aberto publicado coa " +"licenza GPL.
    Combina a potencia de moitos paquetes de código aberto " +"existentes nunha interface común baseada en Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Ruta ao executábel de Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultado de %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"A última saída foi: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"Ficheiro de script de Python (*.py);;Ficheiro de script de Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Non se permite a versión %1.%2 de Sage. Actualice a súa instalación a unha " +"das versións compatíbeis para facer que funcione con Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "O proceso de Sage quebrou mentres avaliaba esta expresión" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "O proceso de Sage quebrou" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "O proceso de Sage saíu mentres avaliaba esta expresión" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "O proceso de Sage saíu" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Non se puido iniciar Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Ruta ao Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab é un paquete de software libre multiplataforma de cálculo numérico " +"e unha linguaxe de programación de alto nivel orientada a números.

    Scilab " +"distribúese baixo a licenza CeCILL (compatíbel coa GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"A ruta á orde scilab-adv-cli (Aviso: A versión de Scilab debe ser igual ou " +"posterior á 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +";;Ficheiro de script de Scilab (*.sce);;Ficheiro de funcións de Scilab (*." +"sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Ruta á orde scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Descargar follas de traballo de exemplo" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Abrir un exemplo" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Ir á folla de traballo anterior" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Ir á seguinte folla de traballo" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Folla de traballo de Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Abrir un ficheiro" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Non se atopou ningunha infraestrutura

    \n" +"
    Pódese intentar o seguinte:\n" +"
    • Cambiar as opcións no diálogo de configuración;
    • " +"
    • Instalar os paquetes do seguinte programa:
    • %2
    " +msgstr[1] "" +"

    Non se atopou ningunha infraestrutura

    \n" +"
    Pódese intentar o seguinte:\n" +"
    • Cambiar as opcións no diálogo de configuración;
    • " +"
    • Instalar os paquetes dun dos seguintes programas:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Erro" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesión %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Non se puido atopar a compoñente de Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Hai varias follas de traballo abertas e con cambios non gardados. Quere " +"pechalas?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Pechar Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Modificouse o proxecto actual. Quere gardalo?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Gardar o proxecto" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "A infraestrutura que se emprega de maneira predeterminada" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Compor de maneira predeterminada" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Realzar a sintaxe de maneira predeterminada" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Activar o completado de maneira predeterminada" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Activar a numeración das expresións de maneira predeterminada" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animar os cambios na folla de traballo de maneira predeterminada" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Avaliar de novo automaticamente as entradas por debaixo da actual" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Pedir confirmación cando se reinicie a infraestrutura" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Non está instalada a infraestrutura %1" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Hai algúns problemas coa infraestrutura %1;\n" +"comprobe a configuración ou instale os paquetes precisos.\n" +"Só poderá ver esta folla de traballo." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Gardar texto simple" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportar para LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Avaliar a folla de traballo" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Composición mediante LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Realce da sintaxe" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Completado" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Números de liña" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Avaliar as follas de traballo" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reiniciar a infraestrutura" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Avaliar a entrada" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Inserir unha entrada de orde" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Inserir unha entrada de texto" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Inserir unha entrada de Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Inserir unha entrada de Latex" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Inserir un salto de páxina" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Inserir unha imaxe" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Retirar esta entrada" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Mostrar axuda sobre %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostrar o editor de scripts" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Mostrar o completado" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Gardar como" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Gardar" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Perderanse todos os resultados de cálculos dispoñíbeis. Seguro que quere " +"reiniciar %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Reiniciar %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interromper" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Estase a calcular…" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Preparado" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Produciuse un erro na sesión: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Concluíu a inicialización" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Inicializando…" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sen nome" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[só lectura]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Quere enviar esta folla de traballo a un servidor público?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pregunta - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Esta folla non está gardada. Haina que gardar antes de enviala." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Aviso - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Esta infraestrutura non admite scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Editar" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vista" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "Fo&lla de traballo" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Ficheiro" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Novo" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneis" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Configuración" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Branco" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Negro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Vermello escuro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Vermello" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Vermello claro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verde escuro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verde" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verde claro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Azul escuro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Azul" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Azul claro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Amarelo escuro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Amarelo" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Amarelo claro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Cian escuro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Ciano" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Ciano claro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Maxenta escuro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Maxenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Maxenta claro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Laranxa escuro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Laranxa" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Laranxa claro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Gris escuro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Gris" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Gris claro" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Cor de fondo" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Cor do texto" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Tipo de letra" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Grosa" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Cursiva" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Aumentar o tamaño" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Diminuír o tamaño" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Seleccionar" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrompido" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra de buscas" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "…" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Atopar:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Seguinte" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Anterior" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Substituír:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Substituír" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Substituír &todo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Buscar en:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Distinguir as maiúsculas das minúsculas" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configurar a imaxe" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Prema aquí co botón dereito para inserir a imaxe" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Non se pode cargar a imaxe %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Configuración da imaxe" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Abrir" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Tamaño da vista" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Anchura" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Altura" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Vista previa" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Tamaño de impresión" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usar o tamaño da vista" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automático)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Abrir un ficheiro de imaxe" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostrar o código LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Ruta ao executábel de latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Ruta ao executábel de dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nome" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valor" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "De:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Ata:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Título principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Escala das abscisas" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Escala das ordenadas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Título da gráfica:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interface de KDE para aplicativos matemáticos" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2016 Filipe Saraiva
    © 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" +"Mantedor.
    Adaptación a Qt5 e KF5, infraestruturas de Scilab e Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autor orixinal.
    Mantedor (2009-2015)." + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Infraestrutura de KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Infraestrutura de Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interface" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Icona de Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usar a infraestrutura ." + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documentos para abrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Non se puido abrir o ficheiro %1." + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Salto de páxina ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Matemáticas á maneira de KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nome:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valor:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Engadir unha variábel nova" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Cargar as variábeis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Almacenar as variábeis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Limpar as variábeis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Seguro que quere retirar todas as variábeis?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmación - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Cargar un ficheiro" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Retirar o resultado" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Non se puido atopar ningún compoñente de editor de textos de KDE;\n" +"comprobe a instalación de KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor de scripts" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de scripts - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Non atopado" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Chegar ao comezo" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Chegar ao remate" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Substituíuse %1 instancia" +msgstr[1] "Substituíronse %1 instancias" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Ordes" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultados" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Erros" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Texto" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Código LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Infraestrutura predeterminada:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Se activa esta opción Cantor avalía automaticamente todas as entradas por " +"debaixo da actual." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Avaliar de novo automaticamente as entradas" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Valores predeterminados" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Activar a composición con LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Activar o realce da sintaxe" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Activar o completado" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Activar os números das liñas" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Activar as animacións na folla de traballo" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostrar renderizado" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Mostrar o código" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Non se pode mostrar o ficheiro Eps. Quizais precise de paquetes adicionais" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Non se pode escribir no ficheiro %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Non se pode escribir no ficheiro." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Produciuse un erro ao gardar o ficheiro %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"No modo de só lectura Cantor non puido garantir que a exportación será " +"válida para %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Produciuse un erro ao cargar a folla de estilo latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" +"O ficheiro seleccionado non é un ficheiro de proxecto de Cantor válido." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"Non se atopou a infraestrutura %1. Non se poden editar nin executar entradas." + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Entrada de orde" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Entrada de texto" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Entrada de Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Entrada LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Imaxe" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Salto de páxina" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Inserir unha entrada despois" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Inserir unha entrada antes" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Inserir unha entrada de LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Cor do texto…" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Cor" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Realce do texto…" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "Tipo de &letra" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Tamaño da &letra" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Negra" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Cursiva" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Subliñar" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Ri&scado" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Aliñar á &esquerda" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Esquerda" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Aliñar ao ¢ro" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centro" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Aliñar á &dereita" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Dereita" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Xustificar" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Xustificado" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Retirar a entrada" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Arrastrar a entrada" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Non está instalada a infraestrutura coa que se creou este ficheiro. " +#~ "Precisa %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publicar a folla de traballo" + +#~ msgid "Waiting for Image..." +#~ msgstr "Agardando pola imaxe…" + +#~ msgid "Insert" +#~ msgstr "Inserir" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "non se pode abrir o ficheiro %1: Descoñécese o tipo mime" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Documento en LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Follas de traballo de Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Servidor da infraestrutura de R para Cantor" + +#~ msgid "R Server" +#~ msgstr "Servidor de R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Uso: ficheiro gardarVariábeis" + +#~ msgid "Saving failed." +#~ msgstr "A garda fallou." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Uso: ficheiros cargarVariábeis" + +#~ msgid "Loading failed." +#~ msgstr "Fallou a carga." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Ruta á orde python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Servidor de R para Cantor" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Desexa exportar tamén as imaxes?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Ruta á orde python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Activar a xestión de variábeis" + +#~ msgid "Could not start the server." +#~ msgstr "Non foi posíbel iniciar o servidor." + +#~ msgid "Pause Animation" +#~ msgstr "Deter a animación" + +#~ msgid "Start Animation" +#~ msgstr "Iniciar a animación" + +#~ msgid "Restart Animation" +#~ msgstr "Reiniciar a animación" + +#~ msgid "Append Command Entry" +#~ msgstr "Amecer unha entrada de orde" + +#~ msgid "Append Text Entry" +#~ msgstr "Amecer unha entrada de texto" + +#~ msgid "Append Latex Entry" +#~ msgstr "Amecer unha entrada de Latex" + +#~ msgid "Append Image" +#~ msgstr "Amecer unha imaxe" + +#~ msgid "Append Page Break" +#~ msgstr "Amecer un salto de páxina" + +#~ msgid "Other" +#~ msgstr "Outro" + +#~ msgid "And %1 more..." +#~ msgstr "E %1 máis..." + +#~ msgid "Main Toolbar" +#~ msgstr "Barra de ferramentas principal" + +#~ msgid "Completion Style:" +#~ msgstr "Estilo de completado:" + +#~ msgid "Popup" +#~ msgstr "Xanela emerxente" + +#~ msgid "The style used for Completion" +#~ msgstr "O estilo utilizado para completar" diff --git a/po/gl/docs/cantor/index.docbook b/po/gl/docs/cantor/index.docbook new file mode 100644 index 0000000..9cadd12 --- /dev/null +++ b/po/gl/docs/cantor/index.docbook @@ -0,0 +1,573 @@ + + + + + +]> + + + +Manual do &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +XoséCalvo
    Tradutor do proxecto Trasno
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2009-08-26 +0.1 + + +O &cantor; é un aplicativo que pretende fornecer unha agradábel vista de ficha para outros paquetes de software libre relacionados coas matemáticas. + + + +KDE +kdeedu +matemáticas +matemáticas +Cantor +Sage +R +Maxima + + +
    + + +Introdución + +O &cantor; é un aplicativo que permite empregar os aplicativos de matemáticas favoritos desde unha interface elegante integrada no &kde; en forma de ficha. Fornece diálogos que axudan nas tarefas frecuentes e permite compartir as fichas con outras persoas. + + + +Uso do &cantor; + +Captura de pantalla: +Velaquí unha captura do &cantor; + + + + + + + + + Captura de pantalla + + + + + + + +Características do &cantor; + + Vista en ficha intuitiva para avaliar expresións. + Resultados da representación de gráficas dentro da ficha. + Estrutura doada baseada en engadidos que permite engadir infraestruturas diversas. + Integración de Obter Novidades, que permite descargar (ou enviar) fichas de exemplo. + Mathematical formula typesetting using LaTeX. + Realce da sintaxe consciente da infraestrutura. + Diálogos de axuda baseados en engadidos que axudan coas tarefas máis frecuentes, como integrar unha munción ou encher unha matriz. + + + + +As infraestruturas do &cantor; +O &cantor; ofrece varias posibilidades de infraestrutura que usar. A escolla depende do que se precise atinxir. +As infraestruturas dispoñíbeis nesta altura son: + + Sage: + + Sage é un sistema de software matemático de código aberto publicado coa licenza GPL.Combina a potencia de moitos paquetes de código aberto existentes nunha interface común baseada en Python. Vexa http://sagemath.org para máis información. + + + + Maxima: + + Maxima é un sistema para a manipulación de expresións simbólicas e numéricas, incluídas diferenciais, integrais, series de Taylor, transformadas de Laplace, ecuacións diferenciais ordinarias, sistemas de ecuacións lineais, polinomiais, conxuntos, listas, vectores, matrices e tensores. Maxima achega resultados numéricos de gran precisión mediante o uso de fraccións exactas, enteiros de precisión arbitraria e números de vírgula flotante de precisión variábel. Maxima pode representar as funcións e os datos en dúas e tres dimensións. Vexa http://maxima.sourceforge.net para máis información. + + + + R: + + R é unha linguaxe e un contorno de computación e gráficos estatísticos semellante á linguaxe e contorno S. Fornece unha ampla variedade de técnicas estatísticas (modelado lineal e non lineal, probas de estatística clásicas, análise de series temporais, clasificación, clustering,...) e gráficas, e é moi extensíbel. A linguaxe S é con frecuencia o vehículo preferido na investigación en metodoloxía estatística e R fornece un roteiro de Código Aberto para participar nesa actividade. Vexa http://www.r-project.org para máis información. + + + + KAlgebra: + + KAlgebra é unha calculadora gráfica baseada no MathML que se inclúe co Proxecto Educativo do KDE. Vexa http://edu.kde.org/kalgebra/ para máis información. + + + + + + + +O espazo de traballo do &cantor; + + + Captura de pantalla do espazo de traballo do &cantor; + + + + + + + + + Captura de pantalla do espazo de traballo do &cantor; + + + + +A interface da ficha do &cantor; consiste en tres partes: + A barra de lapelas, na que se pode alternar entre as fichas abertas; + Un panel de axuda que mostra axuda para unha orde determinada cando se introduce a orde "?"; + A ficha en si. + + + +A ficha +A ficha é a área de traballo básica do &cantor;. Nela pódense introducir expresións, permitir que a infraestrutura realice os cálculos e ver os resultados. As ordes que acepta a folla de traballo dependen da infraestrutura escollida, polo que hai que aprender a sintaxe correspondente a cada infraestrutura (o menú Mostrar a axuda leva alí directamente). Se sabes a orde mais precisas axuda adicional, podes escribir a orde "?" e a axuda de contexto aparece á dereita da ficha. Se quixeres ver algunhas fichas de exemplo, podes ir a Descargar fichas de exemplo no menú Ficheiro e descargar ficheiros que outras persoas publicasen. + + Configuración + O menú Configuración permite mudar algunhas opcións da aparencia da ficha na que esteas a traballar. + + + Typesetting using LaTeX + + This setting changes the way results are presented to you. If enabled, it passes the result through the LaTeX system, to produce visually appealing formulas. For example, 3*x^2*sqrt(2)*x+2/3 becomes + + + + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Realce da sintaxe + + Syntax Highlighting increases the readability of code, by highlighting Keywords, or matching brackets in different colors. + + + + Completado + + Cando se activa isto, o &cantor; mostra as posíbeis maneiras de completar a orde que estás a escribir se premes a tecla TAB. Se só fica unha escolla, insire automaticamente o resto da orde. + + + + Números de liña + + Esta opción controla se as diferentes expresións teñen un número diante. Isto permite reutilizar resultados previos - no Maxima, por exemplo, isto faise coa orde %01. + + + + + + + + + +Referencia das ordes + + +A xanela principal do &cantor; + + +The <guimenu +>File</guimenu +> Menu + + + + &Ctrl;N Ficheiro Novo +Creates a new document + + + &Ctrl;S Ficheiro Gardar +Saves the document + + + &Ctrl;Q Ficheiro Saír +Sae do &cantor; + + + + + + + +The <guimenu +>Help</guimenu +> Menu +&help.menu.documentation; + + + + + +Guía do desenvolvedor de &cantor; + +O &cantor; pódese estender facilmente con engadidos. Pódense escribir + + Infraestruturas: + + Unha infraestrutura nova permite empregar a interface do &cantor; cun programa novo. + + + + Asistentes: + + Os asistentes fornecen diálogos que permiten automatizar operacións frecuentes (como encher unha matriz ou executar un script). + + + + +At present, there are no special developer tutorials or API documentation, so if you want to write a plugin you will have to read through the sources. All interface definitions are in the lib directory. For some example implementations, look at the plugins shipped with &cantor;. + + + + +Preguntas e respostas +&reporting.bugs; &updating.documentation; + + O elemento do menú Composición mediante LaTeX non está dispoñíbel + Not every Backend supports every option. + + + Instalei Sage/Maxima, mais non aparece a infraestrutura. + + One possible explanation is that &cantor; did not correctly detect the location. Go to the Settings dialog and change the Path to the appropriate application. + + + + Vaia nome máis raro - que ten que ver coas matemáticas? + Cantor is named after the German mathematician Georg Cantor, the creator of set theory. + + + + + + +Créditos e licenza + +&cantor; +Program copyright 2009 Alexander Rieder alexanderrieder@gmail.com + +Documentation Copyright © 2009 Alexander Rieder alexanderrieder@gmail.com + +Xoséxosecalvo@gmail.com +&underFDL; &underGPL; + + +Instalación + + +Como obter o &cantor; +&install.intro.documentation; + + +Requisitos + +In order to successfully use &cantor;, you need &kde; 4. If you want support for type-setting to be enabled, you need to install LaTeX and LibSpectre. To use the different Backends, the appropriate math package is required. + + + + + + + + + +Compilación e instalación +&install.compile.documentation; + + +Configuración + +Dependendo do sistema pode haber que axustar as rutas aos diferentes aplicativos empregados polo &cantor;. + + + + + +&documentation.index; +
    + + diff --git a/po/hr/cantor.po b/po/hr/cantor.po new file mode 100644 index 0000000..a988f15 --- /dev/null +++ b/po/hr/cantor.po @@ -0,0 +1,3332 @@ +# Translation of cantor to Croatian +# +# Andrej Dundovic , 2010. +# Ivo Ugrina , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2010-12-05 20:18+0100\n" +"Last-Translator: Marko Dimjašević\n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.1\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Ivo Ugrina, Marko Dimjašević" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ivo@iugrina.com, marko@dimjasevic.net" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Spremi rezultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, fuzzy, kde-format +#| msgid "&Plot" +msgid "Plot" +msgstr "&Nacrtaj" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Izraz:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Dodatne opcije:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Nacrtaj" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktivna opcija" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Izračunaj" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Deriviraj" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Varijabla:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integriraj" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Donja granica:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Gornja granica:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "određeni integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Linearna algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Stvori matricu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Stupci:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Redovi:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Izračunaj svojstvene vrijednosti" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrica:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Izračunaj svojstvene vektore" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertiraj matricu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Nacrtaj u 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Varijabla" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Ime" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Nacrtaj u 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. varijabla" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. varijabla" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Pokreni skriptu" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Riješi jednadžbe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Jednadžbe:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Varijable:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Pogledaj %3 za više " +"informacija
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Izaberite pozadinski servis za korištenje:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Postavi ovo kao zadani pozadinski servis" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integriraj slike u radnu tablu" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R skripta" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Putanja do Maxime:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "integriraj slike u radnu tablu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista skripti koje se automatski pokreću na početku sesije" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Pogreška: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, fuzzy, kde-format +#| msgid "Show Script Editor" +msgid "Scripts to autorun" +msgstr "Prikaži uređivač skripti" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command" +msgstr "Putanja do Maxime:" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R skripta" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command:" +msgstr "Putanja do Maxime:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima je sustav za manipulaciju simboličkih i numeričkih izraza, " +"uključujući deriviranje, integriranje, Taylorov razvoj, Laplaceove " +"transformacije, obične diferencijalne jednadžbe, sisteme linearnih " +"jednadžbi, polinome, skupove, liste, vektore, matrice i tenzore. Maxima " +"vraća numeričke rezultate u velikoj preciznosti koristeći razlomke, prirodne " +"brojeve proizvoljne duljine točnosti i brojeve s pomičnim zarezom u " +"varijabilnoj točnosti. Maxima može crtati funkcije u dvije i tri dimenzije." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Put do Maximine izvršne datoteke" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima batch datoteka" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Neuspješno podizanje Maxime." + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima se srušila, podizanje nanovo…" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima se srušila dvaput u kratkom vremenu. Pokušaj ponovnog podizanja" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Greška – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Putanja do Maxime:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, fuzzy, kde-format +#| msgid "integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet" +msgstr "integriraj slike u radnu tablu" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Putanja do izvršne datoteke Octavea" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave skriptne datoteke" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Sintaktička pogreška" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Putanja do Octavea:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R skripta" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "Functions" +msgstr "Jednadžbe:" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Expression" +msgstr "Izraz:" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Remove" +msgstr "Spremi rezultat" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, fuzzy, kde-format +#| msgid "Variables:" +msgid "Clear List" +msgstr "Varijable:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, fuzzy, kde-format +#| msgid "Variable" +msgid "X variable" +msgstr "Varijabla" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, fuzzy, kde-format +#| msgid "Option active" +msgid "Options" +msgstr "Aktivna opcija" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "expression" +msgstr "Izraz:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, fuzzy, kde-format +#| msgid "Completion" +msgid "option" +msgstr "Dovršavanje" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, fuzzy, kde-format +#| msgid "Variable:" +msgid "value" +msgstr "Varijabla:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, fuzzy, kde-format +#| msgid "Integrate" +msgid "integer" +msgstr "Integriraj" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, fuzzy, kde-format +#| msgid "Line Numbers" +msgid "number" +msgstr "Brojevi linija" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, fuzzy, kde-format +#| msgid "Defaults:" +msgid "default: %1" +msgstr "Zadano:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Load variables from a file" +msgstr "2. varijabla" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Opće" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Precision" +msgstr "Izraz:" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, fuzzy, kde-format +#| msgid "Evaluate Entry" +msgid "Evaluate" +msgstr "Evaluiraj unos" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, fuzzy, kde-format +#| msgid "&Plot" +msgid "Plotting" +msgstr "&Nacrtaj" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show grid:" +msgstr "Prikaži kod" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, fuzzy, kde-format +#| msgid "Completion Style:" +msgid "Plot Style:" +msgstr "Stil dovršavanja:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R je programski jezik i okolina za statističko računanje i grafiku. Sličan " +"je jeziku i okolini S.
    R pruža široku lepezu statističkih (linearno i " +"nelinearno modeliranje, klasični statistički testovi, analiza vremenskih " +"nizova, klasifikacija, klasteriranje, …) i grafičkih metoda. Također, R se " +"može jednostavno proširiti raznim metodama i funkcijama. R je otvoren i " +"slobodan softver." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Greška pri otvaranju datoteke %1" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R skripta" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Greška prilikom parsiranja komande" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage je slobodan i otvoren softver za matematiku licenciran pod uvjetima GPL " +"licence.
    Kombinira snagu mnogih postojećih otvorenih paketa u " +"zajedničko Python sučelje." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Put do Sage-ove izvršne datoteke" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Rezultat od %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Zadnji izlaz je bio: \n" +"%2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python skripta\n" +"*.sage|Sage skripta" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage proces se srušio tijekom evaluiranja ovog izraza" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage servis se srušio" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage servis je završio tijekom evaluiranje ovog izraza" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage servis je završio" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Neuspješno pokretanje Sage-a" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to Sage" +msgid "Path to Sage:" +msgstr "Put do Sage-a" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.py|Python skripta\n" +"*.sage|Sage skripta" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Preuzmi primjere radnih tabli" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Otvori primjer" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor radna tabla" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "&Open Example" +msgid "Open file" +msgstr "&Otvori primjer" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nije pronađen pozadinski servis

    \n" +"
    Možete pokušati:\n" +"
    • Promjena opcija u konfiguracijskom dijalogu;
    • " +"
    • Instaliranje paketa za sljedeći program:
    • %2
    " +msgstr[1] "" +"

    Nije pronađen pozadinski servis

    \n" +"
    Možete pokušati:\n" +"
    • Promjena opcija u konfiguracijskom dijalogu;
    • " +"
    • Instaliranje paketa za sljedeće programe:
    • %2
    " +msgstr[2] "" +"

    Nije pronađen pozadinski servis

    \n" +"
    Možete pokušati:\n" +"
    • Promjena opcija u konfiguracijskom dijalogu;
    • " +"
    • Instaliranje paketa za sljedeće programe:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Greška" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesija %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Neuspješno pronalaženje Cantora" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Spremi rezultat" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Pozadinski servis koji je zadan" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Istakni sintaksu od početka" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Omogući dovršavanje od početka" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Omogući numeriranje izraza od početka" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automatski nanovo evaluiraj unose ispod trenutnog" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Pozadinski servis %1 nije instaliran" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Postoje neki problemi s %1 pozadinskim servisom,\n" +"molim vas provjeriti vašu konfiguraciju ili instalirajte potrebne pakete.\n" +"Bit ćete u mogućnosti jedino pregledavati ovu radnu tablu." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Evaluiraj radnu tablu" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Osvjetljavanje sintakse" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Dovršavanje" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Brojevi linija" + +#: cantor_part.cpp:270 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Animate Worksheet" +msgstr "Evaluiraj radnu tablu" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Nanovo pokreni pozadinski servis" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Evaluiraj unos" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Command Entry" +msgstr "Unesi" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Text Entry" +msgstr "Unesi" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Markdown Entry" +msgstr "Unesi" + +#: cantor_part.cpp:307 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Latex Entry" +msgstr "Unesi" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Prikaži pomoć za %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Prikaži uređivač skripti" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Prikaži dopunu" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save" +msgid "Save as" +msgstr "Spremi" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Spremi" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Nanovo pokreni pozadinski servis" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Prekid" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Računam …" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Spreman" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Greška sesije: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicijaliziranje završeno" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Inicijaliziranje sesije" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Neimenovano" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Da li želite objaviti trenutnu radnu tablu na javnom web serveru?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pitanje – Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Radna tabla nije spremljena. Trebali biste ju snimiti prije objavljivanja." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Upozorenje – Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Ovaj pozadinski servis ne dopušta skripte." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "Pogled" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "Radna tabla" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Datoteka" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, fuzzy, kde-format +#| msgid "New" +msgid "&New" +msgstr "Novi" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Postavke" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Spreman" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Text Color" +msgstr "Unesi" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Prekinuto" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot load image %1" +msgstr "Neuspješno pisanje u datoteku %1." + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, fuzzy, kde-format +#| msgid "&Settings" +msgid "Image Settings" +msgstr "&Postavke" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Otvori" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, fuzzy, kde-format +#| msgid "x" +msgid "px" +msgstr "x" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show LaTeX code" +msgstr "Prikaži kod" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Put od latex izvršne datoteke" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Put do dvips izvršne datoteke" + +#: lib/defaultvariablemodel.cpp:75 +#, fuzzy, kde-format +#| msgid "Name" +msgctxt "@title:column" +msgid "Name" +msgstr "Ime" + +#: lib/defaultvariablemodel.cpp:78 +#, fuzzy, kde-format +#| msgid "Variable:" +msgctxt "@title:column" +msgid "Value" +msgstr "Varijabla:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE-ovo sučelje prema matematičkim aplikacijama" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2009 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Octave backend" +msgstr "Nanovo pokreni pozadinski servis" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, fuzzy, kde-format +#| msgid "Integrate" +msgid "Interface" +msgstr "Integriraj" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Koristi ovaj pozadinski servis" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Dokument za otvoriti" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Greška pri otvaranju datoteke %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE-ov pristup matematici" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, fuzzy, kde-format +#| msgid "Name" +msgid "Name:" +msgstr "Ime" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, fuzzy, kde-format +#| msgid "Variable:" +msgid "Value:" +msgstr "Varijabla:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Add new variable" +msgstr "2. varijabla" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Load Variables" +msgstr "2. varijabla" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, fuzzy, kde-format +#| msgid "1st Variable" +msgid "Store Variables" +msgstr "1. varijabla" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, fuzzy, kde-format +#| msgid "Variables:" +msgid "Clear Variables" +msgstr "Varijable:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, fuzzy, kde-format +#| msgid "Question - Cantor" +msgid "Confirmation - Cantor" +msgstr "Pitanje – Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Load file" +msgstr "2. varijabla" + +#: resultitem.cpp:71 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Remove result" +msgstr "Spremi rezultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"KDE-ova komponenta za uređivanje teksta nije nađena;\n" +"molim vas da provjerite vašu instalaciju KDE-a." + +#: scripteditor/scripteditorwidget.cpp:146 +#, fuzzy, kde-format +#| msgid "Show Script Editor" +msgid "Script Editor" +msgstr "Prikaži uređivač skripti" + +#: scripteditor/scripteditorwidget.cpp:149 +#, fuzzy, kde-format +#| msgid "Show Script Editor" +msgid "Script Editor - %1" +msgstr "Prikaži uređivač skripti" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Commands" +msgstr "Unesi" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Result" +msgid "Results" +msgstr "Rezultat" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Error" +msgid "Errors" +msgstr "Greška" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, fuzzy, kde-format +#| msgid "Default Backend" +msgid "Default Backend:" +msgstr "Zadani pozadinski servis" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Kada je omogućeno, Cantor će automatski evaluirati svaki unos ispod " +"trenutnog." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Automatski nanovo evaluiraj izraze" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, fuzzy, kde-format +#| msgid "Defaults:" +msgid "Defaults" +msgstr "Zadano:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Omogući osvjetljavanje sintakse" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Omogući dovršavanje" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Omogući numeriranje linija" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Enable Worksheet Animations" +msgstr "Evaluiraj radnu tablu" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Prikaži renderirano" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Prikaži kod" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Neuspješno renderiranje Eps datoteke, Možda trebate dodatne pakete?" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Neuspješno pisanje u datoteku %1." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Neuspješno pisanje u datoteku %1." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Neuspješno spremanje datoteke %1." + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Command Entry" +msgstr "Unesi" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Text Entry" +msgstr "Unesi" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Markdown Entry" +msgstr "Unesi" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "LaTeX Entry" +msgstr "Unesi" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Image" +msgstr "Spremi rezultat" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Entry After" +msgstr "Unesi" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Entry Before" +msgstr "Unesi" + +#: worksheet.cpp:1264 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert LaTeX Entry" +msgstr "Unesi" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, fuzzy, kde-format +#| msgid "Inline" +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Ugrađeno" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Remove Entry" +msgstr "Spremi rezultat" + +#: worksheetentry.cpp:707 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Drag Entry" +msgstr "Spremi rezultat" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Pozadinski servis s kojim je ova datoteka generirana nije instaliran. " +#~ "Potrebno je %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Objavi radnu tablu" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert" +#~ msgstr "Unesi" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert Before" +#~ msgstr "Unesi" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "neuspješno otvaranje datoteke %1: Nepoznat MimeType" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor radna tabla" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server za Cantorov pozadinski servis R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#, fuzzy +#~| msgid "2nd Variable" +#~ msgid "Usage: loadVariables file" +#~ msgstr "2. varijabla" + +#, fuzzy +#~| msgid "2nd Variable" +#~ msgid "Loading failed." +#~ msgstr "2. varijabla" + +#, fuzzy +#~| msgid "(C) 2009 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor server za R" + +#~ msgid "Could not start the server." +#~ msgstr "Neuspješno podizanje servera." + +#~ msgid "Pause Animation" +#~ msgstr "Pauziraj animaciju" + +#~ msgid "Start Animation" +#~ msgstr "Pokreni animaciju" + +#~ msgid "Restart Animation" +#~ msgstr "Nanovo pokreni animaciju" + +#~ msgid "Other" +#~ msgstr "Ostalo" + +#~ msgid "And %1 more..." +#~ msgstr "Još %1 …" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Append Command Entry" +#~ msgstr "Unesi" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Append Text Entry" +#~ msgstr "Unesi" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Append Latex Entry" +#~ msgstr "Unesi" + +#~ msgid "Main Toolbar" +#~ msgstr "Glavna alatna traka" + +#~ msgid "Popup" +#~ msgstr "Skočna tabla" + +#~ msgid "The style used for Completion" +#~ msgstr "Stil koji se koristi za dovršavanje" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert Command Entry Before" +#~ msgstr "Unesi" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Command Entry Before" +#~ msgstr "Unesi" + +#~ msgid "Help" +#~ msgstr "Pomoć" + +#~ msgid "Show Help Panel" +#~ msgstr "Prikaži panel za pomoć" diff --git a/po/hu/cantor.po b/po/hu/cantor.po new file mode 100644 index 0000000..640dbd4 --- /dev/null +++ b/po/hu/cantor.po @@ -0,0 +1,3371 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Laszlo Papp , 2010. +# Kiszel Kristóf , 2010. +# Kristóf Kiszel , 2010, 2011, 2012. +# Balázs Úr , 2012, 2013, 2014. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2014-06-15 00:51+0200\n" +"Last-Translator: Balázs Úr \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Kiszel Kristóf,Úr Balázs" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "ulysses@kubuntu.org,urbalazs@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Szünet" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Indítás" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Leállítás" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Eredmény mentése" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Speciális ábrázolás" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Kirajzolás" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Kifejezés:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "További beállítások:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Kirajzolás" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktív beállítás" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "K&iszámítás" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differenciálás" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Változó:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Idők: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Csomag" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Csomag importálása" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Csomag:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrálás" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Alsó korlát:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Felső korlát:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "határozott integrál" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineáris algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Mátrix létrehozása" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Oszlopok:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Sorok:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Sajátértékek számítása" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Mátrix:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Sajátvektorok számítása" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Mátrix invertálása" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D-s ábrázolás" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Változó" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Név" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D-s ábrázolás" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Első változó" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Második változó" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Szkript futtatása" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Egyenletek megoldása" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Egyenletek:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Változók:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    További információkért lásd " +"%3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Válassza ki a használandó modult:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Legyen ez az alapértelmezett modul" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.python.org/2/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Ábrák integrálása a munkalapba" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.lua|Lua script file" +msgid "Julia script file (*.jl)" +msgstr "*.lua|Lua parancsfájl" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "A Maxima elérési útja:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Ábrák integrálása a munkalapba" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "A munkamenet kezdetén automatikusan futtatandó szkriptek listája" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Hiba: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Automatikusan futtatandó szkriptek" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    A lua egy gyors és könnyűsúlyú szkriptnyelv egyszerű procedurális " +"szintaxissal. Számos könyvtár található a lua nyelvben matematikai és " +"tudományos céllal.

    Ez a háttérprogram a luajit 2-t támogatja.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "A luajit parancs elérési útja" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.lua|Lua script file" +msgid "Lua script file (*.lua)" +msgstr "*.lua|Lua parancsfájl" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "A luajit parancs elérési útja:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"A Maxima egy rendszer szimbolikus és numerikus kifejezések kezeléséhez, " +"beleértve a deriválást, integrálást, Taylor-sorokat, Laplace-" +"transzformációt, közönséges differenciálegyenleteket, lineáris " +"egyenletrendszereket, polinomokat és halmazokat, listákat, vektorokat, " +"mátrixokat és tenzorokat. A Maxima nagy pontosságú numerikus eredményeket " +"biztosít pontos törtek, tetszőleges pontosságú egészek és változó pontosságú " +"lebegőpontos számok használatával, emellett képes kirajzolni a függvényeket " +"és adatokat két és három dimenzióban." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "A Maxima program elérési útja" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Változókezelés engedélyezése" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Hiba: Túl sok */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Hiba: Túl sok /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Hiba: \" várt ; előtt" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima kötegelt fájl" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Nem sikerült elindítani a Maximát" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "A Maxima összeomlott, újraindítás…" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"A Maxima kétszer is összeomlott rövid időn belül, az indítási kísérlet " +"befejeződik" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Hiba - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "függvény" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "A Maxima elérési útja:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Ábrák integrálása a munkalapba" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "A Cantor kövesse a változók létrehozását/megsemmisítését" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"A GNU Octave egy magas szintű, elsősorban numerikus számításokhoz tervezett " +"nyelv.
    Kényelmes parancssori felületet biztosít lineáris és nemlineáris " +"problémák numerikus megoldásához valamint egyéb numerikus kísérletek " +"végrehajtásához egy nagyrészt Matlab-kompatibilis nyelv használatával." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Az Octave program elérési útja" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave szkriptfájl" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Szintaktikai hiba" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Az Octave elérési útja:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.py|Python script file" +msgid "Python script file (*.py)" +msgstr "*.py|Python parancsfájl" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    A Python egy feltűnően erőteljes dinamikus programozási nyelv, amelyet a " +"legkülönbözőbb alkalmazási területeken használnak. Számos Python csomag " +"érhető el a tudományos programozáshoz.

    Ez a háttérprogram a Python 2-t " +"támogatja.

    " + +#: backends/python3/python3backend.cpp:51 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/2/" + +#: backends/python3/python3backend.cpp:56 +#, fuzzy, kde-format +#| msgid "" +#| "

    Python is a remarkably powerful dynamic programming language that is " +#| "used in a wide variety of application domains. There are several Python " +#| "packages to scientific programming.

    This backend supports Python 2." +#| "

    " +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    A Python egy feltűnően erőteljes dinamikus programozási nyelv, amelyet a " +"legkülönbözőbb alkalmazási területeken használnak. Számos Python csomag " +"érhető el a tudományos programozáshoz.

    Ez a háttérprogram a Python 2-t " +"támogatja.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - ábra párbeszédablak" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Függvények" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Cím" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Kifejezés" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Hozzáadás" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Eltávolítás" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Lista törlése" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X változó" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stílus" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Vonalak" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Pontok" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Pontok és vonalak" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Dobozok" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Hisztogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Lépések" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Gyertyatartók" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Pontok" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Simítás" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Nincs" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monoton " + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Természetes köbös spline" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monoton)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Függvénytartomány" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X tartomány" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, fuzzy, kde-format +#| msgid "Sampling rate" +msgid "Sa&mpling rate" +msgstr "Mintavételi ráta" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Step size" +msgid "Step si&ze" +msgstr "Lépésméret" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Beállítások" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Ábracím" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-tengely felirata" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-tengely felirata" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Jelmagyarázat helyzete" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Jelmagyarázat elrejtése" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Balra fent" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Jobbra fent" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Balra lent" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Jobbra lent" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Alul" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Kívül" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Rács megjelenítése" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Teljes keret megjelenítése" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Színek használata" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Beágyazott megjelenítése" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmikus x-skála" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmikus y-skála" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Fájlbeállítások" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Ábra mentése fájlba" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Fájltípus" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Felismerés a fájlnévből" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"A Qalculate! nem egy, a legolcsóbb számológépet másoló szoftver. A " +"Qalculate! célja a modern számítógépek felületének, erejének és " +"rugalmasságának teljes kihasználása. Egy matematikai kifejezés számainak " +"egyenkénti begépelése helyett közvetlenül megírhatja az egész kifejezést, " +"majd később módosíthatja. A kifejezés értelmezése rugalmas és hibatűrő, de " +"ha valamit mégis rosszul csinálna, a Qalculate! azonnal közölné. A nem " +"teljesen megoldható kifejezések ugyanakkor nem hibák, a Qalculate! a lehető " +"legjobban egyszerűsíti őket és egy kifejezéssel válaszol. Egy kifejezés " +"tartalmazhatja változók, egységek és függvények tetszőleges kombinációját is " +"a számok és aritmetikai operátorok mellett." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Automatikusan konvertálva legyenek-e az egységek, és hogyan. Ha igaz, a " +"konvertálás a legmegfelelőbb SI egységre történik (a legkisebb egységre)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "A trigonometrikus függvények alapértelmezett szögegysége." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "A feldolgozott és kiértékelt számok alapja." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Legyenek-e egyszerűsítve vagy tagokra bontva a kiértékelés eredményei." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"A racionális számok decimálisként számokkal törtként, vagy valahol a kettő " +"közötti módon legyenek-e megjelenítve." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Végtelen tizedestörtek jelzése három ponttal kerekítés helyett (például 2/3 " +"megjelenítése mint 0,6666… a 0,6667 helyett)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Az összes decimális SI előtag használata. Ha hamis a nem ezer többszörös " +"előtagok (centi, deci, deka, hekto) nem lesznek automatikusan használva." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Ha igaz, negatív kitevők lesznek használva osztás helyett (például 5/x^2 " +"helyett 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Számszerű kijelzés." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Ha igaz, az ábrák a munkalapon belül lesznek megjelenítve, különben pedig " +"egy külön ablakban." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Legyenek-e használva színek az ábrákon." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Legyen-e kirajzolva rács." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Legyen-e teljes keret rajzolva az ábra köré." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Vonalvastagság pixelekben." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "A kirajzoláskor használandó interpolációs lépések száma." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Az ábrák simítási módja." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Az ábrák stílusa." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "A jelmagyarázat helyzete az ábrákon." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "A Qalculate nem tud nyomtatni. Telepítve van a gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "hiányzó %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 szám kell hogy legyen." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 egész kell hogy legyen." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 logikai érték kell hogy legyen." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "érvénytelen beállítás ehhez: %1 (%2)" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "több kifejezés található egy rajzoló parancsban (%1 és %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "HIBA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "FIGYELMEZTETÉS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Nem létezik függvény. változó vagy egység a megadott névvel." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Függvény: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Megjelenítő felület" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Kirajzol egy vagy több függvényt beágyazva vagy külön ablakban." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "kifejezés" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opció" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "érték" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "egész" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "logikai" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "szám" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "alapértelmezés: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "A függvény neve" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Címfelirat" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-tengely felirata" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-tengely felirata" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"A kép amelybe az ábrát menteni kell. Ha üres, az ábra egy ablakban jelenik " +"meg. Ha inline=true, a kép ettől a beállítástól függetlenül megjelenik." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"A képtípus amelybe menteni kell (automatikus, *.png, *.ps, *.eps, *.latex, *." +"svg, *.fig)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Állítsa true-ra színes, false-ra monokróm ábrához." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Az x-tengely minimális értéke." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Az x-tengely maximális értéke." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Logaritmikus skálát kell-e használni az x-tengelyen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Logaritmikus skálát kell-e használni az y-tengelyen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritmikus alap az x-tengelyen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritmikus alap az y-tengelyen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Kell-e rácsot megjeleníteni az ábrában." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Kell-e keret az ábra körül (nem csak a tengelyek)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Vonatvastagság." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Hol helyezkedjen el az ábra jelmagyarázata, a következők egyike: none, " +"top_left, top_right, bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Ábrasimítás, a következők egyike: none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Ábrastílus, a következők egyike: points, points_lines, boxes, histogram, " +"steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Skála használata a második x-tengelyen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Skála használata a második y-tengelyen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Beágyazva legyen-e rajzolva az ábra új ablak helyett." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Két interpolációs pont távolsága, lásd még steps." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Az interpolációs pontok száma, lásd még step." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Az x változó neve. Ismeretlen változónak kell lennie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Változók mentése fájlba" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Az összes jelenleg definiált változó mentése fájlba. A változók " +"újratölthetők a következővel: %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fájl" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fájl: ebbe a fájlba kell menteni" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Változók betöltése fájlból" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Változók betöltése a(z) %1 által korábban létrehozott fájlból." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fájl: a betöltendő fájl" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Általános" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Alapszám:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Törtformátum:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimális" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Pontos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Tört alak" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinált:" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Számszerű kijelzés:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Sima" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Tudományos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Pontosság" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Végtelen sorok jelzése:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Bekapcsolva" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "SI előtagok használata:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Negatív kitevők használata:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Kiértékelés" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Konvertálás a legjobb SI egységekre:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Szög egység:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radián" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Fok" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradián" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Struktrúlási mód:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Egyszerűsítés" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Tényezőkre bontás" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Kirajzolás" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Ábrák megjelenítése beágyazva:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Színezett ábrák:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Rács megjelenítése:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Teljes keretek megjelenítése:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Vonalvastagság:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Mintavételi ráta:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Simítási mód:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Természetes köbös spline" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Kirajzolási stílus:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Lépések" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Jelmagyarázat helyzete:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"Az R egy, az S-hez hasonló programozási nyelv és szoftverkörnyezet " +"statisztikai számításokhoz és ábrázoláshoz.
    Statisztikai és ábrázolási " +"techikák (lineáris és nemlineáris modellezés, klasszikus statisztikai " +"tesztek, idősoros elemzés, osztályozás, csoportosítás, …) széles választékát " +"kínálja, és nagy mértékben bővíthető. Az S nyelvet gyakran választják " +"statisztikai módszertani kutatásokhoz, az R pedig egy nyílt forrású utat " +"biztosít a tevékenységben való részvételhez." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Hiba történt a(z) %1 fájl megnyitásakor" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R parancsfájl" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Hiba történt a parancs értelmezése közben" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Kattintson duplán a fájlkiválasztó párbeszédablak megnyitásához" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R forrásfájlok (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"A Sage egy szabad, nyílt forráskódú matematikai szoftverrendszer amely a GPL " +"licenc feltételei szerint érhető el.
    Számos meglévő nyílt forráskódú " +"csomag erejét integrálja egyetlen közös, Python-alapú felületbe." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "A Sage program elérési útja" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 eredménye" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Az utolsó kimenet: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python szkriptfájl\n" +"*.sage|Sage szkriptfájl" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "A Sage folyamat összeomlott a kifejezés kiértékelése közben" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "A Sage folyamat összeomlott" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "A Sage folyamat kilépett ezen kifejezés kiértékelése közben" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "A Sage folyamat kilépett" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Nem sikerült elindítani a Sage-t" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "A Sage elérési útja:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.5 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Figyelmeztetés: ez a modul csak a Scilab 5.5 vagy újabb verziókkal " +"működik.

    A Scilab egy szabad szoftver, keresztplatformos numerikus " +"számítási csomag és magas szintű, numerikus orientáltságú programozási nyelv." +"

    A Scilab a GPL-kompatibilis CeCILL licenc alatt érhető el" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"A scilab-adv-cli parancs elérési útja - Figyelmeztetés: a Scilab verziója " +"nagyobb vagy egyenlő kell hogy legyen mint 5.4" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.sce|Scilab script file\n" +#| "*.sci|Scilab function file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.sce|Scilab parancsfájl\n" +"*.sci|Scilab függvény fájl" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "A scilab-adv-cli parancs elérési útja:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Mintamunkalapok letöltése" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Példa &megnyitása" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor munkalap" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open image file" +msgid "Open file" +msgstr "Képfájl megnyitása" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nem található modul

    \n" +"
    Megpróbálhatja:\n" +"
    • Módosítani a beállításokat a beállítóablakban,
    • " +"
    • vagy a következő program csomagjait telepíteni:
    • %2
    " +msgstr[1] "" +"

    Nem található modul

    \n" +"
    Megpróbálhatja:\n" +"
    • Módosítani a beállításokat a beállítóablakban,
    • " +"
    • vagy a következő programok csomagjait telepíteni:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Hiba" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "%1. munkamenet" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "A Cantor Part nem található." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Eredmény mentése" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Az alapértelmezett modul" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Kiszedés készítése alapértelmezésben" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Szintaxiskiemelés alapértelmezésben" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Kiegészítés bekapcsolása alapértelmezésben" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Kifejezések számozásának bekapcsolása alapértelmezésben" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Változtatások animálása a munkalapon alapértelmezetten" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Az aktuális mező alatti mezők automatikus újra kiértékelése" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "A(z) %1 modul nincsen telepítve" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Problémák vannak a(z) %1 modullal,\n" +"ellenőrizze a telepítését vagy telepítse a szükséges csomagokat.\n" +"Csak megnézni tudja ezt a munkalapot." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Egyszerű szöveg mentése" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportálás LateX-fájlba" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Munkalap kiértékelése" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Kiszedés LaTeX használatával" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Szintaxiskiemelés" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Kiegészítés" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Sorszámok" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Munkalap animálása" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Modul újraindítása" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Bejegyzés kiértékelése" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Parancsbejegyzés beszúrása" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Szövegbejegyzés beszúrása" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Parancsbejegyzés beszúrása" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Latex bejegyzés beszúrása" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Oldaltörés beszúrása" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Kép beszúrása" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Aktuális bejegyzés eltávolítása" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "A(z) %1 súgó megjelenítése" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Szkriptszerkesztő megjelenítése" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Kiegészítés megjelenítése" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2013 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© Alexander Rieder, 2009-2013." + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save" +msgid "Save as" +msgstr "Mentés" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Mentés" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Modul újraindítása" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Megszakítás" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Számolás…" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Kész" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Munkamenet hiba: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Az inicializálás befejeződött" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Munkamenet inicializálása" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Névtelen" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" +"Szeretné feltölteni egy webkiszolgálóra és publikálni az aktuális munkalapot?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Kérdés - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "A munkalap nincs mentve, feltöltés előtt mentenie kell." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Figyelmeztetés - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Ez a modul nem támogatja a szkripteket." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Szerkesztés" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Nézet" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Munkalap" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fájl" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "Ú&j" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panelek" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Beállítások" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Kész" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X tartomány" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X tartomány" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X tartomány" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "S&zövegszín…" + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "B&etűtípus" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Félkövér" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Dőlt" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Megszakítva" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Keresősáv" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "…" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Keresés:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Következő" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Előző" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Csere:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Csere" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Az összes cs&eréje" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Keresés itt:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Illesztés" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Kép beállítása" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Kattintson ide jobb gombbal kép beszúrásához" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Nem sikerült betölteni a képet: %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Képbeállítások" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Megnyitás" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Megjelenítési méret" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Szélesség" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Magasság" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Előző" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Nyomtatási méret" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Megjelenítési méret használata" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automatikus)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Képfájl megnyitása" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Kód megjelenítése" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "A latex program elérési útja" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "A dvips program elérési útja" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Név" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Érték" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Ettől:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Eddig:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Főcím" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abszcisszaskála" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinátaskála" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Ábracím:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE előtétprogram matematikai alkalmazásokhoz" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2013 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© Alexander Rieder, 2009-2013." + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Scilab and Python backends" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Scilab és Python háttérprogramok" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra-modul" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave-modul" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Felület" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Ezen modul használata" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "A megnyitandó dokumentum" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Hiba történt a(z) %1 fájl megnyitásakor" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "Oldaltörés" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    A KDE út a matematikához" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Név:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Érték:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Új változó hozzáadása" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Változók betöltése" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Változók mentése" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Változók törlése" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Biztosan törölni szeretne minden változót?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Megerősítés - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Loading failed." +msgid "Load file" +msgstr "A betöltés meghiúsult." + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Eredmény törlése" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Nem található KDE-s szövegszerkesztő komponens\n" +"Ellenőrizze, rendben telepítve van-e a KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Szkriptszerkesztő" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Szkriptszerkesztő - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nem található" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Az elejére ért" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "A végére ért" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 előfordulás cserélve" +msgstr[1] "%1 előfordulás cserélve" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Parancsok" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Eredmények" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Hibák" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Szöveg" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX kód" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Alapértelmezett modul:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Ha be van kapcsolva, a Cantor automatikusan kiértékel minden bejegyzést az " +"aktuális alatt." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Mezők automatikus újra kiértékelése" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Alapértelmezések" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "LaTeX típusbeállítás engedélyezése" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Szintaxiskiemelés engedélyezése" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Kiegészítés bekapcsolása" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Sorszámozás bekapcsolása" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Munkalap animációk engedélyezése" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Renderelt megjelenítése" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Kód megjelenítése" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Nem lehet Eps fájlt renderelni, további csomagokra lehet szükség" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Nem sikerült írni a(z) %1 fájlt." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Nem sikerült írni a(z) %1 fájlt." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Hiba történt a(z) %1 fájlba mentés közben" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Hiba a latex.xsl stíluslap betöltése közben" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Parancsbejegyzés" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Szövegbejegyzés" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Parancsbejegyzés beszúrása" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX bejegyzés" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Kép" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Oldaltörés" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Szövegbejegyzés beszúrása" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Entry" +msgid "Insert Entry Before" +msgstr "Bejegyzés beszúrása" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "LaTeX bejegyzés beszúrása" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "S&zövegszín…" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Szín" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Szöveg&kiemelés…" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "B&etűtípus" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Betűmé&ret" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Félkövér" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Dőlt" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Aláhúzott" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Át&húzott" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Balra igazítás" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Balra" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Középre igazítás" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Középre" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Jobbra igazítás" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Jobbra" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Sorkizárt" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Sorkizárt" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Bejegyzés törlése" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Bejegyzés húzása" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "A fájlt generáló modul nincs telepítve, %1 szükséges hozzá" + +#~ msgid "Publish Worksheet" +#~ msgstr "Munkalap publikálása" + +#~ msgid "Waiting for Image..." +#~ msgstr "Várakozás a képre…" + +#~ msgid "Insert" +#~ msgstr "Beszúrás" + +#~ msgid "Insert Before" +#~ msgstr "Beszúrás elé" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Nem lehet megnyitni a(z) %1 fájlt: ismeretlen MIME-típus" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX dokumentum" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor munkalap" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Kiszolgáló a Cantor R modulhoz" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© Alexander Rieder, 2009." + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Használat: saveVariables fájl" + +#~ msgid "Saving failed." +#~ msgstr "A mentés meghiúsult." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Használat: loadVariables fájl" + +#~ msgid "Loading failed." +#~ msgstr "A betöltés meghiúsult." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© Alexander Rieder, 2009-2013." + +#~ msgid "Path to python command" +#~ msgstr "A python parancs elérési útja" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor R szerver" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Szeretné exportálni a képeket is?" + +#~ msgid "Path to python2 command:" +#~ msgstr "A python2 parancs elérési útja:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Változókezelés engedélyezése" + +#~ msgid "Could not start the server." +#~ msgstr "Nem sikerült elindítani a kiszolgálót." + +#~ msgid "Pause Animation" +#~ msgstr "Animáció szüneteltetése" + +#~ msgid "Start Animation" +#~ msgstr "Animáció elindítása" + +#~ msgid "Restart Animation" +#~ msgstr "Animáció újraindítása" + +#~ msgid "Append Command Entry" +#~ msgstr "Parancsbeviteli mező hozzáfűzése" + +#~ msgid "Append Text Entry" +#~ msgstr "Szövegbeviteli mező hozzáfűzése" + +#~ msgid "Append Latex Entry" +#~ msgstr "Latex-beviteli mező hozzáfűzése" + +#~ msgid "Append Image" +#~ msgstr "Kép hozzáfűzése" + +#~ msgid "Append Page Break" +#~ msgstr "Oldaltörés hozzáfűzése" + +#~ msgid "Other" +#~ msgstr "Egyéb" + +#~ msgid "And %1 more..." +#~ msgstr "És %1 további…" + +#~ msgid "Main Toolbar" +#~ msgstr "Alap eszköztár" + +#~ msgid "Completion Style:" +#~ msgstr "Kiegészítési stílus:" + +#~ msgid "Popup" +#~ msgstr "Felugró" + +#~ msgid "The style used for Completion" +#~ msgstr "A kiegészítés stílusa" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "A Sage program elérési útja" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert Command Entry Before" +#~ msgstr "Bejegyzés beszúrása" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Command Entry Before" +#~ msgstr "Bejegyzés beszúrása" + +#~ msgid "GroupBox" +#~ msgstr "GroupBox" + +#~ msgid "Help" +#~ msgstr "Súgó" + +#~ msgid "Show Help Panel" +#~ msgstr "Súgó panel megjelenítése" diff --git a/po/it/cantor.po b/po/it/cantor.po new file mode 100644 index 0000000..665a183 --- /dev/null +++ b/po/it/cantor.po @@ -0,0 +1,3316 @@ +# translation of cantor.po to Italian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the cantor package. +# Pino Toscano , 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-08-26 07:57+0200\n" +"Last-Translator: Pino Toscano \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Pino Toscano" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "toscano.pino@tiscali.it" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausa" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Avvia" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Ferma" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Salva risultato" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Grafico avanzato" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Grafico" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Espressione:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opzioni aggiuntive:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Grafico" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opzione attiva" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcola" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Calcola differenziale" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabile:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Volte:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Package" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importa package" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Package:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integra" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Limite inferiore:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Limite superiore:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integrale definito" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Algebra &lineare" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Crea matrice" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Colonne:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Righe:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcola autovalori" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrice:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcola autovettori" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverti matrice" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Grafico 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabile" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nome" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Massimo:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Grafico 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1a variabile" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2a variabile" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Avvia script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Risolvi equazioni" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Equazioni:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabili:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versione raccomandata: %4

    %2

    Per ulteriori informazioni, consulta %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Scegli il backend da usare:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Rendi questo backend quello predefinito" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia è un linguaggio di programmazione dinamico di alto livello " +"ed elevate prestazioni per il calcolo tecnico, con una sintassi familiare " +"agli utenti di altri ambienti di calcolo tecnico. Fornisce un compilatore " +"avanzato, esecuzione parallela e distribuita, accuratezza numerica e una " +"completa libreria di funzioni matematiche.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Percorso del REPL nativo di Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integra grafici nel foglio di lavoro" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "*File di script Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Percorso del REPL di Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Integra grafici nei fogli di lavoro (avvia una nuova sessione quando " +"modificati)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Formato intermedio dei grafici in linea:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/it/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista di script da eseguire automaticamente all'inizio di una sessione" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Errore: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Script da eseguire automaticamente" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua è un linguaggio leggero per script, con una semplice sintassi " +"procedurale. Ci sono diverse librerie matematiche e scientifiche in Lua.

    Questo backend supporta luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Percorso del comando «luajit»" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "*File di script Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Percorso del comando «luajit»:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima è un sistema per la manipolazione di espressioni simboliche e " +"numeriche, includendo differenziazione, integrazione, serie di Taylor, " +"trasformate di Laplace, equazioni differenziali ordinarie, sistemi di " +"equazioni lineari, polinomi, e di insiemi, liste, vettori, matrici e " +"tensori. Maxima ottiene risultati numeri ad alta precisione usando frazioni " +"esatta, numeri interi di precisione arbitraria e numeri in virgola mobile a " +"precisione variabile. Maxima può disegnare il grafico di funzioni e dati in " +"due e tre dimensioni." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Percorso dell'eseguibile di Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Avvia gestione delle variabili" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Errore: troppi */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Errore: troppi /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Errore: atteso \" prima di ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "In attesa del risultato del grafico" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "*File batch di Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Non è stato possibile avviare Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima è andato in crash. Riavvio..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima è andato in crash due volte in un breve periodo. Riavvio annullato." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Errore – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funzione" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Percorso di Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integra grafici nei fogli di lavoro" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" +"Permetti a Cantor di seguire la creazione e distruzione delle variabili" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave è un linguaggio di alto livello, orientato principalmente al " +"calcolo numerico.
    Fornisce una conveniente interfaccia a riga di " +"comando per risolvere in modo numerico problemi lineari e non lineari, e per " +"effettuare altri esperimenti numerici usando un linguaggio molto compatibile " +"con Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Percorso dell'eseguibile di Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "File di script di Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Errore di sintassi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Percorso di Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "*File di script Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python è un linguaggio di programmazione dinamico abbastanza potente " +"usato in vari ambiti scientifici. Ci sono diversi package scientifici per " +"Python.

    Questo backend supporta Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python è un linguaggio di programmazione dinamico abbastanza potente " +"usato in vari ambiti scientifici. Ci sono diversi package scientifici per " +"Python.

    Questo backend supporta Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Finestra del grafico" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funzioni" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Titolo" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Espressione" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Aggiungi" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Rimuovi" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Pulisci lista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variabile X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stile" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linee" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punti" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punti e linee" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Scatole" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Istogramma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Passi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Candele giapponesi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Punti" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Smussamento" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Nessuno/a" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotòno" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Spline naturale cubica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézier (monotòno)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Intervallo della funzione" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Intervallo X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Tasso di ca&mpionamento" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Dimensione del &passo" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opzioni" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Titolo del grafico" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Etichetta dell'asse X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Etichetta dell'asse Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posizione della legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Nascondi legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Alto a sinistra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Alto a destra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Basso a sinistra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Basso a destra" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Sotto" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Fuori" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostra griglia" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostra bordo completo" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Usa colori" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostra in linea" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Scala X logaritmica" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Scala Y logaritmica" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opzioni del file" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Salva grafico su file" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipo di file" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Rileva dal nome del file" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! non è la replica del software normalmente disponibile nelle " +"calcolatrici economiche. Qalculate! mira a fare un uso completo " +"dell'interfaccia, della potenza e della flessibilità superiori dei computer " +"moderni. Il centro dell'attenzione in Qalculate! è l'inserimento delle " +"espressioni. Invece di inserire ogni numero separatamente in un'espressione " +"matematica, puoi scrivere direttamente l'espressione intera e modificarla in " +"seguito. La valutazione delle espressioni è flessibile e tollera gli errori, " +"e anche nel caso di errore Qalculate! lo segnalerà. Tuttavia, le espressioni " +"che non possono essere risolte correttamente non sono errori. Qalculate! " +"semplificherà il più possibile e risponderà con un'espressione. In aggiunta " +"a numeri e operatori aritmetici, un'espressione può contenere una qualsiasi " +"combinazione di variabili, unità e funzioni." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Se e come convertire automaticamente le unità. Se vero, converte alle unità " +"del SI che si adattano meglio (il minor numero di unità)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unità predefinita per gli angoli in funzioni trigonometriche." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "La base dei numeri analizzati e valutati." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Se il risultato della valutazione sarà semplificato o fattorizzato." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Se i numeri razionali saranno visualizzati con i decimali, come frazione, " +"oppure come una forma intermedia." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mostra con tre puntini che le cifre di un numero continuano all'infinito, " +"invece di arrotondare (ad es. 2/3 viene mostrato come 0.666666... invece di " +"0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Usa tutti i prefissi decimali del SI. Se falso, i prefissi che non sono un " +"multiplo di migliaia (centi, deci, deca, hecto) non saranno usati " +"automaticamente." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Se abilitato, saranno usati esponenti negativi invece della divisione (ad " +"es. 5/x^2 diventa 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Visualizzazione dei numeri." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Se abilitato, i grafici saranno mostrati dentro il foglio di lavoro. " +"Altrimenti appariranno in una finestra separata." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Se usare i colori nei grafici." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Se disegnare una griglia." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Se disegnare bordi completi attorno ai grafici." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Spessore delle linee, in pixel." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Numero di passi di interpolazione da usare nei grafici." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Modalità di smussamento nei grafici." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Stile dei grafici." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Posizione della legenda nei grafici." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate segnala che non può stampare. gnuplot è installato?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "%1 mancante" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 deve essere un numero." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 deve essere un numero intero." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 deve essere un valore booleano." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "opzione non valida per %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "trovate espressioni multiple in un comando «plot» (%1 e %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERRORE" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "AVVISO" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Non esiste alcuna funzione, variabile o unità con il nome specificato." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funzione: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interfaccia dei grafici" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Disegna una o più funzioni in un grafico in linea o in una finestra separata." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "espressione" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opzione" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valore" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "intero" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booleano" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "numero" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "predefinito: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Il nome della funzione" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etichetta del titolo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Etichetta dell'asse X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Etichetta dell'asse Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"L'immagine in cui salvare il grafico. Se vuoto mostra il grafico in una " +"finestra sullo schermo. Se inline=true, l'immagine è mostrata " +"indipendentemente dal valore di questa opzione." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Il formato di immagine da usare. Uno di auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Imposta a true per grafici a colori, false per bianco e nero." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Valore minimo dell'asse X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Valore massimo dell'asse X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Se usare una scala logaritmica per l'asse X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Se usare una scala logaritmica per l'asse Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Base logaritmica per l'asse X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Base logaritmica per l'asse Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Se mostrare una griglia nel grafico." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Se circondare il grafico da bordi su tutti i lati (non solo da assi)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Spessore delle linee." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Dove posizionare la legenda del grafico. Uno di none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Smussamento nel grafico. Uno di none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Stile del grafico. Uno di lines, points, points_lines, boxes, histogram, " +"steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Usa scala per il secondo asse X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Usa scala per il secondo asse Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Se disegnare il grafico in linea, invece di una nuova finestra." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "La distanza tra due punti di interpolazione. Vedi anche «steps»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Il numero di punti di interpolazione. Vedi anche «steps»." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Il nome della variabile X. Deve essere una variabile sconosciuta" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Salva variabili su file" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Salva su un file tutte le variabili definite. Possono essere ricaricate con " +"%1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "file" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "file: il file in cui salvare" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Carica variabili da file" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Carica variabili da un file precedentemente creato con %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "file: il file da caricare" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Generale" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base dei numeri:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Formato delle frazioni:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimale" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Esatto" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Frazionale" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combinato" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Visualizzazione dei numeri:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pura" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Scientifica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisione" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indica serie infinite:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Abilitato" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usa tutte le unità del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usa esponenti negativi:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Valutazione" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Converti alle unità migliori del SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unità degli angoli:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianti" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Gradi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradianti" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Modalità di struttura:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Semplifica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Fattorizza" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Grafico" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Mostra grafici in linea:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Grafici a colori:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostra griglia:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostra bordi completi:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Spessore delle linee:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Tasso di campionamento:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Modalità di smussamento:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Spline naturale cubica" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Stile del grafico:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Passi" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posizione della legenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R è un linguaggio di programmazione e un ambiente per l'analisi e il disegno " +"statistico, simile al linguaggio di programmazione e ambiente S.
    Dispone di un'ampia varietà di tecniche statistiche (modellazione lineare e " +"non lineare, classici test di statistica, analisi di serie storiche, " +"classificazione, clustering, ...) e di disegno; inoltre è altamente " +"estensibile. Spesso il linguaggio S è scelto per le ricerche statistiche, e " +"R fornisce un modo open source per prendere parte a quella attività." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Errore durante l'apertura del file «%1»" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "File di script R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Errore durante l'analisi del comando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Doppio clic per aprire la finestra di dialogo di scelta file" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Sorgenti R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage è un software matematico libero open source rilasciato secondo i " +"termini della licenza GPL.
    Combina la potenza di molti pacchetti open " +"source in un'unica interfaccia basata su Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Percorso dell'eseguibile di Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Risultato di %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"L'ultimo output è stato: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "File di script Python (*.py);;File di script Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"La versione di Sage %1.%2 non è supportata. Aggiorna la tua installazione a " +"versioni supportate per usarla in Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" +"Il processo Sage è andato in crash durante la valutazione di questa " +"espressione" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Il processo Sage è andato in crash" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" +"Il processo Sage è terminato durante la valutazione di questa espressione" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Il processo Sage è terminato" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Impossibile avviare Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Percorso di Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab è un pacchetto di software libero multi-piattaforma per il calcolo " +"numerico e un linguaggio di programmazione di alto livello orientato " +"numericamente.

    Scilab è distribuito secondo i termini della licenza " +"CeCILL (compatibile con la licenza GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Percorso dell'eseguibile di Scilab (attenzione: la versione di Scilab deve " +"essere 5.4 o successiva)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;File di script di Scilab (*.sce);;File di funzioni di Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Percorso del comando «scilab-adv-cli»:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Scarica fogli di lavoro d'esempio" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Apri esempio" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Foglio di lavoro di Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Apri file" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nessun backend trovato

    \n" +"
    Puoi provare a:\n" +"
    • modificare le impostazioni nella finestra di dialogo di " +"configurazione;
    • installare i pacchetti per uno dei seguenti " +"programmi:
    • %2
    " +msgstr[1] "" +"

    Nessun backend trovato

    \n" +"
    Puoi provare a:\n" +"
    • modificare le impostazioni nella finestra di dialogo di " +"configurazione;
    • installare i pacchetti per i seguenti programmi:" +"
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Errore" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sessione %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Impossibile trovare il componente di Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Ci sono fogli di lavoro non salvati. Vuoi chiudere?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Chiudi Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Il progetto corrente è stato modificato. Vuoi salvarlo?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Salva progetto" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Il backend usato in modo predefinito" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Abilita la scrittura LaTeX in modo predefinito" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Attiva l'evidenziazione della sintassi in modo predefinito" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Abilita completamento delle parole in modo predefinito" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Attiva la numerazione delle espressioni in modo predefinito" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Anima le modifiche nel foglio di lavoro" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Rivaluta automaticamente le voci al di sotto di quella corrente" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Il backend %1 non è installato" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Ci sono problemi con il backend %1,\n" +"controlla la tua configurazione o installa i pacchetti richiesti.\n" +"Potrai solo vedere questo foglio di lavoro." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Salva come testo semplice" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Esporta come LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Vàluta foglio di lavoro" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Scrittura usando LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Evidenziazione della sintassi" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Completamento delle parole" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Numeri di riga" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Anima foglio di lavoro" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Riavvia backend" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Vàluta voce" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Inserisci voce di comando" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Inserisci voce di testo" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Inserisci voce di Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Inserisci voce di LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Inserisci interruzione di pagina" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Inserisci immagine" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Rimuovi la voce corrente" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Mostra aiuto di %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostra editor degli script" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Mostra completamento delle parole" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Componente Cantor" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Salva come" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Salva" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Riavvia backend" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interrompi" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Calcolo..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Pronto" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Errore di sessione: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inizializzazione completata" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Inizializzazione..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Senza nome" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Vuoi inviare il foglio di lavoro corrente ad un server web pubblico?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Domanda – Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Il foglio di lavoro non è salvato. Dovresti salvarlo prima di inviarlo." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Avviso – Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Questo backend non supporta script." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Modifica" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Visualizza" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Foglio di lavoro" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&File" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nuovo" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Pannelli" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "Imp&ostazioni" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Bianco" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Nero" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Rosso scuro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Rosso" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Rosso chiaro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verde scuro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verde" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verde chiaro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Blu scuro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blu" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Blu chiaro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Giallo scuro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Giallo" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Giallo chiaro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Ciano scuro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Ciano" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Ciano chiaro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta scuro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Magenta chiaro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Arancione scuro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Arancione" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Arancione chiaro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Grigio scuro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Grigio" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Grigio chiaro" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Colore di sfondo" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Colore del testo" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Carattere" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Grassetto" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Corsivo" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Aumenta dimensione" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Diminuisci dimensione" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Seleziona" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrotto" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra di ricerca" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Cerca:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Successivo" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Precedente" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Sostituisci:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Sostituisci" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Sostituisci &tutto" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Cerca in:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Distingui le maiuscole" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configura immagine" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Fai clic col tasto destro per inserire un'immagine" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Non è possibile caricare l'immagine %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Impostazioni dell'immagine" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Apri" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Dimensioni per la visualizzazione" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Larghezza" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Altezza" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Anteprima" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Dimensioni per la stampa" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usa le dimensioni per la visualizzazione" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automatica)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Apri immagine" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostra codice LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Percorso dell'eseguibile «latex»" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Percorso dell'eseguibile «dvips»" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nome" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valore" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Da:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "A:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Titolo principale" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Scala delle ascisse" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Scala delle ordinate" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Titolo del grafico:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interfaccia KDE per applicazioni matematiche" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Responsabile
    Conversione a Qt5/KF5, backend Scilab e Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autore originale
    Responsabile (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Backend KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Backend Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfaccia" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Icona di Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usa il backend " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documento da aprire." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Impossibile aprire il file «%1»" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Interruzione di pagina ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    La modalità KDE per la matematica" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nome:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valore:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Aggiungi nuova variabile" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Carica variabili" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Memorizza variabili" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Cancella variabili" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Sei sicuro di voler rimuovere tutte le variabili?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Conferma – Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Apri file" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Rimuovi risultato" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Impossibile trovare un componente di editor di testi per KDE;\n" +"controlla la tua installazione di KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor degli script" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor degli script - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Non trovato" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Raggiunto l'inizio" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Raggiunta la fine" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Sostituita %1 occorrenza" +msgstr[1] "Sostituite %1 occorrenze" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Comandi" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Risultati" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Errori" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Testo" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Codice LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Backend predefinito:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Se abilitata, Cantor rivaluterà automaticamente tutte le voci al di sotto di " +"quella corrente." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Rivaluta voci automaticamente" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Predefiniti" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Abilita la scrittura LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Abilita evidenziazione della sintassi" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Abilita completamento delle parole" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Abilita numeri di riga" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Abilita animazioni dei fogli di lavoro" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostra risultato del rendering" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Mostra codice" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Non è possibile visualizzare file Eps. Potresti aver bisogno di pacchetti " +"aggiuntivi." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Non posso scrivere il file «%1»." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Non posso scrivere il file." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Errore durante il salvataggio del file «%1»" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Errore durante il caricamento del foglio di stile «latex.xsl»." + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Il file selezionato non è un progetto valido di Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Voce di comando" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Voce di testo" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Voce di Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Voce di LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Immagine" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Interruzione di pagina" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Inserisci voce dopo" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Inserisci voce prima" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Inserisci voce di LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Colore del testo..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Colore" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Evidenziazione del testo..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Carattere" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Dimen&sione del testo" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Grassetto" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Corsivo" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Sottolineato" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Barrato" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Allinea a &sinistra" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Sinistra" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Allinea al ¢ro" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centro" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Allinea a &destra" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Destra" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Giustifica" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Giustificato" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Rimuovi voce" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Trascina Voce" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Il backend con cui questo file è stato creato non è installato. Richiede " +#~ "%1." + +#~ msgid "Publish Worksheet" +#~ msgstr "Pubblica foglio di lavoro" + +#~ msgid "Waiting for Image..." +#~ msgstr "In attesa di un'immagine..." + +#~ msgid "Insert" +#~ msgstr "Inserisci" + +#~ msgid "Insert Before" +#~ msgstr "Inserisci prima" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "impossibile aprire il file «%1»: tipo di file sconosciuto" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Documento LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Foglio di lavoro di Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server per il backend R di Cantor" + +#~ msgid "R Server" +#~ msgstr "Server R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Uso: saveVariables file" + +#~ msgid "Saving failed." +#~ msgstr "Salvataggio non riuscito." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Uso: loadVariables file" + +#~ msgid "Loading failed." +#~ msgstr "Caricamento non riuscito." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Percorso del comando «python»:" + +#~ msgid "Cantor Server for R" +#~ msgstr "Server di Cantor per R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Vuoi esportare anche le immagini?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Percorso del comando «python2»:" + +#~ msgid " Enable Variable Management" +#~ msgstr "Abilita gestione delle variabili" + +#~ msgid "Could not start the server." +#~ msgstr "Impossibile avviare il server." + +#~ msgid "The style used for Completion" +#~ msgstr "Lo stile usato per il completamento delle parole" + +#~ msgid "Main Toolbar" +#~ msgstr "Barra degli strumenti principale" + +#~ msgid "Other" +#~ msgstr "Altro" + +#~ msgid "And %1 more..." +#~ msgstr "E altri %1..." + +#~ msgid "Pause Animation" +#~ msgstr "Metti in pausa l'animazione" + +#~ msgid "Start Animation" +#~ msgstr "Avvia animazione" + +#~ msgid "Restart Animation" +#~ msgstr "Riavvia l'animazione" + +#~ msgid "Completion Style:" +#~ msgstr "Stile di completamento:" + +#~ msgid "Popup" +#~ msgstr "Menu a comparsa" + +#~ msgid "Append Command Entry" +#~ msgstr "Aggiungi voce di comando in coda" + +#~ msgid "Append Text Entry" +#~ msgstr "Aggiungi voce di testo in coda" + +#~ msgid "Append Latex Entry" +#~ msgstr "Aggiungi voce LaTeX in coda" + +#~ msgid "Append Image" +#~ msgstr "Aggiungi immagine in coda" + +#~ msgid "Append Page Break" +#~ msgstr "Aggiungi interruzione di pagina in coda" + +#~ msgid "Path to the Scilab executable" +#~ msgstr "Percorso dell'eseguibile di Scilab" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Inserisci una voce di comando prima" + +#~ msgid "Command Entry Before" +#~ msgstr "Voce di comando prima" + +#~ msgid "Show Help Panel" +#~ msgstr "Mostra il pannello di aiuto" + +#~ msgid "Uploading successful" +#~ msgstr "Invio riuscito" + +#~ msgid "Error uploading File %1" +#~ msgstr "Errore durante l'invio del file «%1»" diff --git a/po/it/docs/cantor/index.docbook b/po/it/docs/cantor/index.docbook new file mode 100644 index 0000000..f66b46b --- /dev/null +++ b/po/it/docs/cantor/index.docbook @@ -0,0 +1,1044 @@ + + + + ATEX"> + + +]> + + + +Manuale di &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +PinoToscano
    toscano.pino@tiscali.it
    Traduzione italiana
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2014-05-09 +0.5 (&kde; 4.14) + + +&cantor; mira a fornire una comoda interfaccia a fogli di lavoro per altri software matematici. + + + +KDE +kdeedu +matematica +matematica +Cantor +Sage +Python +Lua +Scilab +R +Maxima + + +
    + + +Introduzione + +&cantor; è un'applicazione che ti permette di usare le tue applicazioni matematiche preferite da una elegante interfaccia a fogli di lavoro integrata in &kde;. Fornisce assistenti per aiutare con le operazioni comuni e ti permette di condividere i tuoi fogli di lavoro con altre persone. + + + +Uso di &cantor; + +Immagine: +Ecco un'immagine di &cantor; + + + + + + Immagine + + + + + + + +Funzioni di &cantor; + + Intuitiva vista a fogli di lavoro per la valutazione di espressioni. + Risultati del disegno di grafici mostrati nel foglio di lavoro. + Semplice struttura ad estensioni che permette di aggiungere vari backend. + Integrazione con il sistema «Scarica le novità» di &kde; che permette di scaricare o inviare fogli di lavoro. + Scrittura di formule matematiche usando &latex;. + Evidenziazione della sintassi specifica per backend. + Estensioni per assistenti per aiutare con operazioni comuni, ad esempio l'integrazione di una funzione o l'inserimento di una matrice. + + + + +Backend di &cantor; +&cantor; offre diversi backend da usare. La scelta del backend dipende dagli obiettivi da realizzare. +Al momento, sono disponibili i seguenti backend: + + Sage: + + Sage è un software matematico libero open source rilasciato secondo i termini della licenza GPL. Combina la potenza di molti pacchetti open source in un'unica interfaccia basata su Python. Per maggiori informazioni, consulta http://sagemath.org + + + + Maxima: + + Maxima è un sistema per la manipolazione di espressioni simboliche e numeriche, includendo differenziazione, integrazione, serie di Taylor, trasformate di Laplace, equazioni differenziali ordinarie, sistemi di equazioni lineari, polinomi, e di insiemi, liste, vettori, matrici e tensori. Maxima ottiene risultati numeri ad alta precisione usando frazioni esatta, numeri interi di precisione arbitraria e numeri in virgola mobile a precisione variabile. Maxima può disegnare il grafico di funzioni e dati in due e tre dimensioni. Per maggiori informazioni, consulta http://maxima.sourceforge.net + + + + R: + + R è un linguaggio di programmazione e un ambiente per l'analisi e il disegno statistico, simile al linguaggio di programmazione e ambiente S. Dispone di un'ampia varietà di tecniche statistiche (modellazione lineare e non lineare, classici test di statistica, analisi di serie storiche, classificazione, clustering, ...) e di disegno; inoltre è altamente estensibile. Spesso il linguaggio S è scelto per le ricerche statistiche, e R fornisce un modo open source per prendere parte a quella attività. Per maggiori informazioni, consulta http://www.r-project.org + + + + &kalgebra;: + + KAlgebra è una calcolatrice grafica basata su MathML, fornita come parte del progetto «&kde; Education». Per maggiori informazioni, consulta http://edu.kde.org/kalgebra/. + + + + Qalculate!: + + Qalculate! non è la replica del software normalmente disponibile nelle calcolatrici economiche. Qalculate! mira a fare un uso completo dell'interfaccia, della potenza e della flessibilità superiori dei computer moderni. Il centro dell'attenzione in Qalculate! è l'inserimento delle espressioni. Invece di inserire ogni numero separatamente in un'espressione matematica, puoi scrivere direttamente l'espressione intera e modificarla in seguito. La valutazione delle espressioni è flessibile e tollera gli errori, e anche nel caso di errore Qalculate! lo segnalerà. Tuttavia, le espressioni che non possono essere risolte correttamente non sono errori. Qalculate! semplificherà il più possibile e risponderà con un'espressione. In aggiunta a numeri e operatori aritmetici, un'espressione può contenere una qualsiasi combinazione di variabili, unità e funzioni. Per ulteriori informazioni vedi http://qalculate.sourceforge.net/. + + + + Python2: + + Python è un linguaggio di programmazione dinamico abbastanza potente usato in vari ambiti scientifici. Ci sono diversi package scientifici per Python. + Python è distribuito secondo i termini della licenza Python Software Foundation (compatibile con la licenza GPL). Per maggiori informazioni, consulta il sito ufficiale. + + Questo backend aggiunge un nuovo elemento al menu principale di &cantor;, Package. L'unica voce in questo menu è PackageImporta Package. Questa voce può essere usata per importare package di Python nel foglio di lavoro. + + + Questo backend supporta solo Python 2. + + + + + Scilab: + + Scilab è un pacchetto di software libero multi-piattaforma per il calcolo numerico e un linguaggio di programmazione di alto livello orientato numericamente. + Scilab è distribuito secondo i termini della licenza CeCILL (compatibile con la licenza GPL). Per maggiori informazioni, consulta http://www.scilab.org/. + + Per usare questo backend hai bisogno di Scilab versione 5.5 o successiva installato + + + + + Octave: + + &GNU; Octave è un linguaggio di alto livello, orientato principalmente al calcolo numerico. Fornisce una conveniente interfaccia a riga di comando per risolvere in modo numerico problemi lineari e non lineari, e per effettuare altri esperimenti numerici usando un linguaggio molto compatibile con MATLAB. Per maggiori informazioni, consulta http://www.gnu.org/software/octave/. + + + + Lua: + + Lua è un linguaggio leggero per script, con una semplice sintassi procedurale. Ci sono diverse librerie matematiche e scientifiche in Lua. + Per maggiori informazioni, consulta http://www.lua.org/. + Questo backend supporta luajit 2. + + + + + + + +Il foglio di lavoro di &cantor; + + + Immagine del foglio di lavoro di &cantor; + + + + + + Immagine del foglio di lavoro di &cantor; + + + + +L'interfaccia di un foglio di lavoro di &cantor; consiste in tre parti: + la barra delle schede, che puoi usare per cambiare il foglio di lavoro aperto. + un pannello di aiuto, dove viene mostrata la guida di un comando specifico se inserisci «? comando». + Un pannello «Gestore variabili» dove puoi vedere la lista di tutte le variabili disponibili nel foglio di lavoro corrente. I pannelli «Aiuto» e «Gestore Variabili» sono mostrati come schede nella barra laterale della finestra di &cantor;. Il gestore delle variabili può essere usato per i backend Maxima (se abilitato nella pagina Maxima in ImpostazioniConfigura &cantor;...), &kalgebra;, Octave, Python2, Qalculate e Scilab. + il foglio di lavoro. + + + +Il foglio di lavoro +Il foglio di lavoro è l'area principale usata per lavorare in &cantor;. Usando i fogli di lavoro puoi inserire espressioni, permettere ai backend di effettuare calcoli e osservare i risultati. I comandi accettati dai fogli di lavoro dipendono dal backend usato, quindi dovresti imparare la sintassi corretta a seconda del backend (il pulsante «Mostra aiuto» te la mostra direttamente). Se conosci un comando, ma hai bisogno di informazioni aggiuntive, puoi scrivere «? comando», facendo così apparire l'aiuto contestuale a destra del foglio di lavoro. Se vuoi vedere alcuni fogli di lavoro d'esempio, puoi scegliere Scarica fogli di lavoro d'esempio dal menu File e scaricare quindi i fogli di lavoro che altri utenti hanno pubblicato. +Per controllare ciascuna voce di comando nel foglio di lavoro puoi usare i pulsanti di controllo mostrati a destra del foglio di lavoro, passando con il cursore sopra il campo della voce. Ci sono tre azioni di base per ciascuna voce: Vàluta voce per aggiornare il risultato dei calcoli per la voce, Trascina voce per spostare la voce in un'altra posizione all'interno del foglio di lavoro, e Rimuovi voce per rimuovere la voce dal foglio di lavoro. +Le impostazioni dei caratteri e l'allineamento delle voci del foglio di lavoro possono essere modificati usando una barra posta sopra il foglio di lavoro. + + Impostazioni + Il menu Impostazioni ti permette di modificare alcune impostazioni dell'aspetto del foglio di lavoro corrente. + + + Scrittura usando &latex; + + Questa impostazione cambia il modo in cui i risultati sono mostrati. Se abilitata, i risultati sono passati al sistema &latex;, producendo formule eleganti. Ad esempio, 3*x^2*sqrt(2)*x+2/3 diventa + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Evidenziazione della sintassi + + L'evidenziazione della sintassi aumenta la leggibilità del codice, evidenziando con vari colori le parole chiave o le parentesi corrispondenti. + + + + Completamento delle parole + + Quando questa opzione è abilitata, premendo il tasto Tab &cantor; mostrerà i possibili completamenti per il comando che stai scrivendo. Se c'è solo una scelta possibile, il resto del comando sarà inserito automaticamente. + + + + Numeri di riga + + Questa impostazione controlla se ci dovrebbe essere un numero prima di ogni espressione. Ciò permette di richiamare i risultati più vecchi — ad esempio, in Maxima ciò viene fatto con il comando %O1. + + + + Anima foglio di lavoro + + Questa impostazione decide se usare diverse animazioni per evidenziare le modifiche ad un foglio di lavoro. + + + + + + + + + +Guida ai comandi + + +La finestra principale di &cantor; + +&cantor; ha le voci di menu comuni di &kde;; per maggiori informazioni, consulta il capitolo Menu dei «Fondamentali di &kde;». + +Voci di menu aggiuntive o particolari in &cantor;: + + +Il menu File + + + + &Ctrl;N File Nuovo +Crea un nuovo foglio di lavoro con il backend predefinito. + + +File Nuovo Backend +Crea un nuovo foglio di lavoro con il backend scelto. + + +File Scarica fogli di lavoro d'esempio +Apre la finestra di dialogo per scaricare esempi inviati da altri utenti di &cantor; usando GetHotNewStuff. + + +File Apri esempio +Apre la finestra di dialogo per caricare un esempio. Gli esempi devono essere prima scaricati usando File Scarica fogli di lavoro d'esempio. + + +File Salva come testo semplice +Permette di salvare il foglio di lavoro corrente come documento di testo semplice. + + +File Esporta come LaTeX +Permette di salvare il foglio di lavoro corrente come documento &latex;. + + +File Pubblica foglio di lavoro +Apre la finestra di dialogo per pubblicare il tuo foglio di lavoro corrente e renderlo disponibile ad altri utenti di &cantor; per mezzo di GetHotNewStuff. + + +File Avvia script +Permette di caricare ed eseguire script con il backend corrente. + + + + + + + +Il menu Visualizza + + + + &Ctrl;+ Visualizza Ingrandisci +Ingrandisce il foglio di lavoro corrente del 10%. + + + &Ctrl;- Visualizza Riduci +Riduce il foglio di lavoro corrente 10%. + + +Visualizza Mostra editor degli script +Apre la finestra per la modifica degli script per il backend corrente. + + +Visualizza Pannelli Aiuto +Mostra o nasconde la scheda Aiuto nella barra laterale. + + +Visualizza Pannelli Gestore variabili +Mostra o nasconde la scheda Gestore variabili nella barra laterale. + + + + + + +Il menu Foglio di lavoro + + + +Foglio di lavoro Valuta foglio di lavoro +Avvia la valutazione dell'intero foglio di lavoro. + + + &Shift;Invio Foglio di lavoro Vàluta voce +Avvia la valutazione della voce corrente. + + + &Ctrl;Invio Foglio di lavoro Inserisci voce di comando +Inserisce una nuova voce di comando sotto la posizione corrente del cursore. + + +Foglio di lavoro Inserisci voce di testo +Inserisce una nuova voce di testo sotto la posizione corrente del cursore. + + +Foglio di lavoro Inserisci immagine +Inserisce il modello di immagine sotto la posizione corrente del cursore. Dovrai fare clic col &RMB; sul modello per configurare i dettagli dell'immagine. + + +Foglio di lavoro Inserisci interruzione di pagina +Inserisce un'interruzione di pagina sotto la posizione corrente del cursore. + + + &Shift;Canc Foglio di lavoro Rimuovi la voce corrente +Rimuove la voce corrente dal foglio di lavoro. + + + + + + +Il menu Impostazioni +Questo menu contiene le voci standard del menu Impostazioni di &kde;, e le voci descritte nella sezione delle impostazioni. + + + +Il menu Aiuto +&help.menu.documentation; + + + + + +Guida di &cantor; allo sviluppatore + +Le funzionalità di &cantor; possono essere aumentate con estensioni. Puoi scrivere + + Backend: + + Un nuovo backend permette di usare l'interfaccia di &cantor; con un programma diverso. + + + + Assistenti: + + Gli assistenti forniscono finestra di dialogo per automatizzare operazioni comuni (tipo l'inserimento di una matrice o l'avvio di uno script). + + + + +Al momento, non c'è alcuna esercitazione per sviluppatori o documentazione della API, quindi se vuoi scrivere un'estensione dovrai leggere i sorgenti. Le definizioni di tutte le interfacce sono nella directory lib. Per alcuni esempi di implementazioni, guarda le estensioni fornite con &cantor;. + + + + +Domande e risposte +&reporting.bugs; &updating.documentation; + + La voce di menu Scrittura usando LaTeX non è disponibile + Non tutti i backend supportano tutte le opzioni. Nella versione corrente, &latex; è disponibile solo con i backend Maxima, Qalculate! e Sage. + + + Ho installato Sage/Maxima, ma il backend corrispondente non appare. + + Una possibile spiegazione è che &cantor; non ne ha trovato la posizione. Vai nella finestra di dialogo ImpostazioniConfigura &kappname;... e modifica il Percorso dell'applicazione. + + + + Che nome strano – cosa ha che fare con la matematica? + &cantor; è chiamato così in onore del matematico tedesco Georg Cantor, il creatore della teoria degli insiemi. + + + + + + +Riconoscimenti e licenza + +&cantor; +Copyright del programma 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Copyright della documentazione © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Traduzione italiana di Pino Toscano toscano.pino@tiscali.it +&underFDL; &underGPL; + + +Installazione + + +Come ottenere &cantor; +&install.intro.documentation; + + +Requisiti + +Per usare &cantor; hai bisogno di &kde; 4. Se vuoi il supporto alla scrittura elegante di formule, devi installare &cantor; e LibSpectre. Per usare i vari backend, i pacchetti matematici appropriati sono richiesti. + + + + + + + + + +Compilazione e installazione +&install.compile.documentation; + + +Configurazione + +A seconda del tuo sistema, potresti dover impostare i percorsi delle varie applicazioni usate da &cantor;. + + + + + +&documentation.index; +
    + + diff --git a/po/ja/cantor.po b/po/ja/cantor.po new file mode 100644 index 0000000..390fcbc --- /dev/null +++ b/po/ja/cantor.po @@ -0,0 +1,3064 @@ +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2009-05-18 00:19+0900\n" +"Last-Translator: Japanese KDE translation team \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "" diff --git a/po/kk/cantor.po b/po/kk/cantor.po new file mode 100644 index 0000000..6330fd0 --- /dev/null +++ b/po/kk/cantor.po @@ -0,0 +1,3332 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Sairan Kikkarin , 2012, 2013. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2013-11-01 23:02+0600\n" +"Last-Translator: Sairan Kikkarin \n" +"Language-Team: Kazakh \n" +"Language: kk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.2\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Сайран Киккарин" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sairan@computer.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Аялдау" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Бастау" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Тоқтату" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Нәтижені сақтау" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Жетеленген график сызу" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "График" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Өрнек:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Қосымша параметрлер:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&График" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Келтірілген" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Есептеу" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Дифферециалдау" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Айнымалы:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Еселігі: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Десте" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Дестені импорттау" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Дестесі:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Интегралды алу" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Төменгі шегі:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Жоғарғы шегі:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "анықталған интеграл" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "С&ызықтық алгебра" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Матрицаны құру" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Бағандар:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Жолдар:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Өзіндік мәндерін есептеу" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Матрица:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Өзіндік векторларын есептеу" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Матрицаны керілеу" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Екі-өлшемді график" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Айнымалы" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Атауы" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Минимум:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Максимум:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Үш-өлшемді график" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1-айнымалы" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2-айнымалы" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Скриптті жегу" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Теңеулерді шешу" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Теңеулер:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Айнымалылар:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Толығрақ %3 дегеннен " +"қараңыз
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Орындауыш тетігі:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Осы тетік әдетті болсын" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.python.org/2/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Графиктер құжатқа ендірілсін" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R скрипт файлы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Maxima қайда:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Графиктер құжатқа ендірілсін" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Сеанс басында автожегілетін скрипттер тізімі" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Қате: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Автожегілетін скрипттер" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to python command" +msgid "Path to luajit command" +msgstr "python командасының жолы" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R скрипт файлы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to python2 command:" +msgid "Path to luajit command:" +msgstr "python2 командасының жолы:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima деген символды және санды өрнектерімен айналысатын жүйе. Онымен " +"дифференциал, интеграл, Тейлор қатары, Лаплас түрлендіруі, қарапайым " +"дифференциалдық теңдеу, сызқтық теңеулер жүйесі, полином, жиын, тізім, " +"вектор, матрицалармен есеп шығаруға болады. Maxima нақты бөлшек, ұзындығы " +"қажетті бүтін сан және дәлдігі өзгермелі жылжымалы үтірлі сандарды " +"пайдаланып дәлдігі жоғары нәтижелер береді. Maxima екі-өлшемді, үш-өлшемді " +"графиктарды сызып бере алады." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima орындалатын файлының жолы" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Айнымалы басқаруын рұқсат ету" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Қате: Тым көп */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Қате: Тым көп /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Қате: ; алдында \" болу тиіс" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima десте файлы" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maxima жегу жаңылысы" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima қирады. Жаңадан бастап көреді..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima қысқа мерзімде екі мәрте қирады. Әрекет доғарылады" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Қате - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "Функция" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima қайда:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Графиктер құжатқа ендірілсін" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Cantor айнымалыларды құру/жоюды қадағаласын" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave деген, көбіненсе сандық есептерге арналған, жоғары- деңгейлі " +"программалау тілі.
    Ол көбінде Matlab тілімен үйлесімді, сызықтық және " +"сызықтық емес теңдеу және басқа да сандық есептердің шешімін ыңғайлы " +"командалық жолы интерфейсімен шығарып беретін тіл." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave орындалатын файлының жолы" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave скрипт файлы" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Синтаксис қатесі" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave қайда:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R скрипт файлы" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python деген тамаша, түрлі салада қолданатын программалау тіл. Ғылыми " +"программалауға арналған бірнеше Python дестелері бар.

    Осындағы тетік " +"Python 2-ні таниды.

    " + +#: backends/python3/python3backend.cpp:51 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/2/" + +#: backends/python3/python3backend.cpp:56 +#, fuzzy, kde-format +#| msgid "" +#| "

    Python is a remarkably powerful dynamic programming language that is " +#| "used in a wide variety of application domains. There are several Python " +#| "packages to scientific programming.

    This backend supports Python 2." +#| "

    " +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python деген тамаша, түрлі салада қолданатын программалау тіл. Ғылыми " +"программалауға арналған бірнеше Python дестелері бар.

    Осындағы тетік " +"Python 2-ні таниды.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - График диалогы" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Функциялар" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Атау" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Өрнек" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Қосу" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Өшіру" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Тізімді тазалау" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X айнымалысы" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Стилі" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Сызықтар" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Нүктелер" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Нүктелер мен сызықтар" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Шаршылар" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Гистограмма" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Баспалдақ" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Жапон шырағы" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Дақ нүктелер" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Тегістеу" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Жоқ" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Бірсарынды" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Натурал кубтық сплайн" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Безье" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Безье (бірсарынды)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Функция ауқымы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X ауқымы" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, fuzzy, kde-format +#| msgid "Sampling rate" +msgid "Sa&mpling rate" +msgstr "Дискреттеу жиілігі" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Step size" +msgid "Step si&ze" +msgstr "Қадамы" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Параметрлері" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Графиктің атауы" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-осін жарлығы" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-осін жарлығы" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Түсіндірменің орны" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Түсіндірмені жасыру" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Жоғары солда" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Жоғары оңда" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Төменгі солда" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Төменгі оңда" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Төменде" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Тыста" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Торы болсын" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Толық қоршау" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Түрлі-түсті" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Бірге көрсетілсін" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "x - логарифмдік" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "y - логарифмдік" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Файл параметрлері" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Графикті файлға сақтау" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Файл түрі" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Файл атауы бойынша" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! толып жатқан арзан калькуляторлардың бірі емес. Qalculate! " +"заманауи компьютерлердің асқан қуатын, интерфейсін, икемділігін толығымен " +"қолданатын бағдарлама. Qalculate! назарының ортасында кіріс өрнегі. " +"Математикалық өрнегіне әрбір санды бөлек енгізгеннің орына, оны есептейтін " +"(соңында өзгертуге келетін) өрнегін тікелей келтіруге болады. Өрнекті " +"талдауы икемді және қате қарсы нық болса да қате жіберсеңіз Qalculate! ол " +"туралы ескереді. Толық шешімі жоқ өрнектер қатеге әкелмейді. Qalculate! оны " +"мейілінше ықшамдатқан өрнегін қайтарып береді. Өрнек. сандар мен амалдардан " +"басқа. кез-келген айнымалы, бірлік, функциялар комбинациясынан тұра алады." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Өлшем біріліктері автоматты түрде аударыла ма және қалай аудалылады. Болса, " +"мәе лайықты (жазуы ең қысқа) СИ бірлігіне келтіріледі." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Тригонометриялық функциялардың әдетті бұрыш бірлігі." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Пайдаланатын сандар есеп негізі." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Нәтижесі ықшамдатылу не көбейткіштеріне жіктелу керегін ұйғару." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "Рационал сандар ондық, бөлшек, не аралас түрде көрсетуін ұйғару." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Ақырсыз ондық бөлшек дөңгелектеу орнына соңына үш нүктелеп (мыс., 2/3 " +"бөлшегі 0.666667 деп емес, 0.666666... деп) көрсетіледі. " + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"СИ жүйесінің ондық префикстерін пайдалану бола ма. Болмаса, мыңдық (кило-, " +"мили-) еместері (санти-, деци-, дека-, гекто-) атвоматты түрде қолданбайды." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Рұқсат етілсе, бөлудің орнына теріс дәреже қолданылады (мыс., 5/x^2 деген " +"5*x^-2 болады)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Сандар пішімі." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Рұқсат етілсе, график құжаттың құрамында көрсетіледі, әйтпесе - бөлек " +"терезеде." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "График түрлі-түсті болу-болмауын ұйғару." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Торды салу-салмауын ұйғару." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Графикті айнала толық қоршауын салу-салмауын ұйғару." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Сызықтар қалыңдығы (пиксел) ." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Графикте қолданатын интерполяция қадамдарының саны." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Графиктегі тегістеу әдісі." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Графиктің стилі ғой." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "График түсіндірмесінің орны." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate баса алмайды. Ggnuplot орнатылған ба?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "%1 жетіспейді" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 сан болу тиіс." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 бүтін сан болу тиіс." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 логикалық мән болу тиіс." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "%1 үшін жарамсыз параметрі: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "График командасында бірнеше өрнек (%1 және %2\")" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ҚАТЕ" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ЕСКЕРТУ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Былай аталған функция да, айнымалы да, бірлк те жоқ. " + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Фкнкция: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Графиктің интерфейсі" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Бір не бірнеше функцияны бірге қатар не бөлек терезелерде салу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "өрнек" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "параметр" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "мән" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "бүтін" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "логикалық мән" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "сан" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "әдетті: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Функцияның аты" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Атау жарлығы" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-осін жарлығы" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-осін жарлығы" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Суретті сақтайтын кескін. Бос болса сурет экрандағы терезеде көрсетіледі. " +"Егерде inline=true болса кескін бул параметрдің қатысуысз көрсетіледі." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Сақтайтын кескіннің түрі. Келесінің бірі: auto, png, ps, eps, latex, svg, " +"fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Түрлі-түсті болу үшін 'true' деп қойыңыз, әйтпесе - 'false' деп қойыңыз." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "x-тың минимумы" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "x-тың максимумы" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "x-осін логарифмдік қылу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "y-осін логарифмдік қылу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "x-осінің логарифмдік негізі." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "y-осінің логарифмдік негізі." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "График өрісін торлы қылу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Графиктің бүкіл жағынан қоршау салу (тек ось жақтарынан ғана емес)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Сызықтардың қалыңдығы." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Графиктің түсіндірмесін көрсететін орны. Келесінің бірі болу керек: none, " +"top_left, top_right, bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Графикті тегістеу әдісі. Келесінің бірі болу керек: none, unique, csplines, " +"bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Графиктің стилі. Келесінің бірі болу керек: lines, points, points_lines, " +"boxes, histogram, steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Екінші x - осі болсын" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Екінші y - осі болсын" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Жаңа терезені ашпай графикті бұрынғысына сала беру." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Интерполяция нүктелерінің аралығы. Оның қадамын да қараңыз." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Интерполяция нүктелерінің саны. Оның қадамын да қараңыз." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "x айнымалының атауы. Беймәлім айнымалы болу тиіс." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Анымалыларды файлға сақтау" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Анықталған айнымалыларды файлға сақтау. Оларды %1 деп қайта жүктеп алуға " +"болады." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "файл" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "файл: сақтайтын файлы" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Айнымалыларды қайта жүктеп алу" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Алдында %1 деп сақталған айнымалыларды файлдан қайта жүктеп алу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "файл: жүктеп алатын файлы" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Жалпы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Есеп жүйесі:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Бөлшек пішімі:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Ондық" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Нақты" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Бөлшекті" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Аралас" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Сандар пішімі:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Кәдімгі" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Инженерлік" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Нақты" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Ақырсыз тізбектерді белгілеу:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Рұқсат етілсін" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Барлық СИ префикстері:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Теріс дәрежелер:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Есептеу" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Лайықты СИ бірліктеріне келтіру:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Бұрыш бірлігі:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Радиан" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Градус" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Градиан" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Келтіру режімі:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Ықшамдату" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Көбейткіштерге жіктеу" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Графикті сызу" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Графиктерді бірге көрсету:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Түрлі-түсті графиктер:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Торды көрсету:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Толық қоршауы:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Сызықтар қалыңдығы:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Дискреттеу жиілігі:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Тегістеуі:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Натурал кубтық сплайн" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "График стилі:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Баспалдақ" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Түсіндірменің орны:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R деген статистикалық есеп пен графиктарды сызуға арналған программалаутіл " +"және орта. Ол S деген программалау тіл мен ортаға ұқсас.
    Ол, кеңейту " +"мүмкіндігі мол, көп статистикалық (сызықтық және сызықтық емес үлгілеу, " +"классикалық статистикалық сынақтар, уақыттық-тізбектік талдау, жіктеу, " +"шоғырландыру, ...) амалдарды жасау және графиктарды сызу құралы. S тілін " +"статистика саласында жиі қолданады. R деген оның еркін таратылатын жуықтауы." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "%1 файлын ашу қатесі" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R скрипт файлы" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Команданы талдау қатесі" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Файл таңдау диалогын қос түртіп ашу" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R файлдары (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage деген GPL лицензиялы, коды ашық, еркін математикалық бағдарлама жүйесі. " +"
    Ол бір қатар коды ашық математикалық дестелердің қуатын біріктіріп, " +"ортақ Python негізіндегі интерфейсті қамтамасыз етеді." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage орындалатын файлының жолы" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 дегеннің нәтижесі" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Соңғы шығысы: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python скрипт файлы\n" +"*.sage|Sage скрипт файлы" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Бұл өрнекті есептеу кезде Sage процесі қирады" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage процесі қирады" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Бұл өрнекті есептеу кезде Sage процесінен шығып кетті" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage процесінен шығып кетті" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage жегу жаңылысы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage қайда:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.5 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Ескерту: Осындағы тетігімен тек Scilab-тың 5.5 нұсқасы (не одан да " +"жаңасы) ғана істейді

    Scilab деген еркін таратылатын, көп-платформалық " +"санды есептеуіш десте және есеп шығаруға бағытталған жоғары-деңгейлі " +"программалау тілі..

    Scilab CeCILL лицензиясы бойынша (GPL-мен үйлесімді) " +"таратылады." + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"scilab-adv-cli командасының жолы(Ескерту: Scilab нұсқасы 5.4 не одан да жаңа " +"болу керек)" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.py|Python скрипт файлы\n" +"*.sage|Sage скрипт файлы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "scilab-adv-cli командасының жолы:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Мысалдарын жүктеп алу" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Мысалды &ашу" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor құжаты" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open image file" +msgid "Open file" +msgstr "Кескін файлды ашу" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Орындаушы тетігі жоқ

    \n" +"
    Амалдар:\n" +"
    • Баптау диалогындағы параметрлерін өзгерту;
    • Келесі " +"бағдарламалардың бірін орнату:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Қате" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "%1 сеансы" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Cantor бөлшегі табылмады." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Нәтижені сақтау" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Әдетте қолданатын тетігі " + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Әдетте LaTex пішімдеуін пайдалану" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Әдетте ситаксисін талдап бояулау" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Әдетте автотолықтыруын рұқсат ету" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Әдетте өрнектерді нөмірлеу " + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Әдетте құжат өзгерістерін анимациялау" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Назардағыдан төменгі өрнектеді автоматты түрде қайта есептеп шығу" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "%1 тетігі орнатылмаған" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"%1 орындауыш бағдарламаның бір мәселесі бар.\n" +"Баптауларыңызды тексеріңіз не керегін орнатыңыз.\n" +"Бұл құжатты тек қарай аласыз. " + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Жәй мәтінді сақтау" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "LaTeX-ке экспорттау" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Құжатты есептеу" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "LaTeX көмегімен көрсетілсін" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Ситаксисін талдап бояулау" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Автотолықтыру" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Жол нөмірлеуі" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Құжатты анимациялау" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Орындауыш тетігін қайта жегу" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Жазуды есептеу" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Команда жазуын енгізу" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Мәтін жазуын енгізу" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Команда жазуын енгізу" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Latex жазуын енгізу" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Бет үзілімін енгізу" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Кескінді енгізу" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Назардағы жазуды өшіру" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "%1 анықтамасын көрсету" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Скрипт редакторы көрсетілсін" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Автотолықтырулар көрсетілсін" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2012 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save as" +msgstr "Нәтижені сақтау" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Орындауыш тетігін қайта жегу" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Есепті үзу" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Есептеу..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Дайын" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Сеанс қатесі: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Сеансты бастау күйіне келтірілді" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Сеансты бастау күйіне келтіру" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Аталмаған" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" +"Назардағы құжатты жариялап ашық веб -серверге жүктеп беруді қалайсыз ба?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Сұрақ - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Құжат сақталмаған. Жүктеп берудің алдында сақтау керек." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Ескерту - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Бұл тетік скрипттерді қолдамайды." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Өзгерту" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Көрініс" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "Құ&жат" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Файл" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Жаңа" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Панельдер" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Баптау" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Дайын" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X ауқымы" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X ауқымы" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X ауқымы" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Мәтіннің &түсі..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Қаріп" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "Қал&ың" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "Көл&беу" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Есеп үзілді" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Іздеу панелі" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Мынаны табу:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Келесі" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Алдыңғысы" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Нені ауыстыру:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Ауыстыру" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "&Бүкілін Ауыстыру" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Мынада іздеу:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Үлкен-кішілігін &ескеріп" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Кескінді баптау" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Кескінді енгізу үшін оң батырманы түртіңіз" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "%1 кескіні жүктелмеді " + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Кескін параметрлері" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Ашу" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Көрсететін өлшемі" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Ені" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Биіктігі" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Алдыңғысы" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Өлшемін басу" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Экран өлшемі қолдалылсын" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(авто)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "пкс" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Кескін файлды ашу" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "LaTeX кодын көрсету" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Орындалатын latex файлдың жолы" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Орындалатын dvips файлдың жолы" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Атауы" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Мәні" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Мынадан:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Мынаған дейін:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Негізгі атауы" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Абциссасы" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ординатасы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Графиктің атауы:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Математикалық қолданбаларға KDE-нің интерфейсі" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2012 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Scilab and Python backends" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Scilab мен Python тетіктері" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra орындауышы бағдарламасы" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave орындауышы бағдарламасы" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Интерфейсі" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Осы пайдалансын" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Ашатын құжат" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "%1 файлын ашу қатесі" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Бет үзілімі ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE математика құралы" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Аты:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Мәні:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Жаңа айнымалыны қосу" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Айнымалыларды жүктеп алу" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Айнымалыларды сақтау" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Айнымалыларды тазалау" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Бүкіл айнымалыларды өшірмексіз бе?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Құптау - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Loading failed." +msgid "Load file" +msgstr "Жүктеу жаңылысы." + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Нәтижені өшіру" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"KDE-нің мәтін өңдегіш компоненті табылмады;\n" +"KDE орнатуын түгелдеңіз" + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Скрипт редакторы" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Скрипт редакторы - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Табылмады" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Басына жетті" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Соңына жетті" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 рет ауыстырылды" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Командалар" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Нәтижелер" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Қателер" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Мәтін" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX коды" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Әдетті тетігі:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Рұқсат етілсе, Cantor автоматты түрде назардағынан төменгі жазуларын есептеп " +"шығады." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Жазуларды қайта автоесептелсін" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Әдетте" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "LaTeX пішімдеуі пайдалансын" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Ситаксисін талдап бояулау болсын" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Автотолықтыру болсын" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Жол нөмірлеуі болсын" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Құжат анимациясы болсын" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Кескіндеп көрсету" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Кодын көрсету" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Eps файлы кескінделмеді. Қосымша дестелер қажеті мүмкін" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "%1 файлы жазылмады." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "%1 файлы жазылмады." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "%1 файлын сақтау қатесі" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "latex.xsl стиль кестесін жүктеу қатесі" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Команда жазуы" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Мәтін жазуы" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Команда жазуын енгізу" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Latex жазуы" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Кескін" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Бет үзілімі" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Мәтін жазуын енгізу" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "Алдына енгізу" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Latex жазуын енгізу" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Мәтіннің &түсі..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Түсі" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Мәтінді &белгілеу..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Қаріп" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Қаріп өл&шемі" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "Қал&ың" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "Көл&беу" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Асты сызылған" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Сызып тастаған" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Солға туралау" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Солға" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Ортаға туралау" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Ортаға" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Оңға туралау" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Оңға" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Ені бойынша" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Ені бойынша" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Жазуды өшіру" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Жазуды сүйреу" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "Бұл файлды құрған бағдарламасы орнатылмаған. Оған керегі: %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Кұжатты жариялау" + +#~ msgid "Waiting for Image..." +#~ msgstr "Кескінді күту" + +#~ msgid "Insert" +#~ msgstr "Ендіру" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "%1 файлы ашылмады: Беймәлім MIME түрі" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX құжаты" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor құжаты" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Cantor R тетігінің орындаушы сервері" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Қолдануы: saveVariables файлы" + +#~ msgid "Saving failed." +#~ msgstr "Сақтау жаңылысы." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Қолдануы: loadVariables файлы" + +#~ msgid "Loading failed." +#~ msgstr "Жүктеу жаңылысы." + +#, fuzzy +#~| msgid "(C) 2009-2012 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2012 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "python командасының жолы" + +#~ msgid "Cantor Server for R" +#~ msgstr "R Cantor сервері" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Кескінді де экспорт етуді қалайсыз ба?" + +#~ msgid "Path to python2 command:" +#~ msgstr "python2 командасының жолы:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Айнымалы басқаруы болсын" + +#~ msgid "Could not start the server." +#~ msgstr "Сервері жегілмеді." + +#~ msgid "Pause Animation" +#~ msgstr "Анимацияны аялдату" + +#~ msgid "Start Animation" +#~ msgstr "Анамацияны бастау" + +#~ msgid "Restart Animation" +#~ msgstr "Анамацияны жаңадан бастау" + +#~ msgid "Append Command Entry" +#~ msgstr "Команда жазуын жалғау" + +#~ msgid "Append Text Entry" +#~ msgstr "Мәтін жазуын жалғау" + +#~ msgid "Append Latex Entry" +#~ msgstr "Latex жазуын жалғау" + +#~ msgid "Append Image" +#~ msgstr "Кескінді жалғау" + +#~ msgid "Append Page Break" +#~ msgstr "Бет үзілімін жалғау" + +#~ msgid "Other" +#~ msgstr "Басқа" + +#~ msgid "And %1 more..." +#~ msgstr "Және басқа %1..." + +#~ msgid "Main Toolbar" +#~ msgstr "Негізгі құралдар" + +#~ msgid "Completion Style:" +#~ msgstr "Автотолықтыру стилі:" + +#~ msgid "Popup" +#~ msgstr "Қалқымалы" + +#~ msgid "The style used for Completion" +#~ msgstr "Қолданатын автотолықтыру стилі" diff --git a/po/ko/cantor.po b/po/ko/cantor.po new file mode 100644 index 0000000..f46590a --- /dev/null +++ b/po/ko/cantor.po @@ -0,0 +1,3240 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Shinjo Park , 2011. +# Shinjo Park , 2011, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2015-01-18 01:21+0900\n" +"Last-Translator: Shinjo Park \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Shinjo Park" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde@peremen.name" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "일시 정지" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "시작" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "정지" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "결과 저장" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "고급 그래프 그리기" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "그리기" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "수식:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "추가 옵션:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "그리기(&P)" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "옵션 활성화됨" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "계산(&C)" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "미분" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "변수:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "횟수: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "적분" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "최솟값:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "최댓값:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "정적분" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "선형 대수(&L)" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "행렬 생성" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "열:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "행:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "고유값 계산" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "행렬:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "고유벡터 계산" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "역행렬 계산" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2차원으로 그리기" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "변수" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "이름" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "최솟값:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "최댓값:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3차원으로 그리기" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1번째 변수" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2번째 변수" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "스크립트 실행" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "식 풀기" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "수식:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "변수:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    더 많은 정보를 보려면 %3" +"을(를) 보십시오
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "사용할 백엔드 선택:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "기본 백엔드로 사용하기" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "워크시트에 그래프 통합하기" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R 스크립트 파일" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Maxima 경로:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "워크시트에 그래프 통합하기" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "세션을 시작할 때 자동으로 실행할 스크립트 목록" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "오류: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "자동 실행할 스크립트" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command" +msgstr "Maxima 경로:" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R 스크립트 파일" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command:" +msgstr "Maxima 경로:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima는 미분, 적분, 테일러 급수, 라플라스 변환, 미분 방정식, 선형 방정식의 " +"계, 다항식, 집합, 목록, 행렬, 텐서를 지원하는 기호 및 수치 수식 처리 시스템입" +"니다. Maxima는 정확한 분수, 고정밀 정수, 가변 정밀도 부동 소수점을 사용하여 " +"정밀도 높은 결과를 반환합니다. Maxima는 2차원과 3차원 그래프를 그릴 수 있습니" +"다." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima 실행 파일의 경로" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima 배치 파일" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maxima를 시작할 수 없음" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima가 충돌함. 다시 시작하는 중..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima가 짧은 시간 동안 두 번 충돌했습니다. 재시작을 중단합니다" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "오류 - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "function" +msgstr "수식:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima 경로:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "워크시트에 그래프 통합하기" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave는 수치 계산을 위한 고급 언어입니다.
    수치 선형 및 비선형 문제" +"를 풀기 위한 명령행 인터페이스를 제공하며, 다른 수학 계산은 Matlab과 호환되" +"는 언어를 사용합니다." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave 실행 파일의 경로" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave 스크립트 파일" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "문법 오류" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave 경로:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R 스크립트 파일" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "Functions" +msgstr "수식:" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Expression" +msgstr "수식:" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "추가" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "삭제" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, fuzzy, kde-format +#| msgid "Clear Variables" +msgid "Clear List" +msgstr "변수 삭제" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, fuzzy, kde-format +#| msgid "Variable" +msgid "X variable" +msgstr "변수" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "없음" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, fuzzy, kde-format +#| msgid "Option active" +msgid "Options" +msgstr "옵션 활성화됨" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, fuzzy, kde-format +#| msgid "Plot title:" +msgid "Plot title" +msgstr "그래프 제목:" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "expression" +msgstr "수식:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, fuzzy, kde-format +#| msgid "Completion" +msgid "option" +msgstr "완성" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, fuzzy, kde-format +#| msgctxt "@title:column" +#| msgid "Value" +msgid "value" +msgstr "값" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, fuzzy, kde-format +#| msgid "Integrate" +msgid "integer" +msgstr "적분" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, fuzzy, kde-format +#| msgid "Line Numbers" +msgid "number" +msgstr "줄 번호" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, fuzzy, kde-format +#| msgid "Defaults" +msgid "default: %1" +msgstr "기본값" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load variables from a file" +msgstr "변수 불러오기" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "일반" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Precision" +msgstr "수식:" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, fuzzy, kde-format +#| msgid "Evaluate Entry" +msgid "Evaluate" +msgstr "항목 계산하기" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, fuzzy, kde-format +#| msgid "Plot" +msgid "Plotting" +msgstr "그리기" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show grid:" +msgstr "코드 보기" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, fuzzy, kde-format +#| msgid "Plot title:" +msgid "Plot Style:" +msgstr "그래프 제목:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R은 통계 계산과 그래픽을 위한 언어 환경으로 S 언어 및 환경과 유사합니다.
    다양한 통계(선형 및 비선형 모델링, 고전 통계학적 시험, 시계열 분석, 분류, 군" +"집, ...) 및 그래픽 기능을 제공하며, 여러 단계로 확장할 수 있습니다. S 언어는 " +"통계 계산에 자주 사용되며, R은 오픈 소스로 이러한 기능을 제공합니다." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "파일 %1 열기 오류" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R 스크립트 파일" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "명령 처리 중 오류 발생" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "파일 선택 대화 상자를 열려면 두 번 누르십시오" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R 원본 코드 (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage는 GPL로 배포되는 오픈소스 수학 소프트웨어 시스템입니다.
    많은 오픈 소" +"스 패키지의 능력을 파이썬 인터페이스를 기반으로 결합합니다." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage 실행 파일 경로" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1의 결과" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"마지막 출력:\n" +"%2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|파이썬 스크립트\n" +"*.sage|Sage 스크립트" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "이 식을 처리하는 중 Sage에서 오류 발생" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage 프로세스 충돌" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "이 식을 처리하는 중 Sage 프로세스가 종료되었습니다" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage 프로세스 종료됨" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage를 시작할 수 없음" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage 경로:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.py|파이썬 스크립트\n" +"*.sage|Sage 스크립트" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "예제 워크시트 다운로드" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "예제 열기(&O)" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor 워크시트" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "&Open Example" +msgid "Open file" +msgstr "예제 열기(&O)" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    백엔드를 찾을 수 없음

    \n" +"
    다음을 시도해 보십시오:\n" +"
    • 설정 대화 상자의 설정 변경
    • 다음 중 하나 이상의 패키지 설" +"치:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "오류" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "세션 %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Cantor 부분을 찾을 수 없습니다." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "결과 저장" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "기본으로 사용할 백엔드" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "기본으로 조판 사용하기" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "기본으로 구문 강조하기" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "기본으로 자동 완성 사용하기" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "기본으로 식에 번호 붙이기" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "자동으로 아래에 있는 식 다시 계산하기" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "백엔드 %1이(가) 설치되지 않음" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"%1 백엔드에 문제가 있습니다.\n" +"설정을 확인하고 필요한 패키지를 설치하십시오.\n" +"이 워크시트를 볼 수만 있습니다." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, fuzzy, kde-format +#| msgid "Export to LaTex" +msgid "Export to LaTeX" +msgstr "LaTeX로 내보내기" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "워크시트 계산하기" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "LaTeX 조판" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "문법 강조" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "완성" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "줄 번호" + +#: cantor_part.cpp:270 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Animate Worksheet" +msgstr "워크시트 계산하기" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "백엔드 다시 시작" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "항목 계산하기" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "명령 항목 삽입" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "텍스트 항목 삽입" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "명령 항목 삽입" + +#: cantor_part.cpp:307 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Latex Entry" +msgstr "텍스트 항목 삽입" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "현재 항목 삭제" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "%1 도움말 보기" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "스크립트 편집기 보이기" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "자동 완성 보이기" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2010 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2010 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save as" +msgstr "결과 저장" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "백엔드 다시 시작" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "중지" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "계산 중..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "준비" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "세션 오류: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "초기화 완료" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "세션 초기화 중" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "이름 없음" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "현재 워크시트를 공개 웹 서버에 업로드하시겠습니까?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "질문 - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "이 워크시트를 업로드하기 전에 저장해야 합니다." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "경고 - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "이 백엔드는 스크립트를 지원하지 않습니다." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "보기(&V)" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "워크시트(&W)" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "파일(&F)" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "새로 만들기(&N)" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "패널" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "설정(&S)" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "준비" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgid "Text Entry" +msgid "Text Color" +msgstr "텍스트 항목" + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "글꼴(&F)" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "중지됨" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot load image %1" +msgstr "파일 %1에 쓸 수 없습니다." + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, fuzzy, kde-format +#| msgid "&Settings" +msgid "Image Settings" +msgstr "설정(&S)" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, fuzzy, kde-format +#| msgid "x" +msgid "px" +msgstr "x" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show LaTeX code" +msgstr "코드 보기" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "latex 실행 파일 경로" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "dvips 실행 파일 경로" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "이름" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "값" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "시작:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "끝:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "주 제목" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "가로축" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "세로축" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "그래프 제목:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE 수학 프로그램 프론트엔드" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2010 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2010 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Octave backend" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Octave 백엔드" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra 백엔드" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave 백엔드" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, fuzzy, kde-format +#| msgid "Integrate" +msgid "Interface" +msgstr "적분" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "이 백엔드 사용하기" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "열 문서" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "파일 %1 열기 오류" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE 수학 도구" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "이름:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "값:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "새 변수 추가" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "변수 불러오기" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "변수 저장" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "변수 삭제" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "모든 변수를 삭제하시겠습니까?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "확인 - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load file" +msgstr "변수 불러오기" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "결과 삭제" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"KDE 텍스트 편집기 구성 요소를 찾을 수 없습니다.\n" +"KDE 설치를 확인하십시오." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "스크립트 편집기" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "스크립트 편집기 - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Command Entry" +msgid "Commands" +msgstr "명령 항목" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Result" +msgid "Results" +msgstr "결과" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Error" +msgid "Errors" +msgstr "오류" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "기본 백엔드:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"이 옵션을 사용하면 Cantor에서는 현재 항목 아래의 항목을 자동으로 계산합니다." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "자동으로 항목 계산하기" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "기본값" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, fuzzy, kde-format +#| msgid "Enable LaTex Typesetting" +msgid "Enable LaTeX Typesetting" +msgstr "LaTeX 조판 사용하기" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "문법 강조 사용하기" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "자동 완성 사용하기" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "줄 번호 보이기" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Enable Worksheet Animations" +msgstr "워크시트 계산하기" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "그림 보기" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "코드 보기" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "EPS 파일을 그릴 수 없습니다. 추가 패키지가 필요합니다." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "파일 %1에 쓸 수 없습니다." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "파일 %1에 쓸 수 없습니다." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "파일 %1 저장 오류" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "latex.xsl 스타일시트를 불러올 수 없음" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "명령 항목" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "텍스트 항목" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "명령 항목 삽입" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, fuzzy, kde-format +#| msgid "Text Entry" +msgid "LaTeX Entry" +msgstr "텍스트 항목" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, fuzzy, kde-format +#| msgid "Remove Entry" +msgid "Image" +msgstr "항목 삭제" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "텍스트 항목 삽입" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Text Entry Before" +msgid "Insert Entry Before" +msgstr "이전에 텍스트 항목 삽입" + +#: worksheet.cpp:1264 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert LaTeX Entry" +msgstr "텍스트 항목 삽입" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "글꼴(&F)" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, fuzzy, kde-format +#| msgid "Inline" +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "인라인" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "가운데" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "항목 삭제" + +#: worksheetentry.cpp:707 +#, fuzzy, kde-format +#| msgid "Remove Entry" +msgid "Drag Entry" +msgstr "항목 삭제" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "이 파일을 생성할 수 있는 백엔드가 설치되어 있지 않습니다. %1이(가) 필요합" +#~ "니다" + +#~ msgid "Publish Worksheet" +#~ msgstr "워크시트 게시하기" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert" +#~ msgstr "항목 삽입" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "파일 %1을(를) 열 수 없음: 알 수 없는 MIME 형식" + +#, fuzzy +#~| msgid "*.tex|LaTex Document" +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX 문서" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor 워크시트" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Cantor R 백엔드 서버" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#, fuzzy +#~| msgid "Load Variables" +#~ msgid "Usage: loadVariables file" +#~ msgstr "변수 불러오기" + +#, fuzzy +#~| msgid "Load Variables" +#~ msgid "Loading failed." +#~ msgstr "변수 불러오기" + +#, fuzzy +#~| msgid "(C) 2009-2010 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2010 Alexander Rieder" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor R 서버" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "그림도 같이 내보내시겠습니까?" diff --git a/po/lt/cantor.po b/po/lt/cantor.po new file mode 100644 index 0000000..b5d5d46 --- /dev/null +++ b/po/lt/cantor.po @@ -0,0 +1,3112 @@ +# Lithuanian translations for cantor package. +# This file is distributed under the same license as the cantor package. +# +# Remigijus Jarmalavičius , 2011. +# Mindaugas Baranauskas , 2017. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2017-06-25 15:07+0200\n" +"Last-Translator: Mindaugas Baranauskas \n" +"Language-Team: Lithuanian \n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : n%10>=2 && (n%100<10 || n" +"%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3);\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Andrius Štikonas" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "andrius@stikonas.eu" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Įrašyti rezultatą" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Išraiška:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Skaičiuoti" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Diferencijuoti" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Kintamasis:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integruoti" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Apatinė riba:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Viršutinė riba:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "apibrėžtinis integralas" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Tiesinė algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Sukurti matricą" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Stulpeliai:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Eilutės:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Skaičiuoti tikrines vertes" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrica:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Skaičiuoti tikrinius vektorius" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Atvirkštinė matrica" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Kintamasis" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Pavadinimas" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimumas" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimumas" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Pirmas kintamasis" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Antras kintamasis" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Paleisti scenarijų" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Spręsti lygtis" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Lygtys:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Kintamieji:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R scenarijaus failas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Klaida: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R scenarijaus failas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Klaida: Per daug */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Klaida: Per daug /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Klaida – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkcija" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave scenarijaus failas" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Sintaksės klaida" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R scenarijaus failas" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkcijos" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Pridėti" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Pašalinti" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Išvalyti sąrašą" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stilius" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linijos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Taškai" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Taškai ir linijos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Failo tipas" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "KLAIDA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ĮSPĖJIMAS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkcija: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "failas" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Bendri" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Kampo vienetas:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianai" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Laipsniai" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradianai" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Prastinti" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Rodyti tinklelį:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Grafiko stilius:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Klaida atidarant failą %1" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R scenarijaus failas" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "*.R|R scenarijaus failas" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "*.R|R scenarijaus failas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Atverti pavyzdį" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "&Open Example" +msgid "Open file" +msgstr "&Atverti pavyzdį" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Klaida" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesija %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Įrašyti rezultatą" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Eksportuoti į LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Sintaksės paryškinimas" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Eilučių numeriai" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2012 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save as" +msgstr "Įrašyti rezultatą" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Skaičiuojama..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Pasiruošęs" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sesijos klaida: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Keisti" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Rodymas" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Failas" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Naujas" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Skydeliai" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Nuostatos" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Pasiruošęs" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Teksto &spalva..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "Š&riftas" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Ieškoti:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Kitas" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Ankstesnis" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Pakeisti:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Pakeisti" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Pakeisti &viską" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Konfigūruoti paveikslėlį" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Paveikslėlio nuostatos" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Atverti" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Rodymo dydis" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Plotis" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Aukštis" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Ankstesnis" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Spausdinimo dydis" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Rodyti LaTeX kodą" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Pavadinimas" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Reikšmė" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Nuo:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Iki:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2012 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Sąsaja" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Klaida atidarant failą %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Pridėti naują kintamąjį" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Įkelti kintamuosius" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Išsaugoti kintamuosius" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Išvalyti kintamuosius" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load file" +msgstr "Įkelti kintamuosius" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Pašalinti rezultatą" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nerasta" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Komandos" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Rezultatai" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Klaidos" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekstas" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX kodas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Rodyti kodą" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX įrašas" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Paveikslėlis" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Teksto &spalva..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Spalva" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "Š&riftas" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Šrifto &dydis" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Nepavyksta atverti %1 – nežinomas mimetipas" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX dokumentas" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#, fuzzy +#~| msgid "(C) 2009-2012 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2012 Alexander Rieder" diff --git a/po/lv/cantor.po b/po/lv/cantor.po new file mode 100644 index 0000000..da9b828 --- /dev/null +++ b/po/lv/cantor.po @@ -0,0 +1,3366 @@ +# translation of cantor.po to Latvian +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Einars Sprugis , 2010, 2011, 2012. +# Maris Nartiss , 2010. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2012-12-22 19:21+0200\n" +"Last-Translator: Einars Sprugis \n" +"Language-Team: Latvian \n" +"Language: lv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Einārs Sprūģis" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "einars8@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pauzēt" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Sākt" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Apturēt" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Saglabāt rezultātu" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Paplašinātā grafiku veidošana" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Grafiks" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Izteiksme:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Papildu opcijas:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "G&rafiks" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opcija aktīva" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Aprēķināt" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Diferencēt" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Mainīgais:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Reizes: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrēt" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Apakšējais limits:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Augšējais limits:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "noteiktais integrālis" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineārā algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Izveidot matricu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolonnas:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rindas:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Aprēķināt Eigena vērtības" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrica:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Aprēķināt Eigena vektorus" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertēt matricu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Grafiks 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Mainīgais" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nosaukums" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimums:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimums:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Grafiks 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. mainīgais" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. mainīgais" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Palaist skriptu" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Risināt vienādojumus" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Vienādojumi:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Mainīgie:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Skatiet %3, lai iegūtu " +"vairāk informācijas
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Izvēlieties izmantojamo aizmuguri:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Padarīt šo par noklusēto aizmuguri" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrēt grafikus darblapā" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R skripta fails" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Ceļš uz Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrēt grafikus darblapā" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Skriptu saraksts, kurus automātiski palaist sesijas sākumā" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Kļūda: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Automātiski palaižamie skripti" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to scilab-adv-cli command:" +msgid "Path to luajit command" +msgstr "Ceļš uz scilab-adv-cli komandu:" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R skripta fails" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to scilab-adv-cli command:" +msgid "Path to luajit command:" +msgstr "Ceļš uz scilab-adv-cli komandu:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima ir sistēma simbolisko un skaitlisko izteiksmju manipulācijai, " +"ieskaitot diferencēšanu, integrāciju, Tailora sērijas, Laplasa " +"pārveidojumus, parastos diferenciālvienādojumus, lineāro vienādojumu " +"sistēmas, polinomus, un tīklus, sarakstus, vektorus, matricas un tensorus. " +"Maxima sniegs augstas precizitātes skaitliskos rezultātus, izmantojot " +"precīzus daļskaitļus, patvaļīgas precizitātes veselos skaitļus un mainīgas " +"precizitātes peldošā punkta skaitļus. Maxima spēj zīmēt funkciju un datu " +"grafikus divās un arī trīs dimensijās. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Ceļš uz Maxima izpildfailu" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Ieslēgt mainīgo pārvaldīšanu" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Kļūda: pārāk daudz */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Kļūda: pārāk daudz /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Kļūda: pirms ; tika gaidīts \"" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima komandfails" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Neizdevās palaist Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima avarēja. Pārstartē..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima īsā laika periodā divreiz avarēja. Tiks pārtraukti mēģinājumi " +"programmu palaist" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Kļūda - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkcija" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Ceļš uz Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrēt grafikus darblapā" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Ļaut Cantor sekot mainīgo izveidošanai/iznīcināšanai" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave ir augsta līmeņa valoda, pirmkārt paredzēta skaitliskiem " +"aprēķiniem.
    Tā nodrošina ērtu komandrindas saskarni lineāru un " +"nelineāru problēmu skaitliskai risināšanai, kā arī citu skaitlisko " +"eksperimentu veikšanai, lietojot valodu, kas lielā mērā ir savietojama ar " +"Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Ceļš uz Octave izpildfailu" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave skripta fails" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Sintakses kļūda" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Ceļš uz Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R skripta fails" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor — grafika dialoglogs" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkcijas" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Nosaukums" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Izteiksme" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Pievienot" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Izņemt" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Notīrīt sarakstu" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Mainīgais x" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stils" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Rindas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkti" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkti un rindas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Rāmji" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogramma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Soļi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Svečturis" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Punkti" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Izgludināšana" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Nav" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotoniska" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturālie kubiskie splaini" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezjē" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezjē (monotoniska)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funkcijas diapozons" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X diapozons" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, fuzzy, kde-format +#| msgid "Sampling rate" +msgid "Sa&mpling rate" +msgstr "Diskretizācijas frekvence" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Step size" +msgid "Step si&ze" +msgstr "Soļa izmērs" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opcijas" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Grafika nosaukums" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X ass etiķete" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y ass etiķete" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Leģendas novietojums" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Paslēpt leģendu" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Augša pa kreisi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Augšā pa labi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Apakšā pa kreisi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Apakšā pa labi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Zem" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Ārpusē" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Rādīt tīklojumu" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Rādīt pilnu robežu" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Lietot krāsas" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Rādīt iekļautajā" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmiska x skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmiska y skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Faila opcijas" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Saglabāt grafiku failā" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Faila tips" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Noteikt no faila nosaukuma" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! nav vienkārša programmatūras kopija lētākajiem pieejamiem " +"kalkulatoriem. Qalculate! mērķis ir izmantot moderno datoru izcilo saskarni, " +"jaudu un elastību. Qalculate! uzmanības centrā ir izteiksme. Tā vietā, lai " +"ievadītu matemātiskās izteiksmes katru skaitli atsevišķi, jūs varat tieši " +"ierakstīt visu izteiksmi un vēlāk to modificēt. Izteikmju interpretācija ir " +"elastīga un noturīga pret kļūdām, bet ja tomēr izdarīsit kaut ko nepareizu, " +"Qalculate! jums to pavēstīs. Pilnībā neatrisināmas izteiksmes tomēr nav " +"kļūdas. Qalculate! tās pēc iespējas vienkāršos un atbildi sniegs izteiksmes " +"veidā. Papildus skaitļiem un aritmētiskajām darbībām, izteiksme jebkādās " +"kombinācijās var saturēt mainīgos, vienības un funkcijas." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Vai un kā vienības tiks automātiski pārveidotas. Ja patiess, pārveidot uz " +"piemērotākajām SI vienībām (mazāko vienību skaitu)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Noklusētā leņķa vienība trigonometriskajām funkcijām." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Parsēto un novērtēto skaitļu bāze." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Vai novērtēšanas rezultāts tiks vienkāršots vai sadalīts reizinātājos." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Vai racionāli skaitļi tiks attēloti kā skaitļi ar komatu, daļas veidā vai " +"kaut kas starp abiem minētajiem." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Ciparu virknes bezgalīgu turpināšanos skaitlī parādīt ar trim punktiem nevis " +"noapaļošanu (piem., 2/3 attēlot kā 0.666666... nevis 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Lietot visus decimālos SI prefiksus. Ja aplams, prefiksi, kuri tūkstoša " +"daudzkārtņi (centi, deci, deca, hecto), automātiski netiks izmantoti." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Ja patiess, dalīšanas vietā tiks izmantoti negatīvi kāpinātāji (piem., 5/x^2 " +"kļūs par 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Skaitļu attēlošana." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Ja patiess, grafiki tiks attēloti darblapas iekšpusē. Ja nē, tie parādīsies " +"atsevišķā logā." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Vai grafikos izmantot krāsas." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Vai grafikā zīmēt tīklojumu." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Vai ap grafiku zīmēt robežas." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Līniju platums, pikseļos." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Grafiku zīmēšanā izmantotais interpolācijas soļu skaits." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Grafikos lietotais izgludināšanas režīms." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Grafiku stils." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Leģendas novietojums grafikos." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate ziņo, ka drukāšana neizdevās. Vai gnuplot ir instalēts?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "trūkst %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 jābūt skaitlim." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 jābūt veselam skaitlim." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 jābūt loģiskajam mainīgajam (boolean)." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "nederīga opcija priekš %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" +"atrastas vairākas izteikmes vienā grafika veidošanas komandā (%1 un %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "KĻŪDA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "BRĪDINĀJUMS" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" +"Ar norādīto nosaukumu neeksistē neviena funkcija, mainīgais vai vienība." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkcija: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Grafiku veidošanas saskarne" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Izveido vienas vai vairāku funkciju grafikus iekļautā vai atsevišķā logā." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "izteiksme" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opcija" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "vērtība" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "vesels skaitlis" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "loģiskais mainīgais" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "skaitlis" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "noklusējumi: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Funkcijas nosaukums" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Nosaukuma etiķete" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x ass etiķete" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y ass etiķete" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Attēls, kurā saglabāt grafiku. Ja tukšs, grafiku parāda logā uz ekrāna. Ja " +"inline=true, attēls tiek parādīts neatkarīgi no šīs opcijas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Tips attēlam, kurā saglabāt. Viens no — auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Iestatiet uz 'true' krāsainam grafikam, 'false' — melnbaltam." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minimālā x ass vērtība." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Maksimālā x ass vērtība." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Vai x asij izmantot logaritmisku skalu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Vai y asij izmantot logaritmisku skalu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritma bāze x asij." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritma bāze y asij." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Vai grafikā rādīt tīklojumu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Vai ap grafiku no visām pusēm jāapņem robežām (ne tikai asis)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Līniju platums." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Vieta, kurā novietot grafika leģendu. Viena no — none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Grafika izgludināšana. Viens no — none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Grafika stils. Viens no — lines, points, points_lines, boxes, histogram, " +"steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Lietot skalu otrajai x asij." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Lietot skalu otrajai y asij." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Vai grafiku zīmēt iekļautā nevis jaunā logā." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Attālums starp diviem interpolācijas punktiem. Skatiet arī soļus." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Interpolācijas punktu skaits. Skatiet arī soli." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Mainīgā x nosaukums. Šim ir jābūt nezināmam mainīgajam" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Saglabāt mainīgos failā" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Saglabāt visus pašreiz definētos mainīgos failā. Tos var pārlādēt ar %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fails" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fails: fails, kurā saglabāt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Ielādēt mainīgos no faila" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Ielādēt mainīgos no faila, ko iepriekš izveidoja %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fails: ielādējamais fails" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Vispārīgi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Skaitļa bāze:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Daļas formāts:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimāls" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Precīzs" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Daļveida" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinēts" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Skaitļu attēlošana:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Parastā" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Zinātniskā" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precizitāte" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Norādīt bezgalīgas sērijas:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Ieslēgts" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Lietot visus SI prefiksus:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Lietot negatīvas eksponentes:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Novērtēt" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Pārveidot uz labākajām SI vienībām:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Leņķa vienība:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiāni" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Grādi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradiāni" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Strukturēšanas režīms:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Vienkāršot" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Sadalīt pirmreizinātājos" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Grafiku veidošana" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Grafikus attēlot iekļauti:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Krāsaini grafiki:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Rādīt tīklojumu:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Rādīt pilnas robežas:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Līniju platums:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, fuzzy, kde-format +#| msgid "Sampling rate" +msgid "Sampling rate:" +msgstr "Diskretizācijas frekvence" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Izgludināšanas režīms:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naturālie kubiskie splaini" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Grafika stils:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Soļi" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Leģendas novietojums:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R ir valoda un vide statistiskajiem aprēķiniem un grafikai, kas ir līdzīga " +"valodai un videi S.
    Tā nodrošina ar lielu dažādību statistisko (lineārā " +"un nelineārā modelēšana, klasiskie statistiskie testi, laika-sēriju analīze, " +"klasifikācija, kopošana, ...) un grafisko tehniku, un ir paplašināma. Valoda " +"S bieži tiek izmantots pētījumiem statistiskajā metodoloģijā, un R piedāvā " +"atvērtā pirmkoda ceļu, lai piedalītos šajās aktivitātēs." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Kļūda atverot failu %1" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R skripta fails" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Kļūda analizējot komandu" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dubultklikšķis, lai atvērtu failu izvēles dialoglogu" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R izejas faili (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage ir brīva, atvērtā pirmkoda matemātikas programmatūras sistēma, kas " +"licencēta zem GPL.
    Tā kombinē daudzu esošo atvērtā pirmkoda pakotņu " +"spēku vienkāršā Python bāzētā saskarnē." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Ceļš uz Sage izpildfailu" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 rezultāts" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Pēdējā izvade bija: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python skripta fails\n" +"*.sage|Sage skripta fails" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage process avarēja, aprēķinot šo izteiksmi" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage process avarēja" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage process izgāja, aprēķinot šo izteiksmi" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage process izgāja" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Neizdevās palaist Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Ceļš uz Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.4 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Brīdinājums: šī aizmugure darbojas tikai ar Scilab versiju 5.4 vai " +"augstāku

    Scilab ir brīvā programmatūra, starpplatformu skaitlisko " +"aprēķinu pakotne un augsta līmeņa, skaitliski orientēta programmēšanas " +"valoda.

    Scilab tiek izplatīta ar CeCILL licenci (savietojama ar GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Ceļš uz scilab-adv-cli komandu (brīdinājums: Scilab versijai jābūt augstākai " +"vai vienādai par versiju 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.py|Python skripta fails\n" +"*.sage|Sage skripta fails" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Ceļš uz scilab-adv-cli komandu:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Lejupielādēt piemēra darblapas" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Atvērt piemēru" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor darblapa" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open image file" +msgid "Open file" +msgstr "Atvērt attēla failu" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Aizmugure nav atrasta

    \n" +"
    Jūs varētu mēģināt:\n" +"
    • IzmainÄ«t iestatÄ«jumus konfiugrācijas dialoglogā;
    • " +"
    • Instalēt pakotni sekojoÅ¡ajai programmai:
    • %2
    " +msgstr[1] "" +"

    Aizmugure nav atrasta

    \n" +"
    Jūs varētu mēģināt:\n" +"
    • IzmainÄ«t iestatÄ«jumus konfiugrācijas dialoglogā;
    • " +"
    • Instalēt pakotnes vienai no sekojošām programmām:
    • %2
    " +msgstr[2] "" +"

    Aizmugure nav atrasta

    \n" +"
    Jūs varētu mēģināt:\n" +"
    • IzmainÄ«t iestatÄ«jumus konfiugrācijas dialoglogā;
    • " +"
    • Instalēt pakotnes vienai no sekojošām programmām:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Kļūda" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesija %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Neizdevās atrast Cantor daļu." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Saglabāt rezultātu" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Aizmugure, kas tiek izmantota pēc noklusējuma" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Izmantot salikumu pēc noklusējuma" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Izmantot sintakses izcelšanu pēc noklusējuma" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Ieslēgt pabeigšanas pēc noklusējuma" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Ieslēgt izteiksmju numurēšanu pēc noklusējuma" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animēt izmaiņas darblapā pēc noklusējuma" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automātiski pārrēķina ierakstus zem pašreizējā" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Aizmugure %1 nav instalēta" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Pastāv dažas problēmas ar %1 aizmuguri,\n" +"lūdzu, pārbaudiet jūsu konfigurāciju vai instalējiet vajadzīgās pakotnes.\n" +"Jūs varēsiet apskatīt tikai šo darblapu." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Saglabāt kā vienkāršu tekstu" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Eksportēt uz LaTex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Novērtēt darblapu" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Lietot salikumu, izmantojot LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Sintakses izcelšana" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Pabeigšana" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Rindu numuri" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animēt darblapu" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Pārstartēt aizmuguri" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Novērtēt ierakstu" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Ievietot komandas ierakstu" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Ievietot teksta ierakstu" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Ievietot komandas ierakstu" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Ievietot Latex ierakstu" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Ievietot lapas atdalītāju" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Ievietot attēlu" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Izņemt pašreizējo ierakstu" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Parādīt %1 palīdzību" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Rādīt skriptu redaktoru" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Rādīt pabeigšanu" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2012 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save as" +msgstr "Saglabāt rezultātu" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Pārstartēt aizmuguri" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Pārtraukums" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Aprēķina..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Gatavs" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sesijas kļūda: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicializācija pabeigta" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Inicializē sesiju" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Nenosaukts" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" +"Vai vēlaties augšupielādēt pašreizējo darblapu publiskā tīmekļa serverī?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Jautājums - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Darblapa nav saglabāta. Pirms augšupielādes jums vajadzētu to saglabāt." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Brīdinājums - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Aizmugure neatbalsta skriptus." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "R&ediģēt" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "S&kats" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Darblapa" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fails" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "Jau&ns" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneļi" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Iestatījumi" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Gatavs" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X diapozons" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X diapozons" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X diapozons" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Teksta &krāsa..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Fonts" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Trekns" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Slīpraksts" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Pārtraukts" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Meklēšanas josla" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Meklēt:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Nākamais" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Iepriekšējais" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Aizvietot:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Aizvietot" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Aizvietot &visus" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Meklēt:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Reģistrjutīgs" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Konfigurēt attēlu" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Labais klikšķis šeit, lai ievietotu attēlu" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Neizdevās ielādēt attēlu %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Attēla iestatījumi" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Atvērt" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Attēlojamais izmērs" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Platums" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Augstums" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Iepriekšējais" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Drukāšanas izmērs" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Lietot attēlojamo izmēru" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automātiski)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "piks." + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Atvērt attēla failu" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Parādīt LaTeX kodu" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Ceļš uz latex izpildfailu" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Ceļš uz dvips izpildfailu" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nosaukums" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Vērtība" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "No:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Līdz:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Galvenais nosaukums" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abscisu skala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinātu skala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Grafika nosaukums:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE priekšpuse matemātiskajām lietotnēm" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2012 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2012 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Scilab backend" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Scilab aizmugure" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra aizmugure" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave aizmugure" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfeiss" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Lietot šo aizmuguri" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Atveramais dokuments" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Kļūda atverot failu %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Lapas atdalītājs ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE veids, kā nodarboties ar matemātiku" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nosaukums:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "VērtÄ«ba:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Pievienot jaunu mainÄ«go" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Ielādēt mainÄ«gos" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Glabāt mainÄ«gos" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "NotÄ«rÄ«t mainÄ«gos" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Vai tiešām vēlaties izņemt visus mainÄ«gos?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Apstiprinājums - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Loading failed." +msgid "Load file" +msgstr "Ielādēšana neizdevās." + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Izņemt rezultātu" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"KDE teksta redaktora sastāvdaļa netika atrasta,\n" +"lÅ«dzu, pārbaudiet jÅ«su KDE instalāciju." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skriptu redaktors" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skriptu redaktors - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nav atrasts" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Sasniegts sākums" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Sasniegtas beigas" + +#: searchbar.cpp:259 +#, fuzzy, kde-format +#| msgid "Replaced %1 instances" +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Aizvietotas %1 instances" +msgstr[1] "Aizvietotas %1 instances" +msgstr[2] "Aizvietotas %1 instances" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Komandas" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Rezultāti" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Kļūdas" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Teksts" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX kods" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Noklusētā aizmugure:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Kad ieslēgts, Cantor automātiski pārrēķinās katru ierakstu, kas atrodas zem " +"paÅ¡reizējā." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Pārrēķināt ierakstus automātiski" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Noklusējumi" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Ieslēgt LaTeX salikumu" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Izmantot sintakses izcelÅ¡anu" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Ieslēgt pabeigÅ¡anu" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Ieslēgt rindu numurus" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Ieslēgt darblapu animācijas" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "ParādÄ«t renderēto" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "ParādÄ«t kodu" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Neizdevās izanalizēt Eps failu. Jums varētu bÅ«t vajadzÄ«gas papildu pakotnes" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Neizdevās rakstÄ«t failā %1." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Neizdevās rakstÄ«t failā %1." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Kļūda saglabājot failu %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Kļūda ielādējot latex.xsl stila lapu" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Komandas ieraksts" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Teksta ieraksts" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Ievietot komandas ierakstu" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX ieraksts" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Attēls" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Lapas atdalÄ«tājs" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Ievietot teksta ierakstu" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Text Entry Before" +msgid "Insert Entry Before" +msgstr "Teksta ieraksts pirms šī" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Ievietot LaTeX ierakstu" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Teksta &krāsa..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Krāsa" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Teksta &izcelÅ¡ana..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Fonts" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Fonta i&zmērs" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Trekns" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&SlÄ«praksts" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&PasvÄ«trots" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Pā&rsvÄ«rtots" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "IzlÄ«dzināt gar &kreiso" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Pa kreisi" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "IzlÄ«dzināt ¢rā" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centrā" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "IzlÄ«dzināt gar &labo" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Pa labi" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Izretināt" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "IzlÄ«dzināt" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Izņemt ierakstu" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Pārnest ierakstu" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Aizmugure, ar kuru fails tika Ä£enerēts, nav instalēta. Tam vajadzÄ«gs %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publicēt darblapu" + +#~ msgid "Waiting for Image..." +#~ msgstr "Gaida attēlu..." + +#~ msgid "Insert" +#~ msgstr "Ievietot" + +#~ msgid "Insert Before" +#~ msgstr "Ievietot pirms" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Neizdevās atvērt failu %1: nezināms MIME tips" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX dokuments" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor darblapa" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Serveris Cantor R aizmugurei" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "LietoÅ¡ana: saveVariables fails" + +#~ msgid "Saving failed." +#~ msgstr "Saglabāšana neizdevās." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "LietoÅ¡ana: loadVariables fails" + +#~ msgid "Loading failed." +#~ msgstr "Ielādēšana neizdevās." + +#, fuzzy +#~| msgid "(C) 2009-2012 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2012 Alexander Rieder" + +#, fuzzy +#~| msgid "Path to scilab-adv-cli command:" +#~ msgid "Path to python command" +#~ msgstr "Ceļš uz scilab-adv-cli komandu:" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor serveris priekÅ¡ R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Vai vēlaties eksportēt arÄ« attēlus?" + +#, fuzzy +#~| msgid "Path to scilab-adv-cli command:" +#~ msgid "Path to python2 command:" +#~ msgstr "Ceļš uz scilab-adv-cli komandu:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Ieslēgt mainÄ«go pārvaldīšanu" + +#~ msgid "Could not start the server." +#~ msgstr "Neizdevās palaist serveri." + +#~ msgid "Pause Animation" +#~ msgstr "Nopauzēt animāciju" + +#~ msgid "Start Animation" +#~ msgstr "Palaist animāciju" + +#~ msgid "Restart Animation" +#~ msgstr "Pārstartēt animāciju" + +#~ msgid "Append Command Entry" +#~ msgstr "Pievienot komandas ierakstu" + +#~ msgid "Append Text Entry" +#~ msgstr "Pievienot teksta ierakstu" + +#~ msgid "Append Latex Entry" +#~ msgstr "Pieviento Latex ierakstu" + +#~ msgid "Append Image" +#~ msgstr "Pievienot attēlu" + +#~ msgid "Append Page Break" +#~ msgstr "Pievienot lapas atdalÄ«tāju" + +#~ msgid "Other" +#~ msgstr "Cits" + +#~ msgid "And %1 more..." +#~ msgstr "Un %1 vairāk..." + +#~ msgid "Main Toolbar" +#~ msgstr "Galvenā rÄ«kjosla" + +#~ msgid "Completion Style:" +#~ msgstr "PabeigÅ¡anas stils:" + +#~ msgid "Popup" +#~ msgstr "IzlecoÅ¡s" + +#~ msgid "The style used for Completion" +#~ msgstr "PabeigÅ¡anai izmantojamais stils" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Ievietot komandas ierakstu pirms šī" + +#~ msgid "Command Entry Before" +#~ msgstr "Komandas ieraksts pirms šī" + +#~ msgid "GroupBox" +#~ msgstr "Grupas rāmis" + +#~ msgid "Help" +#~ msgstr "PalÄ«dzÄ«ba" + +#~ msgid "Show Help Panel" +#~ msgstr "ParādÄ«t palÄ«dzÄ«bas paneli" diff --git a/po/mr/cantor.po b/po/mr/cantor.po new file mode 100644 index 0000000..6c252ba --- /dev/null +++ b/po/mr/cantor.po @@ -0,0 +1,3090 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Chetan Khona , 2013. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2013-03-05 17:03+0530\n" +"Last-Translator: Chetan Khona \n" +"Language-Team: Marathi \n" +"Language: mr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n!=1);\n" +"X-Generator: Lokalize 1.5\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "चेतन खोना" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "chetan@kompkin.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "स्तब्ध करा" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "सुरु करा" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "थांबा" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, fuzzy, kde-format +msgid "&Calculate" +msgstr "गणना करा" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, fuzzy, kde-format +msgid "Variable:" +msgstr "परिवर्तनीय" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "खालील मर्यादा :" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "वरील मर्यादा :" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "स्तंभ:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "ओळ:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "परिवर्तनीय" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "नाव" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "किमान :" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "कमाल :" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "स्क्रिप्ट चालवा" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, fuzzy, kde-format +msgid "Variables:" +msgstr "व्हेरिएबल्स" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, fuzzy, kde-format +msgid "Error: %1" +msgstr "त्रुटी : %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "कार्य" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, fuzzy, kde-format +msgid "Syntax Error" +msgstr "रचना त्रुटी" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "कार्ये" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "शिर्षक" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "जोडा" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "काढून टाका" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "यादी रिकामी करा" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "शैली" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "ओळी" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, fuzzy, kde-format +msgid "Points" +msgstr "गुण" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "स्मूदिंग" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, fuzzy, kde-format +msgid "None" +msgstr "काही नाही" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "पर्याय" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "खाली" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, fuzzy, kde-format +msgid "File type" +msgstr "फाईल प्रकार :" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, fuzzy, kde-format +msgid "missing %1" +msgstr "आढळले नाही" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, fuzzy, kde-format +msgid "ERROR" +msgstr "त्रुटी" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, fuzzy, kde-format +msgid "WARNING" +msgstr "इशारा" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, fuzzy, kde-format +msgid "Function: %1" +msgstr "कार्य" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, fuzzy, kde-format +msgid "option" +msgstr "पर्याय" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "मूल्य" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, fuzzy, kde-format +msgid "boolean" +msgstr "बूलियन" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, fuzzy, kde-format +msgid "number" +msgstr "संख्या" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, fuzzy, kde-format +msgid "default: %1" +msgstr "मूलभूत" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, fuzzy, kde-format +msgid "file" +msgstr "फाईल" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, fuzzy, kde-format +msgid "General" +msgstr "सामान्य" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "काटेकोर" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, fuzzy, kde-format +msgid "Enabled" +msgstr "कार्यान्वित" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, fuzzy, kde-format +msgid "Degrees" +msgstr "अंश" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, fuzzy, kde-format +msgid "Show grid:" +msgstr "जाळे दर्शवा (&G)" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, fuzzy, kde-format +msgid "Error opening file %1" +msgstr "फाईल उघडतेवेळी त्रुटी." + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, fuzzy, kde-format +msgid "Open file" +msgstr "फाईल" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "त्रुटी" + +#: cantor.cpp:302 +#, fuzzy, kde-format +msgid "Session %1" +msgstr "सत्र" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "ओळ क्रमांक" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, fuzzy, kde-format +msgid "Show %1 Help" +msgstr "मदत दर्शवा" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "अडथळा" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "गणना करत आहे..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, fuzzy, kde-format +msgid "Ready" +msgstr "तयार" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, fuzzy, kde-format +msgid "Unnamed" +msgstr "निनावी" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, fuzzy, kde-format +msgid "&Edit" +msgstr "संपादन (&E)" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, fuzzy, kde-format +msgid "&View" +msgstr "दृश्य (&V)" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, fuzzy, kde-format +msgid "&File" +msgstr "फाईल (&F)" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, fuzzy, kde-format +msgid "&New" +msgstr "नवीन (&N)" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "पटल" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, fuzzy, kde-format +msgid "&Settings" +msgstr "संयोजना (&S)" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +msgid "Red" +msgstr "तयार" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "पाठ्य रंग (&C)..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "फॉन्ट (&F)" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "ठळक (&B)" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "तिरपे (&I)" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "शोधा :" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, fuzzy, kde-format +msgid "&Next" +msgstr "पुढील (&N)" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, fuzzy, kde-format +msgid "&Previous" +msgstr "मागील (&P)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, fuzzy, kde-format +msgid "Replace:" +msgstr "बदला" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "बदला (&R)" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "सर्व बदला (&A)" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, fuzzy, kde-format +msgid "Search in:" +msgstr "यामध्ये शोधा '%1'..." + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "आकार जुळवा (&M)" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "प्रतिमा संयोजना" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "उघडा" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, fuzzy, kde-format +msgid "Width" +msgstr "रुंदी" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "उंची" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +msgid "Preview" +msgstr "मागील (&P)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, fuzzy, kde-format +msgid "Print Size" +msgstr "छपाई आकार (&N):" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, fuzzy, kde-format +msgid "(auto)" +msgstr "स्वयंचलित" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "नाव" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "मूल्य" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, fuzzy, kde-format +msgid "From:" +msgstr "पासून :" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, fuzzy, kde-format +msgid "To:" +msgstr "पर्यंत :" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "एलैक्स पोल गोन्झालेझ" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "दुवा" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "उघडण्याचा दस्तऐवज" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +msgid "Couldn't open the file %1" +msgstr "फाईल उघडतेवेळी त्रुटी." + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, fuzzy, kde-format +msgid "Name:" +msgstr "नाव :" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, fuzzy, kde-format +msgid "Value:" +msgstr "मूल्य :" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +msgid "Load file" +msgstr "%1 दाखल करता आली नाही" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:59 +#, fuzzy, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"केडीई पाठ्य-संपादक घटक आढळला नाही.\n" +"कृपया तुमचे केडीई प्रतिष्ठापन तपासा." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, fuzzy, kde-format +msgid "Not found" +msgstr "सापडले नाही" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "आदेश" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "त्रुटी" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, fuzzy, kde-format +msgid "Text" +msgstr "मजकूर" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, fuzzy, kde-format +msgid "Defaults" +msgstr "मूलभूत (&D)" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "प्रतिमा" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "पाठ्य रंग (&C)..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "रंग" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "पाठ्य ठळक करा (&H)..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "फॉन्ट (&F)" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "फॉन्ट आकार (&S)" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "ठळक (&B)" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "तिरपे (&I)" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "अधोरेखन (&U)" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "खोडा (&S)" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "डावीकडे स्थीत करा (&L)" + +#: worksheet.cpp:1410 +#, fuzzy, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Left" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "केंद्राकडे स्थीत करा (&C)" + +#: worksheet.cpp:1422 +#, fuzzy, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "केंद्र" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "उजवीकडे स्थीत करा (&R)" + +#: worksheet.cpp:1434 +#, fuzzy, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Right" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "मूलभूत स्वीकारा(&J)" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "मूलभूत स्वीकारा" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "नोंद काढून टाका" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "" + +#, fuzzy +#~ msgid "Insert" +#~ msgstr "अंतर्भूत करा" + +#, fuzzy +#~ msgid "Saving failed." +#~ msgstr "%1 साठवणे अयशस्वी झाले :
    %2" + +#, fuzzy +#~ msgid "Loading failed." +#~ msgstr "%1 दाखल करता आली नाही" diff --git a/po/nb/cantor.po b/po/nb/cantor.po new file mode 100644 index 0000000..60a0417 --- /dev/null +++ b/po/nb/cantor.po @@ -0,0 +1,3148 @@ +# Translation of cantor to Norwegian Bokmål +# +# Bjørn Steensrud , 2009, 2010, 2011, 2012, 2013, 2014. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2014-01-07 14:17+0100\n" +"Last-Translator: Bjørn Steensrud \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Bjørn Steensrud" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "bjornst@skogkatt.homelinux.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pause" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stopp" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Lagre resultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Avansert plotting" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Plott" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Uttrykk:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Flere valg:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Plott" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktivt valg" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Beregn" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differensier" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabel:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Ganger: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pakke" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importer pakke" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakke:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrer" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Nedre grense:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Øvre grense:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "bestemt integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineær algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Opprett matrise" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolonner:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rader:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Beregn egenverdier" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrise:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Beregn egenvektorer" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverter matrise" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Plot 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Navn" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Plot 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. variabel" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. variabel" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Kjør skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Løs likninger" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Likninger:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabler:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Velg bakgrunnsmotor som skal brukes:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Bruk denne bakgrunnsmotoren som standard" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Bygg inn plott i arbeidsarket" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Liste over skripter som skal kjøres automatisk når en økt begynner" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Feil: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Skripter som skal autokjøres" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima er et system for å behandle symbolske og numeriske uttrykk, deriblant " +"derivering, integrering, Taylor-rekker, Laplace-transformasjoner, vanlige " +"differensiallikninger, systemer av lineære likninger, polynomer, og mengder, " +"lister, vektorer, matriser og tensorer. Maxima gir numeriske resultater med " +"høy presisjon ved å bruke eksakte brøker, heltall med vilkårlig presisjon og " +"flyttall med variabel presisjon. Maxima kan plotte funksjoner og data i to " +"og tre dimensjoner, " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Sti til Maxima-programmet" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Slå på håndtering av variabler" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Feil: For mange */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Feil: For mange /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Feil: forventet \" før :" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Klarte ikke å starte Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima krasjet, starter om …" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima krasjet to ganger på kort tid. Stopper startforsøk" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Feil – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funksjon" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Sti til Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Bygg inn plott i arbeidsarket" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "La Cantor følge oppretting/sletting av variabler" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave er et høynivå-språk, mest ment for numeriske beregninger.
    " +"Det har et praktisk kommandolinje-grensesnitt for å løse lineære og ikke-" +"lineære oppgaver numerisk, og for å utføre andre numeriske eksperimenter ved " +"bruk av et språk som for det meste er kompatibelt med Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Sti til Octave-programmet" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaksfeil" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Sti til Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python er et usedvanlig slagkraftig dynamisk programmeringsspråk som er " +"tatt i bruk i svært varierende bruksområder. Mange Python-pakker brukes i " +"vitenskapelig programmering.

    Denne bakgrunnsmotoren støtter Python 2." +"

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor – plottedialog" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funksjoner" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Tittel" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Uttrykk" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Legg til" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Fjern" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Tøm liste" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkter" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkter og linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Bokser" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Steg" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Lysestaker" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Prikker" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Utjevning" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ingen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monoton" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturlige kubiske rier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monoton)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funksjonsområde" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-område" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Valg" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Tittel på plott" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Merkelapp på x-akse" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Merkelapp på y-akse" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posisjon for beskrivelse" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Skjul beskrivelse" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Øverst til venstre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Øverst til høyre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Nederst til venstre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Nederst til høyre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Nedenfor" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Utenfor" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Vis rutenett" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Vis hel ramme" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Bruk farger" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Vis inni" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmisk x-skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmisk y-skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Filvalg" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Lagre plottet til en fil" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Filtype" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Finn ut fra filnavn" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! er ikke en vanlig programvarekopi av den billigste kalkulator som " +"er å få. Qalculate! vil gjøre full bruk av moderne datamaskiners kraft, " +"fleksibilitet og overlegne brukerflate. Hovedvekten i Qalculate! er på " +"inntasting av uttrykk. I stedet for å taste inn for seg hvert tall i et " +"matematisk uttrykk kan du skrive inn hele uttrykket, og endre det siden. " +"Uttrykkstolkingen er fleksibel og feiltolerant, og hvis du likevel gjør noe " +"som er feil, så vil Qalculate! si fra om det. Uttrykk som ikke kan regnes ut " +"fullstendig er likevel ikke feil. Qalculate! vil forenkle så mye det kan og " +"svare med et uttrykk. Foruten tall og regneoperatorer kan et uttrykk " +"inneholde vilkårlig kombinasjon av variabler, enheter og funksjoner." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Om og hvordan enheter skal gjøres om automatisk. Hvis det er sant, gjør om " +"til mest passende SI-enheter (minste antall enheter)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Standard vinkelenhet for trigonometriske funksjoner." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Grunntall for tall som tolkes og regnes ut." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Om resultatet av utregningen skal forenkles eller faktoriseres." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Om rasjonale tall skal vises med desimaler, som brøk. eller en mellomting." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Vis at de gjentatte sifrene i et tall fortsetter for alltid med tre prikker, " +"i stedet for å runde av (eks. 2/3 vises som 0.666666… i stedet for 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Bruk alle desimale SI-prefikser. Hvis dette er slått av blir prefikser som " +"ikke er multipler av tusen ikke brukt automatisk (centi, desi, deka, hekto)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Hvis dette er sant blir det brukt negative eksponenter i stedet for divisjon " +"(eks. 5/x^2 blir 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numerisk visning" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Hvis dette er sant blir plott vist inne i arbeidsarket, ellers vises det i " +"separate vinduer." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Om farger skal brukes i plott." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Om rutenett skal plottes." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Om heltrukne kanter skal tegnes rundt plottet." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Linjebredde, i piksler." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Antall interpoleringssteg som skal brukes i plotting." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Utjevningsmodus brukt i plott." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Stil for plott." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Posisjon for beskrivelse i plott." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate melder at det ikke klarer å skrive ut. Er gnuplot installert?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "mangler %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 må være et tall." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 må være et heltall." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 må være boolsk." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "ugyldig valg for %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "fant flere uttrykk i én plottekommando (%1 og %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "FEIL" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ADVARSEL" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" +"Det finnes ingen funksjon, variabel eller enhet med det oppgitte navnet." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funksjon: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Plottegrensesnitt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Plotter en eller flere funksjoner enten innebygget eller i et separat vindu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "uttrykk" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "valg" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "verdi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "heltall" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolsk" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "tall" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "standard: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Navnet på funksjonen" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Titteletikett" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Merkelapp på x-akse" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Merkelapp på y-akse" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Bilde som plottet skal lagres til. Hvis det er tomt vises plottet i et vindu " +"på skjermen. Hvis inline=true vises bildet uansett dette valget." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "Bildetype som skal lagres. En av auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Sett til true for farget plott, false for monokrom." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minste verdi på x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Største verdi på x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Om logaritmisk skala skal brukes for x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Om logaritmisk skala skal brukes for y-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritmisk base for x-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritmisk base for y-aksen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Om et rutenett skal vises i plottet." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Om det skal tegnes kanter på alle sider rundt plottet (ikke bare akser)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Linjebredde." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Hvor forklaringen skal plasseres på plottet. En av ingen. øverst til " +"venstre, øverst til høyre, nederst til venstre, nederst til høyre, under, " +"utenfor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Plott-utjevning. En av ingen, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Plottestil. En av linjer, punkter, punkter_linjer, bokser, histogram, steg, " +"lysestaker, prikker" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Bruk skala på andre x-akse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Bruk skala på andre y-akse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Om plottet skal tegnes innebygget, i stedet for i et nytt vindu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Avstanden mellom to interpoleringspunkter. Se også steg." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Antall interpoleringspunkter. Se også steg." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Navnet på x-variablen. Dette må være en ukjent variabel" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Lagre variabler til en fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Lagre alle variabler som nå er definert til en fil. De kan lastes inn igjen " +"med %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fil: fil det skal lagres til" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Last inn variabler fra en fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Last inn variabler fra en fil som er opprettet tidligere av %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fil: fila som skal lastes inn" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Generelt" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Grunntall:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Brøkformat:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Desimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Nøyaktig" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Som brøk" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinert" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Tallvisning:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Ren" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Vitenskapelig" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Presisjon" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Vis uendelig følge" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Slått på" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Bruk alle SI-prefikser:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Bruk negative eksponenter:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Beregn" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Gjør om til beste SI-eheter:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Vinkelenhet:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Grader" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradianer" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Struktureringsmodus:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Forenkle" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktoriser" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Plotting" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Vis plotter innebygget:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Plott med farge:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Vis rutenett:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Vis hele rammer:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Linjebredde:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Samplingsrate:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Utjevningsmåte:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naturlige kubiske rier" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Plott-stil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Steg" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posisjon for beskrivelse:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R er et språk og et miljø for statistiske beregninger og grafer, som likner " +"på S-språket og miljøet.
    Det tilbyr et bredt spekter av statistiske og " +"grafiske teknikker (lineær og ikke-lineær modellering, klassiske statistiske " +"tester, klassifisering, klynger …) og kan lett utvides. Forskning i " +"statistiske metoder bruker ofte S som foretrukket språk, og R gir en " +"mulighet til å delta i dette med fri programvare." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Feil ved åpning av fil %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Feil ved tolking av kommando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dobbelttrykk for å åpne filvelgerdialogen" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-kildefiler (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage er et fritt og åpent programsystem for matematikk, lisensiert med GPL." +"
    Det binder sammen slagkraften i mange eksisterende friprog-pakker med " +"et felles Python-basert grensesnitt." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sti til Sage-programmet" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultat av %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Siste utdata var: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage-prosessen krasjet under beregning av dette uttrykket " + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage-prosessen krasjet" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage-prosessen avsluttet under beregning av dette uttrykket " + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage-prosessen avsluttet" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Klarte ikke å starte Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sti til Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Sti til kommandoen scilab-adv-cli. Advarsel: Scilab-versjonen må være 5.4 " +"eller bedre." + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Sti til kommandoen scilab-adv-cli" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Last ned eksempler på arbeidsark" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Å&pne eksempel" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Åpne fil" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Fant ingen bakgrunnsmotor

    \n" +"
    Du kan forsøke:\n" +"
    • Ã¥ endre innstillingene i oppsettsdialogen;
    • Ã¥ " +"installere pakkene for følgende program:
    • %2
    " +msgstr[1] "" +"

    Fant ingen bakgrunnsmotor

    \n" +"
    Du kan forsøke:\n" +"
    • Ã¥ endre innstillingene i oppsettsdialogen;
    • Ã¥ " +"installere pakkene for ett av følgende programmer:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Feil" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Økt %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Klarte ikke å finne Cantor-part." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Lagre prosjekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Standard bakgrunnsmotor" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Utfør typografi som standard" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Gjør syntaksfremheving som standard" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Slå på fullføring som standard" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Slå på nummerering av uttrykk som standard" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animer som standard endringer i arbeidsarket" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Evaluer automatisk på nytt oppføringene nedenfor det gjeldende" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Bakgrunnsmotoren %1 er ikke installert" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Det er noen problemer med motoren %1,\n" +"sjekk oppsettet eller installer de pakkene som trengs.\n" +"Du kan bare se på dette arbeidsarket." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Lagre ren tekst" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Eksporter til LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Beregn arbeidsark" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Typografi med LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaksfremheving" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Fullføring" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Linjenummer" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animer arbeidsark" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Start bakgrunnsmotor på nytt" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Beregn oppføring" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Sett inn kommando-oppføring" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Sett inn tekst-oppføring" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Sett inn LaTeX-oppføring" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Sett inn sideskift" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Sett inn bilde" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Fjern gjeldende element" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Vis hjelp for %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Vis skriptredigering" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Vis fullføring" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Lagre som" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Lagre" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Avbryt" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Beregner …" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Klar" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Øktfeil: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Klargjøring fullført" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Klargjør …" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Uten navn" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Vil du laste opp gjeldende arbeidsarkl til en offentlig nett-tjener?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Spørsmål – Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Arbeidsarket er ikke lagret. Du bør lagre det før opplasting." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Advarsel – Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Denne bakgrunnsmotoren støtter ikke skripter." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "R&ediger" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vis" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Arbeidsark" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fil" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Ny" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Ruter" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Innstillinger" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Avbrutt" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Søkelinje" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "…" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Finn:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Neste" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Forrige" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Erstatt:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Erstatt" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Erstatt &alle" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Søk i:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Ta hensyn til store/små bokstaver" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Sett opp bilde" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Høyreklikk her for å sette inn bilde" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Kan ikke laste inn bilde %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Bildeinnstillinger" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Åpne" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Vist størrelse" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Bredde" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Høyde" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Utskriftsstørrelse" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Bruk vist størrelse" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr " %" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Åpne bildefil" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Vis LaTeX-kode" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Sti til latex-programmet" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Sti til dvips-programmet" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Navn" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Verdi" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Fra:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Til:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Hovedtittel" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Abscisseskala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinatskala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Tittel på plott:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE grensesnitt mot matematisk programvare" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra bakgrunnsmotor" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave bakgrunnsmotor" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Grensesnitt" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Sideskift ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Matematikk på KDEs måte" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Navn:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Verdi:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Legg til ny variabel" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Last inn variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Lagre variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Tøm variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Er du sikker på at du vil fjerne alle variabler?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Bekreftelse – Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Fjern resultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Fant ingen skriveprogramskomponent i KDE.\n" +"Sjekk KDE-installasjonen." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skriptredigering" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skriptredigering – %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Ikke funnet" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Kom til begynnelsen" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Kom til slutten" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Erstattet %1 forekomst" +msgstr[1] "Erstattet %1 forekomster" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Kommandoer" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultater" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Feil" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX-kode" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Standard bakgrunnsmotor:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Hvis dette er krysset av vil Cantor automatisk evaluere alle oppføringer " +"under den gjeldende." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Evaluer automatisk oppføringer på nytt" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Standarder" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Slå på LaTeX-typografi" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Slå på syntaksfremheving" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Slå på fullføring" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Slå på linjenummer" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Slå på animasjoner i arbeidsarket" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Vis opptegnet" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Vis kode" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Kan ikke tegne opp eps-fil. Du trenger kanskje flere pakker" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Kan ikke skrive til fila %1.." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Feil ved lagring av fil %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Feil under lasting av latex.xsl-stilark" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Kommando-oppføring" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Tekst-oppføring" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX-oppføring" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Bilde" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sideskift" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Sett inn LaTeX-oppføring" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Tekst&farge …" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Farge" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Framhev tekst …" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "Skri&ft" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Skriftstørrelse" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Halvfet" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursiv" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Understrek" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Stryk ut" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Venstrejuster" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Venstre" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Midtstill" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Midtstilt" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Høy&rejuster" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Høyre" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Innrett" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Innrett" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Fjern oppføring" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Dra oppføring" diff --git a/po/nds/cantor.po b/po/nds/cantor.po new file mode 100644 index 0000000..07cfce3 --- /dev/null +++ b/po/nds/cantor.po @@ -0,0 +1,3385 @@ +# translation of mathematik.po to Low Saxon +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Manfred Wiese , 2009, 2010, 2011, 2014. +# Sönke Dibbern , 2009, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2014-05-13 11:57+0200\n" +"Last-Translator: Sönke Dibbern \n" +"Language-Team: Low Saxon \n" +"Language: nds\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Manfred Wiese, Sönke Dibbern" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "m.j.wiese@web.de, s_dibbern@web.de" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Paus" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Anhollen" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Resultaat sekern" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Verwiedert Bagenschrieven" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Diagramm" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Utdruck:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Anner Optschonen:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Diagramm" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Optschoon aktiev" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Utreken" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differenzeren" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabel:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Wedderhalen: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Paket importeren" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integreren" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Neddergrenz:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Bövergrenz:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "Fastleggt Integraal" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineaar Algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Matrix opstellen" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Striepen:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Regen:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Egenweerten utreken" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrix:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Egenvektoren utreken" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Matrix ümdreihen" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D-Diagramm" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Naam" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D-Diagramm" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. Variabel" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. Variabel" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Skript utföhren" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Glieken lösen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Glieken:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabeln:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Op %3 laat sik mehr " +"Informatschonen finnen.
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Bruukt Hülpprogramm utsöken:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Dit as Standard-Hülpprogramm bruken" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.python.org/2/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Diagrammen na Arbeitblatt inbinnen" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.lua|Lua script file" +msgid "Julia script file (*.jl)" +msgstr "*.lua|Lua-Skriptdatei" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Padd na Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Diagrammen in Arbeitblatt inbinnen" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/de/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "List mit Skripten, de bi Törnstart automaatsch utföhrt warrt" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Fehler: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Skripten, de automaatsch utföhrt warrt" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    „Lua“ is en gau un licht Skriptspraak mit en eenfach prozeduraal Syntax. " +"Dat gifft en Reeg Lua-Bibliotheken för Mathematik un Wetenschap.

    Dit " +"Hülpprogramm ünnerstütt luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Padd na den Befehl „luajit“" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.lua|Lua script file" +msgid "Lua script file (*.lua)" +msgstr "*.lua|Lua-Skriptdatei" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Padd na Befehl „luajit“:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"»Maxima« is en Systeem för't Bewerken vun symboolsch un mathemaatsch " +"Utdrück. Ünnerstütt warrt Differentschaal- un Integraalreken, Taylor-Regen, " +"Laplace-Ümwanneln, normaal Differentschaalglieken, Systemen vun lineaar " +"Glieken, Polynomen, Setten, Listen, Vektoren, Matrizen un Tensoren. Maxima " +"levert numeersch Resultaten vun hoge Nauigkeit, wiel dat naue Bröken, free " +"köört Heeltallen un variabel Fleetkommatallen mit hoge Nauigkeit bruukt. Mit " +"Maxima laat sik Funkschonen un in Daten as Diagrammen in twee- oder ok dree " +"Evenen dorstellen. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Padd na't Programm »Maxima«" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Variabelnpleeg anmaken" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Fehler: To vele „*/“" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Fehler: To vele „/*“" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Fehler: »\"« vör »;« verwacht" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima-Stapeldatei" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maxima lett sik nich starten." + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima is afstört un warrt nieg start..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima is tweemaal kort achterenanner afstört. Startversöök warrt anhollen." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Fehler - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "Funkschoon" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Padd na Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Diagrammen in Arbeitblatt inbinnen" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Cantor dat Opstellen/Wegdoon vun Variabeln verfolgen laten" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"„GNU Octave“ is en höger Programmspraak för numeersch Bereken.
    Dat " +"stellt en kommood Konsool för't Lösen vun lineaar un nich-lineaar numeersch " +"Problemen un anner numeersch Experimenten praat un bruukt dor en tomehrst " +"„Matlab“-kompatibel Spraak för." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Padd na de utföhrbore Datei »Octave«" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave-Skriptdatei" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaxfehler" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Padd na Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.py|Python script file" +msgid "Python script file (*.py)" +msgstr "*.py|Python-Skriptdatei" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python is en dünaamsch Programmeerspraak, de dat ankieken Weert is, un " +"warrt in en Barg verscheden Programmerrebeden bruukt. Dat gifft en Reeg " +"Python-Paketen för't wetenschaplich Programmschrieven.

    Dit " +"Hülpprogramm ünnerstütt Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, fuzzy, kde-format +#| msgctxt "the url to the documentation Python 2" +#| msgid "http://docs.python.org/2/" +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/2/" + +#: backends/python3/python3backend.cpp:56 +#, fuzzy, kde-format +#| msgid "" +#| "

    Python is a remarkably powerful dynamic programming language that is " +#| "used in a wide variety of application domains. There are several Python " +#| "packages to scientific programming.

    This backend supports Python 2." +#| "

    " +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python is en dünaamsch Programmeerspraak, de dat ankieken Weert is, un " +"warrt in en Barg verscheden Programmerrebeden bruukt. Dat gifft en Reeg " +"Python-Paketen för't wetenschaplich Programmschrieven.

    Dit " +"Hülpprogramm ünnerstütt Python 2.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Plotdialoog" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkschonen" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Titel" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Utdruck" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Tofögen" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Wegmaken" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "List leddig maken" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-Variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Lienen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Pünkt" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Pünkt un Lienen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Kastens" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogramm" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Schreed" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Talliglichter" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Pünkt" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Weekmaken" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Keen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotoon" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Natürlich kubsch Splines" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézier (monotoon)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funkschoonrebeet" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-Rebeet" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, fuzzy, kde-format +#| msgid "Sampling rate" +msgid "Sa&mpling rate" +msgstr "Aftast-Wedderhalen" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Step size" +msgid "Step si&ze" +msgstr "Schrittgrött" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Optschonen" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Diagrammtitel" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-Ass-Beschriften" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-Ass-Beschriften" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Verklorensteed" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Verkloren versteken" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Baven links" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Baven rechts" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Nerrn links" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Nerrn rechts" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Nerrn" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Buten" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Gadder wiesen" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Heel Rand wiesen" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Klören bruken" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Binnenreegs wiesen" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmisch X-Ass" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmisch Y-Ass" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Dateioptschonen" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Diagramm as Datei sekern" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Dateityp" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Ut Dateinaam raden" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate is keen Software-Nabuu vun den billigstmöglichen Taschenreekner. " +"Qalculate will de betere Koppelsteed, dat Könen un de Flexibiliteet vun " +"modeern Reekners heel un deel bruken. Binnen Qalculate is dat Wichtigste de " +"Utdruckingaav. Ansteed dat Du elk Tall binnen en mathemaatsch Utdruck enkelt " +"ingiffst, kannst Du den helen Utdruck ingeven un em later bewerken. Dat " +"Utreken vun Utdrück is flexibel un kann mit Fehlers ümgahn. Deist Du liekers " +"wat Snaakschet, vertellt Qalculate Di dat. Man nich heel oplöösbor Utdrück " +"warrt nich as Fehlers ankeken. Qalculate vereenfacht dat, so wiet as dat " +"geiht, un gifft en Utdruck torüch. Blang Tallen un arithmeetsch Opratoren " +"köönt Utdrück all Kombinatschonen vun Variabeln, Eenheiten un Funkschonen " +"bargen." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Gifft an, wat un wodennig Eenheiten automaatsch ümreekt warrt. Wenn anmaakt, " +"warrt de Eenheit na de op't Best passen SI-Eenheit (de mit de wenigsten " +"Eenheiten) ümwannelt." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Standard-Winkeleenheit för trigonometersch Funkschonen" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Basis för inleest un utreekt Tallen." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Gifft an, wat dat Utreekresultaat vereenfacht oder fakteriseert warrt." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Gifft an, wat ratschonaal Tallen as Dezimaaltallen, Bröök oder wat dor " +"twischen wiest warrt." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mit dree Pünkt wiesen, dat en Tall ehr Nakommasteden keen Enn hebbt, un ehr " +"nich runnen (a.B. 2/3 as „0.666666...“ ansteed vun „0.666667“ wiesen)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"All SI-Prefixen bruken. Wenn nich anmaakt warrt Prefixen, de nich Veelfache " +"vun 1000 sünd (a.B. zenti, dezi, deka, hekto), nich automaatsch bruukt." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Wenn anmaakt, warrt negatiev Exponenten ansteed vun Divischonen bruukt (a.B. " +"warrt ut 5/x^2 denn 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Tallendorstellen" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Wenn anmaakt, warrt Diagrammen binnen dat Arbeitblatt wiest, anners binnen " +"en egen Finster." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Gifft an, wat binnen Diagrammen Klören bruukt warrt" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Gifft an, wat en Gadder utgeven warrt" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Gifft an, wat all Ränner rund dat Diagramm utgeven warrt" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Breed vun Lienen, in Pixels" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Tall vun Estemeerschreed bi't Utgeven" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Weekrekenbedrief för Diagrammen" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Stil för de Utgaven" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Verklorensteed binnen Diagrammen" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate gifft an, dat kann nich drucken. Is „gnuplot“ installeert?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "%1 fehlt" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 mutt en Tall wesen." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 mutt en Heeltall wesen." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 mutt boolsch wesen." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Leeg Optschoon för %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "Mehr Utdrück binnen een Utgaavbefehl funnen (%1 un %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "Fehler" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "Wohrschoen" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Dat gifft keen Funkschoon, Variabel oder Eenheit mit den angeven Naam." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkschoon: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Diagramm-Koppelsteed" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Gifft en oder mehr Funkschonen binnenreegs oder binnen nieg Finstern ut." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "Utdruck" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "Optschoon" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "Weert" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "Heeltall" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "Boolsch" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "Tall" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "Standard: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "De Funkschoon ehr Naam" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Titelnaam" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "X-Ass-Beschriften" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Y-Ass-Beschriften" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Bild, as dat dat Diagramm sekert warrt. Wenn leddig, warrt dat Diagramm " +"binnen en Finster op den Schirm wiest. Wenn „inline=true“ angeven is, warrt " +"dat Bild wiest, liek wat hier fastleggt is." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"De Bildtyp, de bi't Sekern bruukt warrt. Een vun de Weerten „auto“, „png“, " +"„ps“, „eps“, „latex“, „svg“ un „fig“." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Op „true“ setten, wenn Du klöört Diagrammen hebben wullt, op „false“ för " +"swattwitt Diagrammen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Lüttst X-Ass-Weert" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Hööchst X-Ass-Weert" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Gifft an, wat en logarithmisch X-Ass bruukt warrt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Gifft an, wat en logarithmisch Y-Ass bruukt warrt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logarithmisch Basis för de X-Ass" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logarithmisch Basis för de Y-Ass" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Gifft an, wat en Gadder binnen dat Diagramm utgeven warrt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Gifft an, wat dat Ränner heel rund dat Diagramm geven schall (nich bloots " +"Assen)" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Breed vun Lienen" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Gifft an, woneem de Diagramm-Verkloren wesen schall. Een vun de Weerten " +"„none“, „top_left“, „top_right“, „bottom_left“, „bottom_right“, „below“ un " +"„outside“." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Diagramm-Weekreken. Een vun de Weerten „none“, „unique“, „csplines“, " +"„bezier“ un „sbezier“." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Diagramm-Stil. Een vun de Weerten „lines“, „points“, „points_lines“, " +"„boxes“, „histogram“, „steps“, „candlesticks“ un „dots“." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Skala för tweet X-Ass bruken" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Skala för tweet Y-Ass bruken" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Gifft an, wat dat Diagramm binnenreegs un nich binnen en nieg Finster " +"utgeven warrt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Afstand twischen twee Estemeerschreed. Kiek ok bi Schreed." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Tall vun Estemeerpünkt. Kiek ok bi Schritt." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "De Naam vun de X-Variabel. Dat mutt en nich begäng Variabel wesen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Variabeln binnen en Datei sekern" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"All opstunns fastleggt Variabeln as en Datei sekern. Se laat sik mit „%1“ " +"nieg laden." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "Datei" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "Datei: de Datei, na de Du sekern wullt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Variabeln ut en Datei laden" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Variabeln ut en Datei laden, de vördem mit %1 opstellt wöör." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "Datei: de Datei, de Du laden wullt" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Allmeen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Tallen-Basis:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Brookformaat:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Dezimaal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Akraat" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "As Brook" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Tosamensett" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Tallendorstellen:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Reen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Wetenschaplich" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Nauigkeit" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Wieser för unennlich Regen:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Anmaakt" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "All SI-Prefixen bruken:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Negatiev Exponenten bruken:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Utweerten" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Na best SI-Eenheiten wanneln:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Winkeleenheit:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radian" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graad" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Nieggraad" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Struktureerbedrief:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Vereenfachen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Fakteriseren" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Diagrammutgaav" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Diagrammen binnenreegs wiesen:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Klöört Diagrammen:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Gadder wiesen:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "All Ränner wiesen:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Lienenbreed:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Aftast-Wedderhalen:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Weekrekenbedrief:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Natürlich kubsch Splines" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Tekenstil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Schreed" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Verklorensteed:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"»R« is en Spraak un Ümgeven för Statistikutreken un Diagrammen, liek as de " +"Spraak un Ümgeven »S«.
    Dat stellt en Barg vun Statistik- (lineaar un " +"nich-lineaar mathemaatsch Modellen, klass'sch Statistikpröven, Opdecken vun " +"Tietregen, Toornen un Hopen, usw.) un Grafiktechniken praat, un lett sik " +"bannig verwiedern. De Spraak »S« warrt faken för't Utklamüstern binnen " +"statist'sche Methodologien bruukt, un »R« stellt dör en bornapen Metood för " +"praat." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Datei »%1« lett sik nich opmaken." + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R-Skriptdatei" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Befehl-Inleesfehler" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dateiköördialoog mit Dubbelklick opmaken" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-Borndateien (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"»Sage« is en free bornapen Rekenprogrammsysteem, dat ünner de GPL-Verlööfnis " +"steiht.
    Dat vereent de Knööv vun en Reeg al vörhannen Bornpaketen ünner " +"een op Python opbuut Böversiet." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Padd na't Programm »Sage«" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultaat vun %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"De lest Utgaav weer: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python-Skriptdatei\n" +"*.sage|Sage-Skriptdatei" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "De Perzess »Sage« is bi't Utreken vun dissen Utdruck afstört." + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "De Perzess »Sage« is afstört." + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "De Perzess »Sage« wöör bi't Utreken vun dissen Utdruck beendt." + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "De Perzess »Sage« wöör beendt." + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage lett sik nich starten." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Padd na Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, fuzzy, kde-format +#| msgid "" +#| "

    Warning: this backend works only with Scilab version 5.5 or " +#| "later

    Scilab is a free software, cross-platform numerical " +#| "computational package and a high-level, numerically oriented programming " +#| "language.

    Scilab is distributed under CeCILL license (GPL compatible)" +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Wohrscho: dit Hülpprogramm funkscheneert bloots mit Scilab in de " +"Verschoon 5.5 oder later.

    Scilab is en numeersch Rekenpaket för " +"verscheden Bedriefsystemen un free'e Software. Bito stellt dat en numeersch " +"orienteert Programmeer-Hoochspraak praat.

    Scilab warrt ünner dat CeCILL-" +"Verlööfnis (kumpativel to GPL) verdeelt." + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Padd na den Befehl „scilab-adv-cli“ (Wohrschoen: De Scilab-Verschoon mutt " +"5.4 oder höger wesen)." + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.sce|Scilab script file\n" +#| "*.sci|Scilab function file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.sce|Scilab-Skriptdatei\n" +"*.sci|Scilab-Funkschoondatei" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Padd na Befehl „scilab-adv-cli“:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Bispill-Arbeitblääd daalladen" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Bispill &opmaken" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Cantor-Arbeitblatt" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "Open image file" +msgid "Open file" +msgstr "Bilddatei opmaken" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Keen Hülpprogramm funnen.

    \n" +"
    Wat du doon kannst:\n" +"
    • Änner de Instellen in'n Instellendialoog.
    • " +"
    • Installeer Paketen för dit Programm:
    • %2
    " +msgstr[1] "" +"

    Keen Hülpprogramm funnen.

    \n" +"
    Wat du doon kannst:\n" +"
    • Änner de Instellen in'n Instellendialoog.
    • " +"
    • Installeer Paketen för een vun disse Programmen:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Fehler" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Törn %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "De Cantor-Komponent lett sik nich finnen." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Resultaat sekern" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Dat standardwies bruukt Hülpprogramm" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Standardwies Schriftsetten bruken" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Standardwies Syntaxmarkeren bruken" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Standardwies Kompletteren bruken" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Standardwies Utdrucknummereren bruken" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Ännern binnen dat Arbeitblatt standardwies animeren" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Indrääg ünner den aktuellen automaatsch nieg utreken" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Hülpprogramm »%1« is nich installeert." + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Dat gifft Problemen mit dat Hülpprogramm „%1“.\n" +"Bitte prööv Dien Installatschoon oder installeer de nödigen Paketen.\n" +"Du kannst Di dit Arbeitblatt bloots ankieken." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Eenfachtext sekern" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "As LaTeX exporteren" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Arbeitblatt utreken" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "LaTeX-Schriftsetten bruken" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaxmarkeren" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Kompletteren" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Reegnummern" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Arbeitblatt animeren" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Hülpprogramm nieg starten" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Indrag utreken" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Befehl infögen" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Text infögen" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Befehl infögen" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Latex-Indrag infögen" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Sietümbrook infögen" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Bild infögen" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Aktuell Indrag wegmaken" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "%1-Hülp wiesen" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Skripteditor wiesen" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Kompletteren wiesen" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantor-Komponent" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2013 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2013: Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save" +msgid "Save as" +msgstr "Sekern" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Sekern" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Hülpprogramm nieg starten" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Ünnerbreken" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "An't Utreken..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Afslaten" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Törnfehler: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Torechtmaken afslaten" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Törn warrt torechtmaakt" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Ahn Naam" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Wullt Du dit Arbeitblatt na en apen Nettserver hoochladen?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Fraag - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Dat Arbeitblatt wöör nich sekert. Wullt Du dat ehr't Hoochladen sekern?" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Wohrschoen - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Dit Hülpprogramm ünnerstütt keen Skripten." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Bewerken" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Ansicht" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Arbeitblatt" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Datei" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nieg" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneels" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Instellen" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Afslaten" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X-Rebeet" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X-Rebeet" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X-Rebeet" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Text&klöör..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Schriftoort" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Fett" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Kursiev" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Ünnerbraken" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Söökbalken" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Söken:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Nakamen" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Verleden" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Utwesseln:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Utwesseln" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "&All utwesseln" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Söken in:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Op &Groot- un Lüttschrieven kieken" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Bild instellen" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Klick rechts, wenn Du dat Bild infögen wullt" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Bild „%1“ lett sik nich laden." + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Bildinstellen" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Opmaken" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Wiesgrött" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Breed" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Hööchd" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "&Verleden" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Druckgrött" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Wiesgrött bruken" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automaatsch)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Bilddatei opmaken" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "LaTeX-Kode wiesen" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Padd na't utföhrbor Programm »LaTeX«" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Padd na't Programm »dvips«" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Naam" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Weert" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Vun:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Bet:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Hööfttitel" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "X-Ass-Skala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Y-Ass-Skala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Diagrammtitel:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE-Böversiet för Mathematikprogrammen" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2013 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2013: Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Scilab and Python backends" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Scilab- un Python-Hülpprogrammen" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Hülpprogramm för KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave-Hülpprogramm" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Koppelsteed" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Dit Hülpprogramm bruken" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Dokment, dat Du opmaken wullt" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Datei »%1« lett sik nich opmaken." + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Sietümbrook ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Reken mit KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Naam:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Weert:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Nieg Variabel tofögen" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Variabeln laden" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Variabeln sekern" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Variabeln leddig maken" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Wullt Du redig all Variabeln wegmaken?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Beglöven - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Loading failed." +msgid "Load file" +msgstr "Laden fehlslaan" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Resultaat wegmaken" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Dor lett sik keen KDE-Texteditorkomponent finnen.\n" +"Prööv bitte Dien KDE-Installatschoon." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skripteditor" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skripteditor - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nich funnen" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Bi den Anfang ankamen" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Bi't Enn ankamen" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 Vörkamen utwesselt" +msgstr[1] "%1 Vörkamen utwesselt" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Befehlen" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultaten" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Fehlers" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX-Kode" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Standard-Hülpprogramm:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "Wenn anmaakt, reekt Cantor elk Indrag ünner den aktuellen nieg ut." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Indrääg automaatsch nieg utreken" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Vörinstellen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "LaTex-Schriftsatz anmaken" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Syntaxmarkeren anmaken" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Kompletteren anmaken" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Reegnummern anmaken" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Arbeitblattanimeren anmaken" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Ümreekt wiesen" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Kode wiesen" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"EPS-Datei lett sik nich ümreekt dorstellen. Villicht deit noch mehr Paketen " +"noot." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Datei „%1“ lett sik nich schrieven." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Datei „%1“ lett sik nich schrieven." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Fehler bi't Sekern vun Datei »%1«." + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Fehler bi't Laden vun de Stilvörlaag „latex.xsl“" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Befehl" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Text" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Befehl infögen" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Latex-Indrag" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Bild" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sietümbrook" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Text infögen" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Text Entry Before" +msgid "Insert Entry Before" +msgstr "Text vör" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "LaTeX-Indrag infögen" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Text&klöör..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Klöör" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Text &rutheven..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Schriftoort" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Schrift&grött" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Fett" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursiev" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "Ü&nnerstreken" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Dörstreken" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Links utricht" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Linkerhand" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Merrn utricht" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "In de Merrn" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Rechts utricht" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Rechterhand" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Blocksatz" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Block" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Indrag wegmaken" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Indrag trecken" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Dat Hülpprogramm, mit dat disse Datei opstellt wöör, is nich installeert. " +#~ "- %1 deit noot." + +#~ msgid "Publish Worksheet" +#~ msgstr "Arbeitblatt apen maken" + +#~ msgid "Waiting for Image..." +#~ msgstr "Töven op Bild..." + +#~ msgid "Insert" +#~ msgstr "Infögen" + +#~ msgid "Insert Before" +#~ msgstr "Vöran infögen" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Datei »%1« lett sik nich opmaken. - MIME-Typ nich begäng." + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX-Dokment" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor-Arbeitblatt" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server för dat Cantor-Hülpprogramm »R«" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2008: Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Bruuk: safeVariables Datei" + +#~ msgid "Saving failed." +#~ msgstr "Sekern fehlslaan" + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Bruuk: loadVariables Datei" + +#~ msgid "Loading failed." +#~ msgstr "Laden fehlslaan" + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009-2013: Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Padd na Python-Befehl" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor-Server för »R«" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Wullt Du de Biller ok exporteren?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Padd na Python2-Befehl:" + +#~ msgid "Could not start the server." +#~ msgstr "De Server lett sik nich starten." + +#~ msgid "Pause Animation" +#~ msgstr "Animeren ophollen" + +#~ msgid "Start Animation" +#~ msgstr "Animeren starten" + +#~ msgid "Restart Animation" +#~ msgstr "Animeren nieg starten" + +#~ msgid "Append Command Entry" +#~ msgstr "Befehl anhangen" + +#~ msgid "Append Text Entry" +#~ msgstr "Text anhangen" + +#~ msgid "Append Latex Entry" +#~ msgstr "Latex-Indrag anhangen" + +#~ msgid "Append Image" +#~ msgstr "Bild anhangen" + +#~ msgid "Append Page Break" +#~ msgstr "Sietümbrook anhangen" + +#~ msgid "Other" +#~ msgstr "Anner" + +#~ msgid "And %1 more..." +#~ msgstr "Un noch %1..." + +#~ msgid "Main Toolbar" +#~ msgstr "Hööft-Warktüüchbalken" + +#~ msgid "Completion Style:" +#~ msgstr "Kompletterenstil:" + +#~ msgid "Popup" +#~ msgstr "Opduker" + +#~ msgid "The style used for Completion" +#~ msgstr "De bruukt Stil för Kompletteren" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Padd na't Programm »Sage«" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Befehl infögen vör" + +#~ msgid "Command Entry Before" +#~ msgstr "Befehl vör" + +#~ msgid "GroupBox" +#~ msgstr "KoppelKasten" + +#~ msgid "Help" +#~ msgstr "Hülp" + +#~ msgid "Show Help Panel" +#~ msgstr "Hülppaneel wiesen" + +#~ msgid "Error uploading File %1" +#~ msgstr "Fehler bi't Hoochladen vun Datei »%1«." + +#~ msgid "MathematiKPart" +#~ msgstr "MathematiK-Komponent" + +#~ msgid "MathematiK" +#~ msgstr "MathematiK" diff --git a/po/nl/cantor.po b/po/nl/cantor.po new file mode 100644 index 0000000..3931598 --- /dev/null +++ b/po/nl/cantor.po @@ -0,0 +1,3339 @@ +# translation of cantor.po to Nederlands +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Freek de Kruijf , 2009, 2010, 2015, 2016, 2017. +# Jaap Woldringh , 2009, 2010, 2011. +# Kristof Bal , 2009. +# Jaap Woldringh , 2011, 2012. +# Jaap Woldringh , 2012, 2013, 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-08 13:15+0100\n" +"Last-Translator: Jaap Woldringh \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Freek de Kruijf,Jaap Woldringh" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "freekdekruijf@kde.nl," + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pauze" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stop" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Resultaat opslaan" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gevorderd plotten" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Plot" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expressie:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Verdere opties:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Plot" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Optie actief" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Berekenen" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differentiëren" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabele:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Keer: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pakket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Pakket importeren" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integreren" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Ondergrens:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Bovengrens:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "bepaalde integraal" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineaire algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Matrix aanmaken" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolommen:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rijen:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Eigenwaarden berekenen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrix:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Eigenvectoren berekenen" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Matrix inverteren" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Plot 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabele:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Naam" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Plot 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1e variabele:" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2e variabele:" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Script uitvoeren" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Vergelijkingen oplossen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Vergelijkingen:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabelen:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Aanbevolen versie: %4

    %2

    Zie %3 voor meer informatie
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Kies de te gebruiken backend:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Dit backend standaard maken" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia is een zeer krachtige dynamische programmeertaal van hoog " +"niveau voor technische berekeningen. De syntax is bekend voor wie ervaring " +"heeft met andere technische omgevingen. De compiler is geavanceerd, kent een " +"verdeelde parallelle verwerking, en is numeriek nauwkeurig, Er is een " +"uitvoerige wiskundige bibliotheek aanwezig.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Pad naar Julia REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Plots opnemen in het werkblad" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia script-bestand (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Pad naar Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Plots in werkblad opnemen (nieuwe sessie starten indien gewijzigd)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Inline plots tussenformaat:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/nl/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lijst van zelfstartende scripts aan het begin van de sessie" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Fout: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts zelfstartend" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua is een snelle, kleine scripttaal, met een eenvoudige procedurele " +"syntaxis. Er zijn een aantal wis- en natuurkundige bibliotheken beschikbaar " +"voor Lua.

    Deze backend ondersteunt luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Pad naar opdracht in luajit:" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua scriptbestand (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Pad naar luajit opdracht:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima is een systeem voor het werken met symbolische en numerieke " +"expressies, met inbegrip van differentiëren, integreren, Taylorreeksen, " +"Laplacetransformaties, gewone differentiaalvergelijkingen, stelsels van " +"lineaire vergelijkingen, veeltermen (polynomen), en verzamelingen, lijsten, " +"matrices en tensoren. Met Maxima verkrijgt men numerieke antwoorden met een " +"hoge precisie, gebruik makend van exacte breuken, gehele getallen met een " +"willekeurig hoge precisie, en van decimale breuken met een variabele " +"nauwkeurigheid. Met Maxima kan men plots maken van functies en gegevens, in " +"twee en drie dimensies. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Path naar het uitvoerbaar bestand voor Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Variabelenbeheer activeren" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Fout: te veel */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Fout: Te veel /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Fout: \" verwacht voor :" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Wachten op plotresultaat" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima batchbestand (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Starten van Maxima mislukt" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima liep vast, wordt herstart..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima liep twee keer kort na elkaar vast. Verdere startpogingen worden " +"gestaakt" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Fout - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "Functie" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Pad naar Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Plots in werkblad opnemen" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Laat Cantor het aanmaken/vernietigen van variabelen volgen" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave is een hogere programmeertaal, speciaal geschikt voor numerieke " +"berekeningen.
    Het bevat een gemakkelijk te gebruiken interface in het " +"tekstscherm, voor het numeriek oplossen van lineaire en niet-lineaire " +"berekeningen, en voor het uitvoeren van andere numerieke experimenten op een " +"manier die het meest lijkt op die van Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Pad naar het uitvoerbaar bestand voor Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave scriptbestand (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaxisfout" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Pad naar Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python scriptbestand (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python is een erg krachtige dynamische programmeertaal die voor heel wat " +"toepassingsgebieden wordt gebruikt. Er bestaan diverse Pythonpakketten voor " +"wetenschappelijke programma's.

    Deze backend ondersteunt Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python is een erg krachtige dynamische programmeertaal die voor heel wat " +"toepassingsgebieden wordt gebruikt. Er bestaan diverse Pythonpakketten voor " +"wetenschappelijke programma's.

    Deze backend ondersteunt Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Plot Dialoog" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Functies" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Titel" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expressie" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Toevoegen" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Verwijderen" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Lijst wissen" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-variabele" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stijl" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Lijnen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punten" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punt-streep" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Vakjes" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Stappen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Candlesticks" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Stippen" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Gladmaken" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Geen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotoon" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Natural Cubic Splines" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotoon)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Functiebereik" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-bereik" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "&Bemonsteringssnelheid" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "&Stapgrootte" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opties" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Plotnaam" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "tekst x-as" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "tekst y-as" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Plaats legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Legenda verbergen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Linksboven" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Rechtsboven" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Linksonder" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Rechtsonder" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Onderaan" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Er buiten" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Rooster tonen" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Randen tonen" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Kleuren" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "In zelfde venster weergeven" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmische schaal x-as" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmische schaal y-as" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Bestandopties" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Plot in bestand opslaan" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Bestandtype" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Uit bestandnaam afleiden" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! is niet echt een gewone softwareversie van de goedkoopste " +"rekenmachine. Het doel van Qalculate! is volledig gebruik te maken van de " +"uitstekende interface, rekenkracht en toepasbaarheid van moderne computers. " +"Hierbij staat in Qalculate! het invoeren van expressies centraal. In plaats " +"van dat elk getal in een wiskundige expressie (uitdrukking) apart wordt " +"ingevoerd, kunt u de expressie direct in zijn geheel invoeren, en die later " +"aanpassen. Het interpreteren van de expressies is flexibel en fouten worden " +"niet direct afgestraft. Als u niettemin toch iets verkeerds doet, laat " +"Qalculate! u dit weten. Niet helemaal oplosbare expressies echter worden " +"niet als fout beoordeeld. Qalculate zal expressies zo veel mogelijk " +"vereenvoudigen. Naast getallen en wiskundige bewerkingen kan in een " +"expressie elke combinatie van variabelen, eenheden en functies voorkomen." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"of, en hoe, eenheden automatisch moeten worden omgerekend. Indien True, " +"omrekenen naar de meest geschikte SI-eenheden (het kleinste aantal eenheden)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Standaard hoekeenheid voor goniometrische functies." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Grondtal voor ingelezen en berekende getallen." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" +"of het berekende antwoord moet worden vereenvoudigd of in factoren ontbonden." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"of rationale getallen als decimale getallen moeten worden weergegeven, als " +"breuken, of ergens daar tussen in." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Toon met drie stippen dat de decimalen van een getal zich blijven herhalen, " +"in plaats van afronden (bv. 2/3 wordt weegegeven als 0.666666... in plaats " +"van 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Met decimale SI-voorvoegsels. Indien False, worden niet automatisch alleen " +"voorvoegsels gebruikt die een veelvoud zijn van duizend (zoals kilo, milli, " +"mega, micro)." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Indien True, worden in plaats van deling, negatieve exponenten gebruikt " +"(bijv. 5/x^2 wordt 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numerieke weergave." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Indien True worden plots in het werkblad weergegeven. En anders in een " +"afzonderlijk venster." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Of in plots kleuren worden gebruikt." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Of er een rooster moet worden geplot." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Of er een rand rondom de plot moet worden getekend." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Lijndiktes, in pixels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Aantal interpolatiestappen bij plotten." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Modus voor gladmaken van plots." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Plotstijl:" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Positie legenda in plots." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate meldt dat het niet kan afdrukken. Is gnuplot wel geïnstalleerd?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "%1 ontbreekt" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 moet een getal zijn." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 moet een geheel getal zijn." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 moet een booleaanse waarde zijn." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "ongeldige optie voor %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "meerdere expressies aangetroffen in één plotopdracht (%1 en %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "FOUT" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "WAARSCHUWING" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Er bestaat geen functie, variabele of eenheid met deze naam." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Functie: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Plot-interface" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Plot een of meer functies hierin, of in een apart venster." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expressie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "optie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "waarde" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "geheel getal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booleaanse waarde" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "getal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "standaard: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Naam van de functie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Titel" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "tekst x-as" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "tekst y-as" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"afbeeldingsbestand voor opslaan plot. Indien leeg, wordt plot in een venster " +"op het scherm getoond. Indien inline=true wordt de afbeelding sowieso " +"getoond." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "Afbeeldingstype voor opslaan: auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "True (waar) voor kleurenplot, False (onwaar) voor zwartwit." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Kleinste waarde x-as." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Grootste waarde x-as." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Logaritmische schaal voor x-as?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Logaritmische schaal voor y-as?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritmische basis voor x-as?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritmische basis voor y-as?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "rooster tonen in plot?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Randen tonen rondom plot (niet alleen assen)?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Lijndiktes." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Plaats van de plotlegenda: geen, linksboven, rechtsboven, linksonder, " +"rechtsonder, eronder, of erbuiten" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Plot glad maken: niet, uniek, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Plotstijl: streepjes, punten, punt_streep, hokjes, histogram, stappen, " +"candlesticks, stippen" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Schaal voor tweede x-as." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Schaal voor tweede y-as." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Plot in het venster tekenen, of in een nieuw venster?" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Afstand tussen twee interpolatiepunten. Zie ook stappen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Aantal interpolatiepunten. Zie ook stappen." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "De naam van de x-variabele. Dit moet een onbekende variabele zijn" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Variabelen in een bestand opslaan" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Sla alle huidig gedefinieerde variabelen op in een bestand. Zij kunnen weer " +"worden ingelezen met %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "bestand" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "bestand: bestand waarin moet worden opgeslagen" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Variabelen inlezen uit een bestand" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Lees variabelen in uit een bestand dat eerder met %1 werd aangemaakt." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "bestand: in te lezen bestand" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Algemeen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Grondtal:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Breuktype:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimaal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exact" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Breuk" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Samengesteld" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Numerieke weergave:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Zuiver" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Wetenschappelijk" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Nauwkeurigheid" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "oneindige rij aangeven:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Ingeschakeld" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Met SI-voorvoegsels:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Met negatieve exponenten:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Berekenen" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Naar beste SI-eenheden omrekenen:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Hoekeenheid:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radialen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graden" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Grads" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Modus:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Vereenvoudigen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Ontbinden in factoren" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Plotten" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Plots in zelfde venster weergeven:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Plotten in kleur:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Raster tonen:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Randen rondom weergeven:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Lijndiktes:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Bemonsteringssnelheid:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Modus gladmaken:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Natural cubic Splines" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Plotstijl:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Stappen" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Positie legenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R is een taal en omgeving voor statistische berekeningen en grafieken, " +"soortgelijk aan de taal en omgeving S.
    Hierin is een grote " +"verscheidenheid aanwezig van statistische (lineaire en niet-lineaire " +"modellen, klassieke statistische testen, analyse van tijdreeksen, " +"klassificatie, clustering, ...) en grafische technieken, en R is heel goed " +"uit te breiden. De taal S wordt meestal gekozen voor onderzoek in de " +"statistische methodologie, en R geeft een Open Source-route om hieraan deel " +"te nemen." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Fout bij het openen van bestand %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R scriptbestand (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Fout bij het lezen van de opdracht" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Open met dubbelklikken de dialoog voor het selecteren van een bestand " + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R bronbestanden (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage is een vrij Open Source wiskundig software-systeem met een GPL-" +"licentie.
    Het combineert de mogelijkheden van vele bestaande Open " +"Source-pakketten in één gemeenschappelijke interface op basis van Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Path naar het uitvoerbaar bestand voor Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Antwoord van %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"De laatste uitvoer was: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python scriptbestand (*.py);;Sage scriptbestand( *.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Sage versie %1.%2 wordt niet ondersteund. Update uw installatie naar de " +"ondersteunde versies, die wel samenwerken mat Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Het Sage-proces liep vast tijdens het berekenen van deze expressie" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Het Sage-proces liep vast" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" +"Het Sage-proces werd afgebroken tijdens het berekenen van deze expressie" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Het Sage-proces werd afgebroken" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Starten van Sage is mislukt" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Path naar Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab is vrije en cross-platform software voor numerieke berekeningen, " +"en een hogere numeriek georiënteerde programmeertaal.

    Scilab wordt " +"uitgegeven onder de CeCILL licentie (compatibel met GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Pad naar de opdracht in de terminal scilab-adv-cli (Waarschuwing: versie van " +"Scilab moet 5.4 of hoger zijn)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab scriptbestand (*.sce);;Scilab functiebestand (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Pad naar opdracht scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Voorbeeldwerkbladen downloaden" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Voorbeeld &openen" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Ga naar vorige werkblad" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Ga naar volgende werkblad" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor Werkblad (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Bestand openen" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Geen backend gevonden

    \n" +"
    Probeer:\n" +"
    • De instellingen te wijzigen in de instellingendialoog;
    • " +"
    • Pakketten te installeren voor het volgende programma:
    • %2
    " +"
    " +msgstr[1] "" +"

    Geen backend gevonden

    \n" +"
    Probeer:\n" +"
    • De instellingen te wijzigen in de instellingendialoog;
    • " +"
    • Pakketten te installeren voor een van de volgende programma's:
    • " +"%2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Fout" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sessie %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Kon het Cantor-gedeelte niet vinden." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Er zijn meerdere niet opgeslagen open werkbladen. Wilt u die afsluiten?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Cantor afsluiten" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Het huidige project is gewijzigd. Wilt u dit opslaan?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Project opslaan" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Het standaard backend" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Letterzetten als standaard" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Syntaxisaccentuering als standaard" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Voltooien aanzetten als standaard" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Nummering van expressies aanzetten als standaard" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Veranderingen in werkblad standaard animeren" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automatisch de invoeren na de huidige opnieuw berekenen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Bevestiging vragen voor herstarten van backend" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Backend %1 is niet geïnstalleerd" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Er zijn wat problemen met het %1-backend.\n" +"Controleer even uw instellingen, of installeer\n" +"de nodige pakketten.\n" +"U kunt alleen dit werkblad zien." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Platte tekst opslaan" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exporteren naar LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Werkblad doorrekenen" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Letterzetten met LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaxisaccentuering" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Voltooien" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Regelnummers" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Werkblad animeren" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Backend herstarten" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Invoer berekenen" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Opdrachtinvoer invoegen" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Tekstinvoer invoegen" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "\"Markdown\"invoer invoegen" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Latex-invoer invoegen" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Paginaeinde invoegen" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Afbeelding invoegen" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Huidige invoer verwijderen" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Toon %1 help" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Scriptbewerker tonen" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Voltooien tonen" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Opslaan als" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Opslaan" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Alle aanwezige berekende antwoorden gaan verloren. Wilt u werkelijk %1 " +"opnieuw starten?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "%1 herstarten?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Onderbreking" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Berekenen..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Gereed" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sessiefout: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initialisatie klaar" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Initialiseren..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Naamloos" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[alleen-lezen]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Wilt u het huidige werkblad naar de publieke server uploaden?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Vraag - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Het werkblad is niet opgeslagen. U moet het opslaan voordat u het uploadt." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Waarschuwing - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Dit backend ondersteunt geen scripts" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Bewerken" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "Beel&d" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Werkblad" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Bestand" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nieuw" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panelen" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Instellingen" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Wit" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Zwart" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Donkerrood" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Rood" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Lichtrood" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Donkergroen" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Groen" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Lichtgroen" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Donkerblauw" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blauw" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Lichtblauw" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Donkergeel" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Geel" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Lichtgeel" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Donkercyaan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cyaan" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Lichtcyaan" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Donkermagenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Lichtmagenta" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Donkeroranje" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Oranje" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Lichtoranje" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Donkergrijs" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Grijs" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Lichtgrijs" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Achtergrondkleur" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Tekstkleur" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Lettertype" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Vet" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Cursief" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Vergroten" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Verkleinen" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Selecteren" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Onderbroken" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Zoekbalk" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Zoeken:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Volgende" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Vorige" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Vervangen:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Vervangen" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "&Alles vervangen" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Zoeken in:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Hoofdlettergevoelig" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Afbeelding instellen" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Afbeelding invoegen: hier rechtsklikken" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Kan afbeelding %1 niet inlezen" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Instellingen voor afbeelding" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Openen" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Grootte weergave" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Breedte" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Hoogte" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Voorbeeld" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Grootte afdruk" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Grootte weergave gebruiken" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Afbeeldingsbestand openen" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "LaTeX-code tonen" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Path naar het uitvoerbaar bestand voor LaTeX" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Path naar het uitvoerbaar bestand voor dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Naam" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Waarde" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Van:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Naar:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Hoofdtitel" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Schaal X-as" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Schaal Y-as" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Plotnaam:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE frontend voor wiskundige toepassingen" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Onderhoudt
    Qt5/KF5 port, Scilab en backends voor Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Oorspronkelijke auteur
    Onderhoud (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Backend van KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Backend Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interface" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Pictogram van Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Backend gebruiken" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Te openen documenten" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Kon bestand %1 niet openen" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "---Paginabreekpunt ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    De KDE-manier voor Wiskunde" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Naam:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Waarde:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Nieuwe variabele toevoegen" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Variabelen inlezen:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Variabelen opslaan" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Variabelen wissen" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Wilt u werkelijk alle variabelen verwijderen?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Bevestiging - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Bestand laden" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Resultaat wissen" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Er is geen KDE-tekstbewerkingscomponent gevonden.\n" +"Controleer de installatie van KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Scriptbewerker" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Scriptbewerker - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Niet gevonden" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Begin bereikt" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Einde bereikt" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 voorkomen vervangen" +msgstr[1] "%1 voorkomens vervangen" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Opdrachten" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultaten" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Fouten" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX-code" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Standaard backend:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Indien aangezet zal Cantor automatisch iedere invoer na de huidige berekenen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Invoeren automatisch opnieuw berekenen" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Standaarden" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Letterzetten met LaTeX aanzetten" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Syntaxisaccentuering aanzetten" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Voltooien aanzetten" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Regelnummers aanzetten" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Werkblad animeren" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Weergegeven tonen" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Programmaregels tonen" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Kan Eps-bestand niet weergeven. Mogelijk ontbreken er pakketten." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Kan bestand %1 niet schrijven." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Kan bestand niet schrijven." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Fout bij schrijven bestand %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"In de modus alleen-lezen kan Cantor niet garanderen dat exporteren geldig is " +"voor %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Fout bij het inlezen van de latex.xsl-stylesheet" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Het geselecteerde bestand is geen geldig projectbestand van Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"Backend %1 niet gevonden. Bewerken en uitvoeren van invoer is niet mogelijk" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Opdrachtinvoer" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Tekstinvoer" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "\"Markdown\"invoer" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeXinvoer" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Afbeelding" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Paginaeinde" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Invoer invoegen achter" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Invoer invoegen vóór" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Latexinvoer invoegen" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Tekst&kleur..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Kleur" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Tekst&accentuering..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Lettertype" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Grootte &lettertype" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Vet" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Cursief" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Onderstrepen" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Doorhalen" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Links uitlijnen" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Links" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Midden uitlijnen" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Midden" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Rechts uitlijnen" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Rechts" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Uitlijnen" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Uitlijnen" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Invoer wissen" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Invoer slepen" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Het backend waarmee dit bestand werd aangemaakt is niet geïnstalleerd. " +#~ "Nodig is %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Werkblad publiceren" + +#~ msgid "Waiting for Image..." +#~ msgstr "Wacht op afbeelding..." + +#~ msgid "Insert" +#~ msgstr "Invoegen" + +#~ msgid "Insert Before" +#~ msgstr "Invoegen voor" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "kan bestand %1 niet openen: onbekend mimetype" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTeX-document" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor-werkblad" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server voor de Cantor R Backend" + +#~ msgid "R Server" +#~ msgstr "R Server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Gebruik: bestand saveVariables" + +#~ msgid "Saving failed." +#~ msgstr "Opslaan mislukt." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Gebruik: bestand loadVariables" + +#~ msgid "Loading failed." +#~ msgstr "Inlezen mislukt." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Pad naar python-opdracht:" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor-server voor R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Wilt u ook de afbeeldingen exporteren?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Pad naar python2-opdracht:" + +#~ msgid " Enable Variable Management" +#~ msgstr "Varaiabelenbeheer activeren" + +#~ msgid "Could not start the server." +#~ msgstr "Kon de server niet starten." + +#~ msgid "Pause Animation" +#~ msgstr "Animatie pauzeren" + +#~ msgid "Start Animation" +#~ msgstr "Animatie starten" + +#~ msgid "Restart Animation" +#~ msgstr "Animatie herstarten" + +#~ msgid "Append Command Entry" +#~ msgstr "Opdrachtinvoer aanvullen" + +#~ msgid "Append Text Entry" +#~ msgstr "Tekstinvoer aanvullen" + +#~ msgid "Append Latex Entry" +#~ msgstr "Latex-invoer toevoegen" + +#~ msgid "Append Image" +#~ msgstr "Afbeelding toevoegen" + +#~ msgid "Append Page Break" +#~ msgstr "Pagina-einde toevoegen" + +#~ msgid "Other" +#~ msgstr "Overig" + +#~ msgid "And %1 more..." +#~ msgstr "En nog %1 ..." + +#~ msgid "Main Toolbar" +#~ msgstr "Hoofdwerkbalk" + +#~ msgid "Completion Style:" +#~ msgstr "Completion-methode:" + +#~ msgid "Popup" +#~ msgstr "Popup" + +#~ msgid "The style used for Completion" +#~ msgstr "De voor het voltooien gebruikte stijl" + +#~ msgid "Path to the Scilab executable" +#~ msgstr "Path naar het uitvoerbaar bestand voor Scilab" + +#~ msgid "" +#~ "Scilab version of the master branch of the Scilab's repository is " +#~ "compatible" +#~ msgstr "" +#~ "Versie van Scilab uit de master branch van Scilab's repository is " +#~ "compatibel" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Opdrachtinvoer invoegen voor" + +#~ msgid "Command Entry Before" +#~ msgstr "Opdrachtinvoer vóór" + +#~ msgid "GroupBox" +#~ msgstr "GroupBox" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "Voor deze test is een werkende %1-backend nodig" + +#~ msgid "Form" +#~ msgstr "Formulier" + +#~ msgid "Help" +#~ msgstr "Help" + +#~ msgid "Show Help Panel" +#~ msgstr "Helppaneel tonen" + +#~ msgid "Uploading successful" +#~ msgstr "Uploaden is gelukt" + +#~ msgid "Error uploading File %1" +#~ msgstr "Fout bij het uploaden van bestand %1" diff --git a/po/nl/docs/cantor/index.docbook b/po/nl/docs/cantor/index.docbook new file mode 100644 index 0000000..effe63a --- /dev/null +++ b/po/nl/docs/cantor/index.docbook @@ -0,0 +1,1392 @@ + +ATEX"> + + +]> + + + +Handbook van &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +&Jaap.Woldringh; + + + +2009 +Alexander Rieder + +&FDLNotice; + +2016-08-25 +Toepassingen 16.12 + + +De toepassing &cantor; heeft als doel een goed werkblad aan te bieden voor andere wiskundige Free Software-pakketten. + + + +KDE +kdeedu +wiskunde +wiskunde +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + + + + +Inleiding + +Met de toepassing &cantor; kunt u uw favoriete wiskundige programma's gebruiken in een mooie werkblad-omgeving die in &kde; is geïntegreerd. Er zijn dialogen die u helpen bij veel voorkomende taken, en het maakt het u mogelijk uw werkblad met anderen te delen. + + + +Het gebruik van &cantor; + +Schermafdruk: +Hier is een schermafdruk van &cantor; + + + + + + Schermafdruk + + + + + + + +Eigenschappen van &cantor; + + Intuïtief werkblad voor het berekenen van expressies. + Geplotte grafieken worden in het werkblad getoond. + Eenvoudige pluginstructuur waardoor verschillende backends kunnen worden toegevoegd. + Integratie voor GHNS (Vers van de pers), waardoor u voorbeeldwerkbladen kunt downloaden (of uploaden). + Weergeven van wiskundige formules met &latex;. + Backendafhankelijke syntaxis-accentuering + Pluginafhankelijke hulpdialogen die u bij veel voorkomende taken helpen, zoals het integreren van een functie, of het invoeren van een matrix. + + + + +De backends van &cantor; +&cantor; laat u uit diverse backends kiezen, die u ermee wilt gebruiken. De keus is afhankelijk van wat u wilt doen. +Momenteel zijn de volgende backends beschikbaar: + + Sage: + + Sage is een vrij open-source wiskundig softwaresysteem, met een GPL-licentie. Het combineert de mogelijkheden van veel bestaande open-sourcepakketten, in een algemene interface op basis van Python. Zie http://sagemath.org voor meer informatie. + + + + Maxima: + + Maxima is een systeem voor het hanteren van symbolische en numerieke expressies, waaronder differentiëren, integreren, Taylorreeksen, Laplace transformaties, gewone differentiaalvergelijkingen, systemen van lineaire vergelijkingen, veeltermen, verzamelingen, lijsten, vectoren, matrices, en tensoren. Maxima geeft numerieke antwoorden met een grote nauwkeurigheid, door het gebruik van exacte breuken, gehele getallen van een willekeurig grote nauwkeurigheid, en decimale getallen met een variabele nauwkeurigheid. Maxima kan functies en gegevens plotten in twee en drie dimensies. See http://maxima.sourceforge.net voor meer informatie. + + + + R: + + R is een taal en omgeving voor statistische berekeningen en grafieken, te vergelijken met die van S. Het levert een grote verscheidenheid aan statistische (lineaire en niet- lineaire modellen, klassieke statistische tests, analyse van tijdreeksen, klassificeren, clusteranalyse, ...) en grafische technieken, en kan heel goed worden uitgebreid. De S-taal wordt vaak gebruikt voor onderzoek in statistische methoden, en R is de open-source mogelijkheid hiervoor. Zie http://www.r-project.org voor meer informatie. + + + + Julia: + + Julia is een zeer krachtige dynamische programmeertaal van hoog niveau voor technische berekeningen. De syntax is bekend voor wie ervaring heeft met andere technische omgevingen. De compiler is geavanceerd, kent een verdeelde parallelle verwerking, en is numeriek nauwkeurig, Er is een uitvoerige wiskundige bibliotheek aanwezig. Meer informatie vindt u op Julia documentation. + + + + &kalgebra;: + + &kalgebra; is een grafische rekenmachine, op basis van MathML, die wordt meegeleverd in het Education project van &kde;. Zie http://edu.kde.org/kalgebra/ voor meer informatie. + + + + Qalculate!: + + Qalculate! is niet echt een gewone softwareversie van de goedkoopste rekenmachine. Het doel van Qalculate! is volledig gebruik te maken van de uitstekende interface, rekenkracht en toepasbaarheid van moderne computers. Hierbij staat in Qalculate! het invoeren van expressies centraal. In plaats van dat elk getal in een wiskundige expressie (uitdrukking) apart wordt ingevoerd, kunt u de expressie direct in zijn geheel invoeren, en die later aanpassen. Het interpreteren van de expressies is flexibel en fouten worden niet direct afgestraft. Als u niettemin toch iets verkeerds doet, laat Qalculate! u dit weten. Niet helemaal oplosbare expressies echter worden niet als fout beoordeeld. Qalculate zal expressies zo veel mogelijk vereenvoudigen. Naast getallen en wiskundige bewerkingen kan in een expressie elke combinatie van variabelen, eenheden en functies voorkomen. Zie ook http://qalculate.sourceforge.net/ voor meer informatie. + + + + Python2 and Python3: + + Python is een opvallend krachtige dynamische programmeertaal die op veel gebieden wordt toegepast. Er zijn diverse pakketten voor beschikbaar voor wetenschappelijk programmeren. + Python wordt uitgegeven onder de licentie van de Python Software Foundation (GPL compatibel). Zie de officiële website voor verdere informatie. + + Door deze backend bevat het hoofdmenu van &cantor; een extra ingang, namelijk Pakket. In dit menu kunt u alleen PakketPakket importeren kiezen. U kunt hiermee Pythonpakketten in het werkblad importeren. + + + + + Scilab: + + Scilab is vrije en cross-platform software voor numerieke berekeningen, en een hogere numeriek georiënteerde programmeertaal. + Scilab wordt uitgegeven onder de CeCILL licentie (overeenkomend met GPL). Zie http://www.scilab.org/ voor meer informatie. + + Om van deze backend gebruik te kunnen maken, moet de geïnstalleerde versie van Scilab 5.5 of hoger zijn. + + + + + Octave: + + &GNU; Octave is een hogere programmeertaal, speciaal geschikt voor numerieke berekeningen. Het bevat een gemakkelijk te gebruiken interface voor de opdrachtregel, voor het numeriek oplossen van lineaire en niet-lineaire berekeningen, en voor het uitvoeren van andere numerieke experimenten op een manier die het meest lijkt op die van MATLAB. Zie http://www.gnu.org/software/octave/ voor meer informatie. + + + + Lua: + + Lua is een snelle kleine scripttaal, met een eenvoudige procedurele syntaxis. Er zijn verschillende wis- en natuurkundige bibliotheken voor Lua beschikbaar. + Zie http://www.lua.org/ voor meer informatie. + Deze backend ondersteunt luajit 2. + + + + + + + +De werkruimte van &cantor; + + + Schermafbeelding van de werkruimte van &cantor; + + + + + + Schermafbeelding van de werkruimte van &cantor; + + + + +De werkblad-interface van &cantor; heeft drie gedeelten: + Een tabbladbalk, waarin u tussen de open werkbladen kunt schakelen. + Een hulp-paneel, waarin u hulp krijgt voor een specifieke opdracht, na het intypen van "? opdracht". + Een paneel Variabelenbeheer waarin u de lijst van alle beschikbare variabelen in het huidige werkblad kunt zien. De panelen Help en Variabelenbeheer worden als tabbladen in een zijvak van een &cantor;-venster getoond. Variabelenbeheer kan alleen gebruikt worden voor de backends van Maxima (indien ingeschakeld op pagina Instellingen&cantor; instellen... Maxima), &kalgebra;, Octave, Python2, Python3, Qalculate, en Scilab. + Het werkblad zelf. + + + +Het werkblad +Het werkblad is het gebied waarin u in &cantor; werkt. U kunt hierin expressies invoeren, de backend berekeningen laten doen, en de antwoorden bekijken. De opdrachten die u kunt geven hangen af van de gebruikte backend, dus moet u daarvan de syntaxis kennen (de knop Help tonen voert u daar rechtstreeks naar toe). Indien u de (naam van de) opdracht kent, maar er meer over wilt weten, kunt u "? opdracht" intoetsen, waarna u rechts van het werkblad informatie hierover krijgt. Als u wat voorbeelden wilt zien van werkbladen, kunt u die ophalen met Voorbeeldwerkbladen ophalen in het menu Bestand. +Om elk opdrachtitem van het werkblad te besturen kunt u de besturingsknoppen in het rechter gedeelte van het werkblad gebruiken door met de muiscursor over het itemveld te bewegen. Er zijn drie basis acties voor elk item: Evalueer item om het resultaat van berekeningen voor het item bij te werken, Item verslepen om het item te verplaatsen naar de andere plaats van het huidige werkblad en Item verwijderen om het item uit het huidige werkblad te verwijderen. +Instellingen voor lettertypes en uitlijning van items in het werkblad kunnen worden gewijzigd met een werkbalk boven het werkblad. + + Instellingen + In het menu Instellingen kunt u enkele instellingen van het uiterlijk van het huidige werkblad wijzigen. + + + Zetwerk maken met &latex; + + Met deze instelling wordt de weergave van expressies gewijzigd. Indien actief, wordt die door &latex; in een visueel aantrekkelijke vorm gegoten. Bijvoorbeeld, 3*x^2*sqrt(2)*x+2/3 wordt + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Syntaxisaccentuering + + Door syntaxisaccentuering wordt de leesbaarheid van (programma)code verbeterd, door de sleutelwoorden (keywords) en bij elkaar passende haakjes in verschillende kleuren weer te geven. + + + + Tab-voltooiing + + Wanneer deze actief is, toont &cantor; de mogelijke voltooiingen van de opdracht die u aan het intypen bent, wanneer u op de tab-toets drukt. Wanneer er maar één mogelijkheid overblijft, wordt de rest van de opdracht voor u aangevuld. + + + + Regelnummers + + Met deze instelling regelt u het geven van nummers aan de verschillende expressies. Hierdoor kunt u vorige antwoorden weer terughalen - in Maxima, bijvoorbeeld, doet u dit met de opdracht %O1. + + + + Werkblad animeren + + Deze instelling bestuurt of de verschillende animaties zullen worden gebruikt om wijzigingen op een werkblad te accentueren. + + + + + + + +De hulpdialogen +Er zijn verschillende dialogen beschikbaar in &cantor; om het uitvoeren van wat basisbewerkingen te vereenvoudigen. +Deze dialogen zijn beschikbaar in het hoofdmenu. Elke backend kent zijn eigen hulpdialogen. + +De dialoog aanmaken matrix + + Schermafbeelding dialoog in &cantor; voor aanmaken matrix + + + + + + Schermafbeelding dialoog in &cantor; voor aanmaken matrix + + + +In deze dialoog kunnen matrices worden ingevoerd. Dimensies en elementen van een matrix kunnen worden opgegeven. +Tijdens de invoer kan snel tussen de cellen worden genavigeerd met behulp van de -toets. + + +Dialoog voor matrixbewerkingen + + Schermafbeelding dialoog in &cantor; voor invoeren matrix + + + + + + Schermafbeelding dialoog in &cantor; voor invoeren matrix + + + +In deze dialoog kan de naam worden ingevoerd van de matrix waarvan de eigenvectoren, eigenwaarden of inverse matrix moeten worden berekend. De standaard waarde (%) wordt gebruikt voor verwijzing naar de vorige berekening of invoer. + + +Differentiatie dialoog + + Schermafbeelding differentiatie dialoog van &cantor; + + + + + + Schermafbeelding differentiatie dialoog van &cantor; + + + +In deze dialoog kan de te differentiëren functie worden ingevoerd, de naam van de variabele en de orde van de afgeleide. + + +Integratie dialoog + + Schermafbeelding integratie dialoog van &cantor; + + + + + + Schermafbeelding integratie dialoog van &cantor; + + + +In deze dialoog kan de te integreren functie worden ingevoerd, de naam van de variabele en de de integratiegrenzen voor een bepaalde integraal. + + +Dialoog voor oplossen vergelijkingen + + Schermafbeelding van &cantor; voor oplossen vergelijkingen + + + + + + Schermafbeelding van &cantor; voor oplossen vergelijkingen + + + +In deze dialoog kunnen de op te lossen vergelijkingen worden ingevoerd (elke vergelijking op een aparte regel), en de te berekenen variabelen (door komma's gescheiden). + + +Dialoog importeren pakketten + + Schermafbeelding van &cantor; dialoog importeren pakketten + + + + + + Schermafbeelding van &cantor; dialoog importeren pakketten + + + +In deze dialoog kan de naam van het te importeren pakket worden ingevoerd (⪚ numpy voor Python). + + +Plot dialoog + + Schermafbeelding van &cantor; voor plot dialoog (tabblad Functies) + + + + + + Schermafbeelding van &cantor; voor plot dialoog (tabblad Functies) + + + +De opties in deze dialoog worden over twee tabbladen verdeeld. In het tabblad Functies kunnen de te plotten functies worden ingevoerd. +Een nieuwe functie wordt ingevoerd door op de knop Toevoegen te klikken. Dubbelklik op de cel Naam, en voer de naam in, dubbelklik op de cel Expressie en voer de expressie in van de functie. + + Schermafbeelding van &cantor; voor plot dialoog (tabblad Opties) + + + + + + Schermafbeelding van &cantor; voor plot dialoog (tabblad Opties) + + + +In het tabblad Opties kunnen de opties worden ingevoerd voor plotten en legenda. U kunt bijna elke plotoptie zo aanpassen dat er een mooie plot ontstaat. + + +Dialoog 2D plot + + Schermafbeelding van &cantor; voor dialoog 2D plot + + + + + + Schermafbeelding van &cantor; voor dialoog 2D plot + + + +In deze dialoog kan de expressie van de functie worden ingevoerd, de variabele, en de grenzen van de variabele. + + +3D plot dialoog + + Schermafbeelding van &cantor; voor dialoog 3D plot + + + + + + Schermafbeelding van &cantor; voor dialoog 3D plot + + + +In deze dialoog kan de expressie van de functie worden ingevoerd, de variabele, en de grenzen van de variabele. + + + + + +Overzicht van de opdrachten + + +Het hoofdvenster van &cantor; + +&cantor; heeft de gemeenschappelijke menu-items van &kde;, voor meer informatie lees het hoofdstuk Menu van &kde; Fundamentals. + +Hieronder is de lijst van aanvullende of speciale menu-onderdelen in &cantor;. Let u er wel op dat sommige menu's alleen zichtbaar zijn voor backends die daarvan gebruik maken. + + +Het menu Bestand + + + + &Ctrl;N Bestand Nieuw +Maakt een nieuw werkblad aan met de standaard backend. + + +Bestand Nieuw Backend +Maakt een nieuw werkblad aan met de gekozen backend. + + +Bestand Voorbeeldwerkbladen downloaden +Opent de dialoog voor het downloaden van voorbeelden die door andere gebruikers van &cantor; ter beschikking zijn gesteld, met Interessante zaken ophalen. + + +Bestand Voorbeeld openen +Opent de dialoog voor het inlezen van een voorbeeld. De voorbeelden moeten eerst worden gedownload met Bestand Voorbeeldwerkbladen downloaden beforehand. + + +Bestand Opslaan als platte tekst... +Hiermee kunt het huidige werkblad als platte tekst opslaan. + + +Bestand Naar LaTeX exporteren +Hiermee kunt het huidige werkblad als een &latex;-document opslaan. + + +Bestand Werkblad publiceren +Opent de dialoog voor het publiceren van uw huidige werkblad, zodat het beschikbaar wordt voor andere gebruikers van &cantor;, met Interessante zaken ophalen. + + +Bestand Script uitvoeren +Hiermee kunt u de scripts inlezen en uitvoeren voor de huidige backend. + + + + + + + +Het menu Beeld + + + + &Ctrl;+ Beeld Inzoomen +Op het huidige werkblad 10% inzoomen. + + + &Ctrl;- Beeld Uitzoomen +Op het huidige werkblad 10% uitzoomen. + + +Beeld Scriptbewerker tonen +Opent het venster voor het bewerken van scripts voor de huidige backend. + + +Beeld Panelen Help +Omschakelen van het tonen van het tabblad Help in het zijvak. + + +Beeld Panelen Variabelenbeheer +Omschakelen van het tonen van het tabblad Beheerder van variabelen in het zijvak. + + + + + + +Het menu Werkblad + + + +Werkblad Werkblad doorrekenen +Activeert het doorrekenen van het gehele werkblad. + + + &Shift;Return Werkblad Invoer berekenen +Start het berekenen van de huiduge invoer. + + + &Ctrl;Return Werkblad Opdrachtinvoer invoegen +Voegt een nieuwe opdracht toe onder de huidige positie van de muisaanwijzer. + + +Werkblad Tekstinvoer invoegen +Voegt een nieuwe tekstinvoer toe onder de huidige positie van de muisaanwijzer. + + +Werkblad Latex-invoer invoegen +Voegt een Latex-invoer toe onder de huidige positie van de muisaanwijzer.. + + +Worksheet Insert Pagina-einde +Voegt een pagina-einde in onder de huidige positie van de muisaanwijzer. + + + &Shift;Del Werkblad Huidige invoer wissen +Wist de huidige invoer in het werkblad. + + + + + + +Het menu Lineaire algebra + + + +Lineaire algebra Matrix aanmaken +Opent de dialoog matrix aanmaken. + + +Lineaire algebra Eigenwaarden berekenen +Opent de dialoog invoeren naam matrix voor de berekening van de eigenwaarden en dimensies van de meervoudigheden van de eigenwaarden, in de juiste volgorde. + + +Lineaire algebra Eigenvectoren berekenen +Opent de dialoog invoeren naam matrix voor de berekening van de eigenwaarden en dimensies van de meervoudigheden van de eigenwaarden, en eigenvectoren in de juiste volgorde. + + +Linaire algebra Inverse matrix +Opent de dialoog invoeren naam matrix voor de berekening van de inverse van de matrix. + + + + + + +Het menu Bereken + + + +Bereken Differentëren +Opent de dialoog differentiatie parameters. + + +Bereken Integratie +Opent de dialoog integratie parameters. + + +Bereken Vergelijkingen oplossen +Opent de dialoog invoeren parameters voor het oplossen van lineaire en niet-lineaire vergelijkingen. + + + + + + +Het menu Pakketten + + + +Pakketten Pakket importeren +Opent de dialoog pakket importeren. + + + + + + +Het menu Plot + + + +Plot Plot +Opent the dialoog plotparameters . + + +Plot Plot 2D +Opent de dialoog plotparameters. + + +Plot Plot 3D +Opent de dialoog plotparameters. + + + + + + +De menu's Instellingen en Help +&cantor; heeft de gewone &kde;-menu's voor Instellingen en Help. Voor meer informatie lees de secties over het menu Instellingen en Help in de &kde; Fundamentals. + + + + + + + +Vragen en antwoorden + + + + Het menu Weergeven met LaTeX is niet beschikbaar + Niet elke backend ondersteunt elke optie. De huidige versie ondersteunt &latex;-uitvoer voor de backends Maxima, Qualculate! en Sage. + + + Ik heb Sage/Maxima geïnstalleerd, of andere ondersteunde CAS, maar zie de bijbehorende backend niet. (CAS: Computer Algebra Systeem) + + Een mogelijke verklaring is dat &cantor; de juiste locatie niet kan detecteren. Ga naar de dialoog Instellingen &cantor; instellen... en wijzig het Pad naar de juiste backend-pagina van de toepassing. + + + + Wat een rare naam is dit - wat heeft die nu met wiskunde te maken? + &cantor; is genoemd naar de Duitse wiskundige Georg Cantor, de bedenker van de verzamelingentheorie. + + + + + + +Dankbetuiging en licentie + +&cantor; +Programma copyright 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Documentatie Copyright © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +&meld.fouten;&vertaling.freek;&vertaling.jaap; +&underFDL; &underGPL; + +&documentation.index; + + + diff --git a/po/nn/cantor.po b/po/nn/cantor.po new file mode 100644 index 0000000..72e9fb1 --- /dev/null +++ b/po/nn/cantor.po @@ -0,0 +1,3128 @@ +# Translation of cantor to Norwegian Nynorsk +# +# Eirik U. Birkeland , 2010. +# Karl Ove Hufthammer , 2012, 2016. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2016-01-31 14:32+0100\n" +"Last-Translator: Karl Ove Hufthammer \n" +"Language-Team: Norwegian Nynorsk \n" +"Language: nn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Eirik U. Birkeland,Karl Ove Hufthammer" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "eirbir@gmail.com,karl@huftis.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pause" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Start" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stopp" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Lagra resultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Avansert plotting" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Plott" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Uttrykk:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Fleire val:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Plott" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktivt valt" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Rekn ut" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Deriver" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabel:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "×" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Gongar: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pakke" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importer pakke" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakke:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrer" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Nedre grense:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Øvre grense:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "bestemt integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Lineær algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Lag matrise" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolonnar:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rader:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Rekn ut eigenverdiar" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrise:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Rekn ut eigenvektorar" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Interer matrise" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Plott i 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Namn" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minst:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Høgst:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Plott i 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. variabel" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. variabel" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Køyr skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Løys likningar" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Likningar:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variablar:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Vel kva motor som skal brukast:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Gjer denne til standardmotor" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrer plott i arbeidsarket" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Liste over skript som skal køyrast automatisk ved øktstart" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Feil: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Skript som skal køyrast automatisk" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua er eit lite og kjapt skriptspråk, med ein enkel syntaks. Det finst " +"fleire Lua-bibliotek for matematikk og forsking.

    Denne motoren støttar " +"LuaJIT 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Adresse til LuaJIT-programfila" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua-skriptfil (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Adresse til LuaJIT-programfila:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima er eit system for manipulering av symbolske og numeriske uttrykk, som " +"derivering, integrering, Taylor-utvikling, Laplace-transformasjonar, enkle " +"differensiallikningar, system med lineære likningar, polynom, mengder, " +"lister, vektorar, matriser og tensorar. Maxima gjev numeriske resultat med " +"høg presisjon ved å bruka eksakte brøkar og heil- og flyttal med vilkårleg " +"presisjon. Maxima kan plotta funksjonar og data i to og tre dimensjonar. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Adresse til Maxima-programfila" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Bruk variabelhandsaming" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Feil: For mange */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Feil: For mange /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Feil: venta \" før ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima-batchfil (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Klarte ikkje starta Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima krasja. Startar på nytt …" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima har krasja to gongar på kort tid. Stoppar omstartinga." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Feil – Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funksjon" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Adresse til Maxima-programfila:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrer plott i arbeidsarket" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "La Cantor følgja oppretting/sletting av variablar" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave er eit høgnivå-språk mest meint for numeriske utrekningar.
    Det har eit praktisk kommandolinje-grensesnitt for å løysa lineære og ikkje-" +"lineære likningar numerisk, og for å utføra andre numeriske eksperiment ved " +"bruk av eit språk som for det meste er kompatibelt med Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Adresse til Octave-programfila" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave-skriptfil (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaksfeil" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Adresse til Octave-programfila:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python-skriptfil (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python er eit særs kraftig dynamisk programmeringsspråk som er teke i " +"bruk på mange ulike bruksområde. Det finst fleire Python-pakkar for " +"vitskapleg programmering.

    Denne bakgrunnsmotoren støttar Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python er eit særs kraftig dynamisk programmeringsspråk som er teke i " +"bruk på mange ulike bruksområde. Det finst fleire Python-pakkar for " +"vitskapleg programmering.

    Denne bakgrunnsmotoren støttar Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor – plottevindauge" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funksjonar" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Tittel" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Uttrykk" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Legg til" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Fjern" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Tøm liste" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkt" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkt og linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Boksar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Steg" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Lysestakar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Prikkar" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Glatting" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ingen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monoton" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturlege kubiske spline-kurver" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier-kurver (monotone)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funksjonsområde" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-område" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "S&lingsrate" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "S&tegstorleik" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Val" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Tittel på plott" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Merkelapp på x-akse" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Merkelapp på y-akse" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Plassering til figurforklaring" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Gøym figurforklaring" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Oppe til venstre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Oppe til høgre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Nedre til venstre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Nede til høgre" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Nedanfor" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Utanfor" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Vis rutenett" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Vis heil ramme" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Bruk fargar" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Vis inni" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmisk x-skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmisk y-skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Filval" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Lagra plott til fil" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Filtype" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Finn ut frå filnamn" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"«Qalculate!» er ikkje ein vanleg dataversjon av den billegaste kalkulatoren " +"som er å få. Programmet utnyttar krafta, fleksibiliteten og " +"brukargrensesnittet i moderne datamaskiner. Hovudvekta er på inntasting av " +"matematiske uttrykk. I staden for å tasta inn kvart tal i eit matematisk " +"uttrykk for seg, kan du skriva inn heile uttrykket, og endra det sidan. " +"Uttrykkstolkinga er fleksibel og feiltolerant, og viss du likevel gjer noko " +"som er feil, vil «Qalculate!» seia frå om det. Men uttrykk som ikkje kan " +"verta fullt rekna ut er ikkje feil. «Qalculate!» vil då forenkla så mykje " +"som mogleg, og svara med eit uttrykk. Forutan tal og rekneoperatorar kan eit " +"uttrykk innehalda ein vilkårleg kombinasjon av variablar, einingar og " +"funksjonar." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Om og korleis einingar skal gjerast om automatisk. Viss det er kryssa av " +"her, vert dei gjorde om til dei mest passande SI-einingane (færrast " +"einingar)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Standard vinkeleining for trigonometriske funksjonar." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Grunntal for tal som vert tolka og vert rekna ut." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Om resultatet av utrekninga skal forenklast eller faktoriserast." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Om rasjonale tal skal visast med desimalar, som brøk eller ein mellomting." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Bruk tre prikkar for å merkera at dei gjentekne siffera i eit tal held fram " +"for alltid, i staden for å runda av (for eksempel vert 2/3 vert vist som " +"0,666666… i staden for 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Bruk alle desimale SI-prefiks. Viss det ikkje er kryssa av her, vert prefiks " +"som ikkje er multiplum av tusen (centi, desi, deka, hekto) ikkje brukte " +"automatisk." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "FEIL" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "uttrykk" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolsk" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "tal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Vel kva data som skal visast i hjelpebobler." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Generelt" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Som brøk" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinert" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Talvising:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Rein" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Vitskapleg" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "På" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Vinkeleining:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Gradar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradianar" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Forenkla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktoriser" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R er eit språk og grensesnitt for statistisk utrekning og grafikk. Det har " +"likskapstrekk med S-språket og miljøet.
    Det omfattar ei rekkje " +"statistiske (lineær og ikkje-lineær modellering, klassiske statistiske " +"testar, tidsserieanalyse, klassifisering, klyngjeanalyse m.m.) og grafiske " +"teknikkar, og det er i høg grad utvidbart. S-språket er ofte føretrekt når " +"det gjeld forsking innanfor statistisk metodologi, og R er eit alternativ " +"under open kjeldekode til slik aktivitet." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Feil ved opning av fila %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Feil ved tolking av kommando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage er ei fritt matematikkprogramvare under open kjeldekode som er " +"lisensiert under GPL.
    Det kombinerer funksjonalitet frå mykje anna fri " +"programvare i eit Python-basert grensesnitt." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Adresse til Sage-programfila" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultatet av %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Det førre resultatet var: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage-prosessen krasja medan uttrykket vart evaluert" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage-prosessen krasja" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage-prosessen vart avslutta medan uttrykket vart evaluert" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage-prosessen vart avslutta" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Klarte ikkje starta Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Adresse til Sage-programfila:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Last ned eksempelarbeidsark" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Opna eksempel" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Opna fil" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Feil" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Økt %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Klarte ikkje finna Cantor-delen." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Lagra prosjekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Motoren som vert brukt som standard" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Bruk skriftformatering som standard" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Bruk syntaksmerking som standard" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Bruk nummerering av uttrykk som standard" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Motoren %1 er ikkje installert" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Det er problem med %1-motoren, sjå til at\n" +"programmet er rett sett opp eller installer dei nødvendige pakkane.\n" +"Du kan ikkje redigera arbeidsarket." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Evaluer arbeidsarket" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Bruk LaTeX-skriftformatering" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaksmerking" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Fullføring med «Tab»" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Linjenummer" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Start motoren om att" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Evaluer oppføring" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Vis %1-hjelp" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Vis skriptredigering" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantor-del" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Lagra som" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Lagra" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Avbryt" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Reknar ut …" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Klar" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Øktfeil: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Klar" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Førebur …" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Namnlaus" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Vil du lasta opp det gjeldande arbeidsarket til ein open vevtenar?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Spørsmål – Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Arbeidsarket er ikkje lagra. Du bør lagra det før du lastar opp." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Åtvaring – Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Denne motoren støttar ikkje skript." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Rediger" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vis" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Arbeidsark" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fil" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Innstillingar" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Avbroten" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Finn:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Neste" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Byt ut" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Byt ut &alle" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Skil mellom store og små bokstavar" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Biletinnstillingar" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Opna" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Utskriftsstorleik" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr " pikslar" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Adresse til LaTeX-programfila" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Adresse til dvips-programfila" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE-grensesnitt for matematiske program" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Grensesnitt" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Vegen til matematikk i KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Fann ingen tekstredigeringskomponent for KDE.\n" +"Sjå til at KDE er rett installert." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Kommandoar" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultat" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Feil" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Bruk syntaksmerking" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Vis linjenummer" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Vis oppteikna" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Vis kode" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Klarar ikkje teikna opp eps-fila. Du treng kanskje fleire pakkar." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Klarar ikkje skriva til fila %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Feil ved lagring av fila %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sideskift" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Tekst&farge …" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Framhevingsfarge …" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Skrift" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Skrift&storleik" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Halvfeit" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursiv" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Understreking" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Overstreking" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Venstrejuster" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Venstre" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Midtstill" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Midtstill" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "&Høgrejuster" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Høgre" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Blokkjuster" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Blokk" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "" diff --git a/po/pa/cantor.po b/po/pa/cantor.po new file mode 100644 index 0000000..6fa441d --- /dev/null +++ b/po/pa/cantor.po @@ -0,0 +1,3210 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# A S Alam , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2010-01-27 09:08+0530\n" +"Last-Translator: A S Alam \n" +"Language-Team: ਪੰਜਾਬੀ \n" +"Language: pa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ਅਮਨਪਰੀਤ ਸਿੰਘ ਆਲਮ" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "aalam@users.sf.net" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, fuzzy, kde-format +#| msgid "&Plot" +msgid "Plot" +msgstr "ਵਾਹੋ(&P)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "ਸਮੀਕਰਨ:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "ਵਾਹੋ(&P)" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "ਗਣਨਾ(&C)" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "ਵੇਰੀਬਲ:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "ਵਾਰ: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "ਲੀਨੀਅਰ ਐਲਜਬਰਾ(&L)" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "ਕਾਲਮ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "ਕਤਾਰਾਂ:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "ਮੈਟਰਿਕਸ:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D ਵਾਹੋ" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "ਵੇਰੀਬਲ" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "ਨਾਂ" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "ਘੱਟੋ-ਘੱਟ:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "ਵੱਧੋ-ਵੱਧ:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D ਵਾਹੋ" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1ਲਾਂ ਵੇਰੀਬਲ" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "ਸਕ੍ਰਿਪਟ ਚਲਾਓ" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "ਸਮੀਕਰਨਾਂ ਹੱਲ ਕਰੋ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "ਸਮੀਕਰਨਾਂ:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "ਵੇਰੀਬਲ:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    ਹੋਰ ਜਾਣਾਕਰੀ ਲਈ %3 ਵੇਖੋ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "ਵਰਤਣ ਲਈ ਬੈਕਐਂਡ ਚੁਣੋ:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "ਇਸ ਨੂੰ ਡਿਫਾਲਟ ਬੈਕਐਂਡ ਬਣਾਓ" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "ਗਲਤੀ: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, fuzzy, kde-format +#| msgid "Show Script Editor" +msgid "Scripts to autorun" +msgstr "ਸਕ੍ਰਿਪਟ ਐਡੀਟਰ ਵੇਖੋ" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "ਗਲਤੀ - ਕੇਨਟੋਰ" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "function" +msgstr "ਸਮੀਕਰਨਾਂ:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Octave script file (*.m)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "ਸੰਟੈਕਸਟ ਗਲਤੀ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "Functions" +msgstr "ਸਮੀਕਰਨਾਂ:" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Expression" +msgstr "ਸਮੀਕਰਨ:" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Remove" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, fuzzy, kde-format +#| msgid "Variables:" +msgid "Clear List" +msgstr "ਵੇਰੀਬਲ:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, fuzzy, kde-format +#| msgid "Variable" +msgid "X variable" +msgstr "ਵੇਰੀਬਲ" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "expression" +msgstr "ਸਮੀਕਰਨ:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, fuzzy, kde-format +#| msgid "Variable:" +msgid "value" +msgstr "ਵੇਰੀਬਲ:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, fuzzy, kde-format +#| msgid "Line Numbers" +msgid "number" +msgstr "ਲਾਈਨ ਨੰਬਰ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, fuzzy, kde-format +#| msgid "Defaults:" +msgid "default: %1" +msgstr "ਡਿਫਾਲਟ:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Load variables from a file" +msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "ਆਮ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Precision" +msgstr "ਸਮੀਕਰਨ:" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, fuzzy, kde-format +#| msgid "&Plot" +msgid "Plotting" +msgstr "ਵਾਹੋ(&P)" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show grid:" +msgstr "ਕੋਡ ਵੇਖੋ" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of R, please check if there is a translated " +#| "version and use the correct url" +#| msgid "http://wiki.r-project.org/rwiki/doku.php?id=rdoc:rdoc" +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://wiki.r-project.org/rwiki/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "%1 ਫਾਇਲ ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 ਦਾ ਨਤੀਜਾ" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "ਕੇਨਟੋਰ" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "*.R|R ਸਕ੍ਰਿਪਟ ਫਾਇਲ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "ਉਦਾਹਰਨ ਵਰਕਸ਼ੀਟ ਡਾਊਨਲੋਡ ਕਰੋ" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "ਉਦਾਹਰਨ ਖੋਲ੍ਹੋ(&O)" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|ਕੇਨਟੋਰ ਵਰਕਸ਼ੀਟ" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "&Open Example" +msgid "Open file" +msgstr "ਉਦਾਹਰਨ ਖੋਲ੍ਹੋ(&O)" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +msgstr[1] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "ਗਲਤੀ" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "ਸ਼ੈਸ਼ਨ %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "ਕੇਨਟੋਰ" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "ਬੈਕਐਂਡ, ਜੋ ਡਿਫਾਲਟ ਵਰਤਿਆ ਜਾਵੇਗਾ" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "ਬੈਕਐਂਡ %1 ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "ਲਾਈਨ ਨੰਬਰ" + +#: cantor_part.cpp:270 +#, fuzzy, kde-format +#| msgid "&Worksheet" +msgid "Animate Worksheet" +msgstr "ਵਰਕਸ਼ੀਟ(&W)" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "ਬੈਕਐਂਡ ਮੁੜ-ਚਾਲੂ" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Insert Markdown Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: cantor_part.cpp:307 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Insert Latex Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "%1 ਮੱਦਦ ਵੇਖੋ" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "ਸਕ੍ਰਿਪਟ ਐਡੀਟਰ ਵੇਖੋ" + +#: cantor_part.cpp:350 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show Completion" +msgstr "ਕੋਡ ਵੇਖੋ" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save" +msgid "Save as" +msgstr "ਸੰਭਾਲੋ" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "ਸੰਭਾਲੋ" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "ਬੈਕਐਂਡ ਮੁੜ-ਚਾਲੂ" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "ਗਿਣਤੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "ਤਿਆਰ" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "ਸ਼ੈਸ਼ਨ ਗਲਤੀ: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "ਬਿਨ-ਨਾਂ" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "ਸਵਾਲ - ਕੇਨਟੋਰ" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "ਚੇਤਾਵਨੀ - ਕੇਨਟੋਰ" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "ਵੇਖੋ(&V)" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "ਵਰਕਸ਼ੀਟ(&W)" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "ਫਾਇਲ(&F)" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, fuzzy, kde-format +#| msgid "New" +msgid "&New" +msgstr "ਨਵਾਂ" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "ਸੈਟਿੰਗ(&S)" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "ਤਿਆਰ" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "ਦਖ਼ਲ ਦਿੱਤਾ" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot load image %1" +msgstr "ਫਾਇਲ %1 ਲਿਖੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, fuzzy, kde-format +#| msgid "&Settings" +msgid "Image Settings" +msgstr "ਸੈਟਿੰਗ(&S)" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "ਖੋਲ੍ਹੋ" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, fuzzy, kde-format +#| msgid "x" +msgid "px" +msgstr "x" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show LaTeX code" +msgstr "ਕੋਡ ਵੇਖੋ" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, fuzzy, kde-format +#| msgid "Name" +msgctxt "@title:column" +msgid "Name" +msgstr "ਨਾਂ" + +#: lib/defaultvariablemodel.cpp:78 +#, fuzzy, kde-format +#| msgid "Variable:" +msgctxt "@title:column" +msgid "Value" +msgstr "ਵੇਰੀਬਲ:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "ਗਣਿਤ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ KDE ਫਰੰਟਐਂਡ" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "ਬੈਕਐਂਡ ਮੁੜ-ਚਾਲੂ" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "" + +#: main.cpp:93 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Octave backend" +msgstr "ਬੈਕਐਂਡ ਮੁੜ-ਚਾਲੂ" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, fuzzy, kde-format +#| msgid "Interrupted" +msgid "Interface" +msgstr "ਦਖ਼ਲ ਦਿੱਤਾ" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "ਕੇਨਟੋਰ" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "ਇਹ ਬੈਕਐਂਡ ਵਰਤੋਂ" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "ਖੋਲ੍ਹਣ ਲਈ ਡੌਕੂਮੈਂਟ" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "%1 ਫਾਇਲ ਖੋਲ੍ਹਣ ਦੌਰਾਨ ਗਲਤੀ" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    ਕੇਨਟੋਰ

    ਗਣਿਤ ਸਿੱਖਣ ਦਾ KDE ਢੰਗ" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, fuzzy, kde-format +#| msgid "Name" +msgid "Name:" +msgstr "ਨਾਂ" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, fuzzy, kde-format +#| msgid "Variable:" +msgid "Value:" +msgstr "ਵੇਰੀਬਲ:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Add new variable" +msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Load Variables" +msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, fuzzy, kde-format +#| msgid "1st Variable" +msgid "Store Variables" +msgstr "1ਲਾਂ ਵੇਰੀਬਲ" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, fuzzy, kde-format +#| msgid "Variables:" +msgid "Clear Variables" +msgstr "ਵੇਰੀਬਲ:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, fuzzy, kde-format +#| msgid "Question - Cantor" +msgid "Confirmation - Cantor" +msgstr "ਸਵਾਲ - ਕੇਨਟੋਰ" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "2nd Variable" +msgid "Load file" +msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#: resultitem.cpp:71 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Remove result" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:146 +#, fuzzy, kde-format +#| msgid "Show Script Editor" +msgid "Script Editor" +msgstr "ਸਕ੍ਰਿਪਟ ਐਡੀਟਰ ਵੇਖੋ" + +#: scripteditor/scripteditorwidget.cpp:149 +#, fuzzy, kde-format +#| msgid "Show Script Editor" +msgid "Script Editor - %1" +msgstr "ਸਕ੍ਰਿਪਟ ਐਡੀਟਰ ਵੇਖੋ" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Result" +msgid "Results" +msgstr "ਨਤੀਜਾ" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Error" +msgid "Errors" +msgstr "ਗਲਤੀ" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, fuzzy, kde-format +#| msgid "Default Backend" +msgid "Default Backend:" +msgstr "ਡਿਫਾਲਟ ਬੈਕਐਂਡ" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, fuzzy, kde-format +#| msgid "Defaults:" +msgid "Defaults" +msgstr "ਡਿਫਾਲਟ:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, fuzzy, kde-format +#| msgid "Start Animation" +msgid "Enable Worksheet Animations" +msgstr "ਐਨੀਮੇਸ਼ਨ ਸ਼ੁਰੂ" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "ਰੈਂਡਰ ਕੀਤੇ ਵੇਖੋ" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "ਕੋਡ ਵੇਖੋ" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "ਫਾਇਲ %1 ਲਿਖੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।" + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "ਫਾਇਲ %1 ਲਿਖੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "ਫਾਇਲ %1 ਸੰਭਾਲਣ ਦੌਰਾਨ ਗਲਤੀ" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Markdown Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "LaTeX Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Image" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Insert Entry After" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Insert Entry Before" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheet.cpp:1264 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Insert LaTeX Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, fuzzy, kde-format +#| msgid "Inline" +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "ਇਨ-ਲਾਈਨ" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Remove Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#: worksheetentry.cpp:707 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Drag Entry" +msgstr "ਨਤੀਜਾ ਸੰਭਾਲੋ" + +#~ msgid "Publish Worksheet" +#~ msgstr "ਵਰਕਸ਼ੀਟ ਪਬਲਿਸ਼ ਕਰੋ" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|ਕੇਨਟੋਰ ਵਰਕਸ਼ੀਟ" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#, fuzzy +#~| msgid "2nd Variable" +#~ msgid "Usage: loadVariables file" +#~ msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#, fuzzy +#~| msgid "2nd Variable" +#~ msgid "Loading failed." +#~ msgstr "2ਜਾ ਵੇਰੀਬਲ" + +#, fuzzy +#~| msgid "(C) 2009 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Could not start the server." +#~ msgstr "ਸਰਵਰ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।" + +#~ msgid "Pause Animation" +#~ msgstr "ਐਨੀਮੇਸ਼ਨ ਵਿਰਾਮ" + +#~ msgid "Restart Animation" +#~ msgstr "ਐਨੀਮੇਸ਼ਨ ਮੁੜ-ਚਾਲੂ ਕਰੋ" + +#~ msgid "Other" +#~ msgstr "ਹੋਰ" + +#~ msgid "And %1 more..." +#~ msgstr "ਅਤੇ %1 ਹੋਰ..." + +#~ msgid "Main Toolbar" +#~ msgstr "ਮੁੱਖ ਟੂਲਬਾਰ" + +#~ msgid "Popup" +#~ msgstr "ਪੋਪਅੱਪ" + +#~ msgid "Help" +#~ msgstr "ਮੱਦਦ" + +#~ msgid "Show Help Panel" +#~ msgstr "ਮੱਦਦ ਪੈਨਲ ਵੇਖੋ" diff --git a/po/pl/cantor.po b/po/pl/cantor.po new file mode 100644 index 0000000..7227e5a --- /dev/null +++ b/po/pl/cantor.po @@ -0,0 +1,3323 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Maciej Wikło , 2009. +# Artur Chłond , 2010. +# Marta Rybczyńska , 2011. +# Łukasz Wojniłowicz , 2011, 2012, 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-10-14 11:08+0100\n" +"Last-Translator: Łukasz Wojniłowicz \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Maciej Wikło, Łukasz Wojniłowicz" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "maciej.wiklo@wp.pl, lukasz.wojnilowicz@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Wstrzymaj" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Uruchom" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Zatrzymaj" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Zapisz wynik" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Zaawansowane rysowanie wykresów" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Rysuj wykres" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Wyrażenie:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Dodatkowe opcje:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Wykres" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Aktywna opcja" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Oblicz" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Różniczkuj" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Zmienna:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Czasy: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "Pakiet" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importuj pakiet" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pakiet:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Całkuj" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Dolna granica:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Górna granica:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "całka określona" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Algebra &liniowa" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Utwórz macierz" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolumny:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Wiersze:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Oblicz wartości macierzy" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Macierz:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Oblicz wektory macierzy" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Odwróć macierz" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Wykres 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Zmienna" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nazwa" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Wykres 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1-sza zmienna" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2-ga zmienna" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Uruchom skrypt" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Rozwiąż równania" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Równania:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Zmienne:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Zalecana wersja: %4

    %2

    Zobacz %3, aby uzyskać więcej informacji
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Wybierz wykorzystywany silnik:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Uczyń ten silnik domyślnym" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia jest wysokopoziomowym, wysokowydajnym językiem programowania " +"dla obliczeń technicznych ze składnią podobną do innych języków. Dostarcza " +"zaawansowany kompilator, rozproszone równoległe wykonywanie, dokładność " +"numeryczną i szeroką bibliotekę funkcji matematycznych.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Ścieżka do pliku natywnego REPL Julii" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Zintegruj wykresy do arkusza roboczego" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Plik skryptu Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Ścieżka do REPL Julii:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Zintegruj wykresy w arkuszu roboczym (rozpocznij nową sesję, gdy zmieniono)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Format pośredni wykresów w treści:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista skryptów wczytywanych na początku sesji" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Błąd: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Samowczytywane skrypty" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua jest szybkim i lekkim językiem skryptowym, z prostą proceduralną " +"składnią. Istnieje kilka bibliotek w Lua nakierowanych na matematykę i naukę." +"

    Ten silnik obsługuje luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Ścieżka do polecenia luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Plik skryptu Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Ścieżka do polecenia luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima jest systemem do manipulacji wyrażeniami symbolicznymi i " +"numerycznymi, włącznie z różniczkowaniem, całkowaniem, seriami Taylora, " +"transformatami Laplace-a, podstawowymi równaniami różniczkowymi, systemami " +"równań liniowych, wielomianami, listami, wektorami, matrycami itp. Maxima " +"zapewnia precyzyjne numeryczne wyniki przy użyciu dokładnych ułamków, liczb " +"całkowitych i zmiennych. Maxima potrafi również sporządzać wykresy funkcji i " +"danych w dwóch oraz trzech wymiarach. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Ścieżka pliku wykonywalnego Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Włącz zarządzanie zmiennymi" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Błąd: Zbyt wiele */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Błąd: Zbyt wiele /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Błąd: oczekiwano \" przed ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Oczekiwanie na narysowanie wykresu" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Plik wsadowy Maximy (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Uruchomienie Maximy nie powiodło się" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Wystąpiła awaria Maximy. ponownie uruchamianie..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Wystąpiła dwukrotna awaria Maximy w krótkim czasie. Zatrzymywanie " +"uruchamiania" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Błąd - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkcja" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Ścieżka do Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Zintegruj wykresy w arkuszu roboczym" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Pozwól Cantorowi podążać za tworzeniem/destrukcją zmiennych" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave jest wysokopoziomowym językiem, przeznaczonym głównie do obliczeń " +"numerycznych.
    Zapewnia wygodny interfejs wiersza poleceń dla " +"numerycznego rozwiązywania liniowych i nieliniowych problemów i do " +"wykonywania innych numerycznych eksperymentów przy wykorzystaniu języka, " +"który jest w dużej części kompatybilny z Matlabem." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Ścieżka pliku wykonywalnego Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Plik skryptu Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Błąd składni" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Ścieżka do Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Plik skryptu Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python jest nadzwyczaj sprawnym językiem dynamicznego programowania, " +"który jest używany do różnych zastosowań. Istnieje kilka pakietów Pythona do " +"naukowego programowania.

    Ten silnik obsługuje Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python jest nadzwyczaj sprawnym językiem dynamicznego programowania, " +"który jest używany do różnych zastosowań. Istnieje kilka pakietów Pythona do " +"naukowego programowania.

    Ten silnik obsługuje Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - okno dialogowe wykresu" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkcje" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Tytuł" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Wyrażenie" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Dodaj" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Usuń" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Wyczyść listę" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Zmienna X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Wygląd" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linie" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkty" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkty i linie" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Kwadraty" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Stopnie" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Świeczniki" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Kropki" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Wygładzanie" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Brak" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotonicznie" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturalne krzywe sklejane sześcienne" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotoniczna)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Zakres funkcji" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Zakres X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr " " + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "&Próbkowanie" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Ro&zmiar kroku" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opcje" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Tytuł wykresu" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Etykieta osi X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Etykieta osi y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Pozycja legendy" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Ukryj legendę" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Lewy górny narożnik" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Prawy górny narożnik" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Lewy dolny narożnik" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Prawy dolny narożnik" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Poniżej" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Na zewnątrz" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Wyświetl siatkę" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Wyświetl pełne obramowanie" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Użyj kolorów" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Wyświetl wplecione" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logarytmiczna skala x" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logarytmiczna skala y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opcje pliku" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Zapisz wykres do pliku" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Typ pliku" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Wykryj z nazwy pliku" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! nie jest zwykłą repliką oprogramowania najtańszego z możliwych " +"kalkulatorów. Qalculate! mierzy, aby w pełni wykorzystać najlepszego " +"interfejsu, mocy i elastyczności nowoczesnych komputerów. Środkiem uwagi w " +"Qalculate! jest wpisywanie wyrażeń. Zamiast osobnego wpisywania każdej " +"liczby w wyrażeniu matematycznym, możesz bezpośrednio zapisać całe wyrażenie " +"i później je modyfikować. Interpretacja wyrażeń jest elastyczna i toleruje " +"pomyłki, a gdy mimo to popełnisz błąd, to Qalculate! ci o tym powie. Nie w " +"pełni rozwiązywalne wyrażenie nie są jednakże błędami. Qalculate! uprości " +"tak dalece jak tylko może i da odpowiedź w postaci wyrażenia. W dodatku do " +"liczbowych i arytmetycznych operatorów, wyrażenie może zawierać dowolną " +"kombinację zmiennych, jednostek i funkcji." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Jeżeli i jak będą automatycznie przekształcane jednostki. Jeżeli prawda, to " +"przekształć do najlepiej odpowiednich jednostek SI (najmniejsza liczba " +"jednostek)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Domyślna jednostka kąta dla funkcji trygonometrycznych." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Podstawa przetworzonych i przeliczonych liczb." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Czy wynik przeliczenia zostanie uproszczony lub sfaktoryzowany." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Czy racjonalne liczby będą wyświetlane jako dziesiętne, jako ułamek, czy coś " +"pomiędzy." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Pokaż, że seria cyfr lub liczb ciągnie się w nieskończoność przy użyciu " +"trzech kropek, zamiast zaokrąglania ich (np. 2/3 wyświetla się jako " +"0.666666... zamiast 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Użyj wszystkich dziesiętnych przedrostków SI. Jeżeli false, przedrostki, " +"które nie są wielokrotnością tysiąca (centi, deci, deca, hecto) nie zostaną " +"użyte automatycznie." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Jeżeli true, to zamiast podzielenia zostaną użyte ujemne wykładnik (np. 5/" +"x^2 staje się 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Wyświetlacz numeryczny." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Jeżeli true, to wykresy zostaną wyświetlone wewnątrz arkusza roboczego. " +"Jeżeli nie, to ukażą się w osobnym oknie." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Określa czy mają zostać użyte kolory na wykresach." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Określa czy ma być narysowana siatka." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Określa czy wokół wykresów mają być rysowane pełne obramowania." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Szerokość linii, w pikselach." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Liczba kroków interpolacji używanych na wykresach." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Tryb wygładzania na wykresach." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Wygląd wykresów." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Pozycja legendy na wykresach." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate zgłasza, że nie może wyświetlać. Czy zainstalowano gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "brakuje %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 musi być liczbą." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 musi być liczbą całkowitą." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 musi być zmienną typu boolean." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "nieprawidłowa opcja dla %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "znaleziono wiele wyrażeń w jednym poleceniu rysowania (%1 i %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "BŁĄD" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "OSTRZEŻENIE" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Brak funkcji, zmiennej lub jednostki o podanej nazwie." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkcja: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Rysowanie interfejsu" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Rysuje jedną lub więcej funkcji po kolei lub w osobnym oknie." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "wyrażenie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opcja" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "wartość" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "l. całkowita" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolean" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "liczba" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "domyślne: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Nazwa funkcji" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Etykieta tytułu" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "etykieta osi x" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "etykieta osi y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Obraz do zapisania wykresu. Jeżeli puste, to pokaże wykres w oknie na " +"ekranie. Jeżeli inline=true to obraz zostaje pokazany mimo to." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "Typ obrazu do zapisu. Jeden z auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Ustaw na true dla kolorowych wykresów, false dla monochromatycznych." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minimalna wartość osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Maksymalna wartość osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Jeżeli ma być użyta skala logarytmiczna dla osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Jeżeli ma być użyta skala logarytmiczna dla osi y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Podstawa logarytmu dla osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Podstawa logarytmu dla osi y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Jeżeli ma być pokazana siatka na wykresie." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Jeżeli wykres ma być otoczony przez obramowania ze wszystkich stron (nie " +"tylko osie)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Szerokość linii." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Gdzie ma być umieszczona legenda wykresu. Jeden z nigdzie, górny_lewy, " +"górny_prawy, dolny_lewy, dolny_prawy, pod, na_zewnątrz" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Wygładzanie rysunku. Jedno z brak, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Wygląd wykresu. Jedno z linie, punkty, punkty_linie, kwadraty, histogram, " +"stopnie, świeczniki, kropki" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Użyj skali na drugiej osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Użyj skali na drugiej osi y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Jeżeli plot ma być narysowany wpleciony zamiast w nowym oknie." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" +"Odległość pomiędzy dwoma punktami interpolacyjnymi. Zobacz również steps." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Liczba punktów interpolacji. Zobacz również step." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Nazwa zmiennej x. Musi to być nieznana zmienna." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Zapisz zmienne do pliku" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Zapisz wszystkie obecnie zdefiniowane zmienne do pliku. Mogą one być " +"wczytane ponownie przy użyciu %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "plik" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "plik: plik, do którego zapisać" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Wczytaj zmienne z pliku" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Wczytaj zmienne z pliku, który został wcześniej utworzony przez %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "plik: plik do wczytania" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Ogólne" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Podstawa systemu liczbowego:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Format ułamków:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Dziesiętny" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Dokładny" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Ułamkowy" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Mieszany" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Wyświetlacz numeryczny:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Prosty" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Naukowy" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precyzyjny" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Wskaż nieskończone serie:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Włączone" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Użyj wszystkich przedrostków SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Użyj ujemnych wykładników:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Przeliczanie" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Przekształć do najlepszych jednostek SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Jednostka kątowa:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiany" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Stopnie" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradiany" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Tryb struktury:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Uprość" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktoryzuj" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Rysowanie" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Wyświetl wykresy wplecione:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Kolorowe wykresy:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Pokaż siatkę:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Pokaż pełne obramowania:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Szerokość linii:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Próbkowanie:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Tryb wygładzania:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naturalne krzywe sklejane sześcienne" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Wygląd wykresu:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Kroki" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Położenie legendy:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R jest językiem i środowiskiem do obliczeń i grafik statystycznych, podobnym " +"do języka i środowiska S.
    Zapewnia szeroki wybór technik statystycznych " +"(liniowe i nieliniowe modelowanie, klasyczne testy statystyczne, analizy " +"czasowe, klasyfikacje, ...) i graficznych, dodatkowo jest wysoko " +"rozszerzalny. Język S jest często używany do badań w metodologii " +"statystycznej i dostarcza drogę Open Source do udziału w tego typu " +"działalności." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Błąd podczas otwierania pliku %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Plik skryptu R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Błąd podczas przetwarzania polecenia" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Naciśnij dwukrotnie, aby otworzyć okno dialogowe wyboru pliku" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R pliki źródłowe (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage jest otwartoźródłowym matematycznym systemem oprogramowania na licencji " +"GPL.
    Łączy moc wielu istniejących pakietów Open Source w zwykłym " +"interfejsie opartym o Pythona." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Ścieżka pliku wykonywalnego Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Wynik %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Ostatni wynik: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Plik skryptu Pythona (*.py);;Plik skryptu Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Wersja Sage %1.%2 jest nieobsługiwana. Uaktualnij swoją wersję do wersji " +"obsługiwanej, aby mogła ona działać z Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Proces Sage uległ awarii podczas przeliczania wyrażenia" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Proces Sage uległ awarii" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Proces Sage zakończył działanie podczas przeliczania wyrażenia" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Proces Sage zakończył działanie" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Uruchamianie Sage nie powiodło się" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Ścieżka do Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab jest darmowym oprogramowanie, wieloplatformowym pakietem do " +"obliczania numerycznego i wysoko poziomowym, numerycznie zorientowanym " +"językiem programistycznym.

    Scilab jest rozpowszechniany na licencji " +"CeCILL (zgodna z GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Ścieżka do polecenia scilab-adv-cli (Ostrzeżenie: Wersja Scilab musi być " +"lepsza lub równa wersji 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Plik skryptu Scilab (*.sce);;Plik funkcji Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Ścieżka do polecenia scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Pobierz przykładowe arkusze robocze" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Otwórz przykład" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Arkusz roboczy Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Otwórz plik" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nie znaleziono mechanizmu

    \n" +"
    Możesz spróbować:\n" +"
    • Zmiany ustawień w oknie ustawień;
    • Zainstalowania " +"pakietów następującego programu:
    • %2
    " +msgstr[1] "" +"

    Nie znaleziono wtyczki

    \n" +"
    Możesz spróbować:\n" +"
    • Zmiany ustawień w oknie konfiguracji;
    • " +"
    • Zainstalowania jednego z następujących programów:
    • %2
    " +msgstr[2] "" +"

    Nie znaleziono wtyczki

    \n" +"
    Możesz spróbować:\n" +"
    • Zmiany ustawień w oknie konfiguracji;
    • " +"
    • Zainstalowania jednego z następujących programów:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Błąd" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesja %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Nie można znaleźć modułu Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Otwartych jest wiele niezapisanych arkuszy roboczych. Czy chcesz je zamknąć?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Zamknij Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Bieżący projekt uległ zmianie. Czy chcesz go zapisać?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Zapisz projekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Silnik wykorzystywany domyślnie" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Włącz domyślnie ustawienie pisania" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Domyślnie podświetlaj składnię" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Domyślnie włącz uzupełnianie" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Włącz domyślnie numerowanie wyrażeń" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Domyślnie animuj zmiany w arkuszu roboczym" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Samoczynnie przeliczaj wiersze poniżej bieżącego" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Silnik %1 nie jest zainstalowany" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Zaistniały problemy z silnikiem %1,\n" +"proszę sprawdzić swoje ustawienia lub dograć potrzebne pakiety.\n" +"Można będzie jedynie obejrzeć ten arkusz roboczy." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Zapisz zwykły tekst" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Eksportuj do LaTex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Przelicz arkusz roboczy" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Pisanie przy użyciu LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Podświetlanie składni" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Uzupełnianie" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Numery wierszy" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animuj arkusz roboczy" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Ponownie uruchom silnik" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Przelicz wiersz" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Wstaw wiersz polecenia" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Wstaw wiersz tekstu" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Wstaw wiersz markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Wstaw wiersz Latex" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Wstaw podział strony" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Wstaw obraz" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Usuń bieżący wiersz" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Pokaż pomoc %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Pokaż edytor skryptów" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Pokaż uzupełnianie" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "ModułCantor" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Zapisz jako" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Zapisz" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Ponownie uruchom silnik" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Przerwij" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Obliczanie..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Gotowy" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Błąd sesji: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicjalizacja zakończona" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Inicjalizacja..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Nienazwany" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Czy chcesz wysłać bieżący arkusz roboczy na serwer publiczny?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pytanie - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Arkusz roboczy nie został zapisany. Zapisz go przed wysłaniem." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Ostrzeżenie - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Ta wtyczka nie obsługuje skryptów." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Edycja" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Widok" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Arkusz roboczy" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Plik" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nowy" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panele" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "U&stawienia" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Biały" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Czarny" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Ciemnoczerwony" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Czerwony" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Jasnoczerwony " + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Ciemnozielony" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Zielony" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Jasnozielony" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Ciemnoniebieski" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Niebieski" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Jasnoniebieski" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Ciemnożółty" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Żółty" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Jasnożółty" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Ciemny niebieskozielony" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Niebieskozielony" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Jasny niebieskozielony" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Ciemnopurpurowy" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Purpurowy" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Jasnopurpurowy" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Ciemnopomarańczowy" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Pomarańczowy" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Jasnopomarańczowy" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Ciemnoszary" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Szary" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Jasnoszary" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Kolor tła" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Kolor tekstu" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Czcionka" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Pogrubienie" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Kursywa" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Zwiększ rozmiar" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Zmniejsz rozmiar" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Wybierz" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Przerwane" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Pasek znajdywania" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Znajdź:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Następny" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Poprzedni" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Zastąp:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Zastąp" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Z&astąp wszystkie" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Znajdź w:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Rozróżni&aj wielkość liter" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Ustawienia obrazu" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Naciśnij tu prawym, aby wstawić obraz" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Nie można wczytać obrazu %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Ustawienia obrazu" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Otwórz" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Rozmiar wyświetlacza" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Szerokość" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Wysokość" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Podgląd" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Rozmiar wydruku" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Użyj rozmiaru wyświetlacza" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "piks." + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Otwórz plik obrazu" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Pokaż kod LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Ścieżka do pliku wykonywalnego latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Ścieżka do pliku wykonywalnego dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nazwa" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Wartość" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Od:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Do:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Główny tytuł" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Skala odciętej" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Skala porządkowej" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Tytuł wykresu:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Nakładka graficzna programów matematycznych dla KDE" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Opiekun
    przeniesienie na Qt5/KF5, silniki Scilab oraz Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autor pierwszej wersji
    opiekun (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Silnik KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Silnik Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interfejs" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Ikona Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Użyj silnika " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Dokument do otwarcia." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Nie można otworzyć pliku %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Podział strony ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Sposób na matematykę w KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nazwa:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Wartość:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Dodaj nową zmienną" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Wczytaj zmienne" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Zapisz zmienne" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Wyczyść zmienne" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Czy na pewno usunąć wszystkie zmienne?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Potwierdzenie - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Wczytaj plik" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Usuń wynik" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Nie znaleziono składnika edytora tekstowego dla KDE;\n" +"proszę sprawdzić swoją instalację KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Edytor skryptów" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Edytor skryptów - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nie znaleziono" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Osiągnięto początek" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Osiągnięto koniec" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Zastąpiono %1 wystąpienie" +msgstr[1] "Zastąpiono %1 wystąpienia" +msgstr[2] "Zastąpiono %1 wystąpień" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Polecenia" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Wyniki" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Błędy" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Tekst" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Kod LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Domyślny silnik:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Kiedy włączone, Cantor będzie automatycznie przeliczać każdy wiersz poniżej " +"bieżącego." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Samoczynnie przeliczaj wiersze" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Domyślne" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Włącz ustawienie pisania LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Włącz podświetlanie składni" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Włącz uzupełnianie" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Włącz numery wierszy" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Włącz animacje arkusza roboczego" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Pokaż przetworzony" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Pokaż kod" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Nie można przetworzyć pliku Eps. Mogą być potrzebne dodatkowe pakiety" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Nie można zapisać pliku %1.." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Nie można zapisać do pliku." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Błąd podczas zapisu pliku %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Błąd wczytywania arkusza wyglądu latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Wybrany plik nie jest prawidłowym plikiem projektu Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Wiersz polecenia" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Wiersz tekstu" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Wiersz markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Wiersz LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Obraz" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Podział strony" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Wstaw wiersz po" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Wstaw wiersz przed" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Wstaw wiersz LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Kolor tekstu..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Kolor" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "&Podświetlenie tekstu..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Czcionka" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Roz&miar czcionki" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "Pogru&bienie" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursywa" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Podkreślenie" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Przekreślenie" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Wyrównaj do &lewej" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Lewo" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Wyrównaj do ś&rodka" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Środek" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Wyrównaj do &prawej" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Prawo" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "Wy&justuj" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justowanie" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Usuń wiersz" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Przeciągnij wiersz" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Silnik, z którym został wygenerowany plik nie jest zainstalowany. " +#~ "Potrzebuje %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publikuj arkusz roboczy" + +#~ msgid "Waiting for Image..." +#~ msgstr "Oczekiwanie na obraz..." + +#~ msgid "Insert" +#~ msgstr "Wstaw" + +#~ msgid "Insert Before" +#~ msgstr "Wstaw przed" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "nie można otworzyć pliku %1: nieznany format pliku" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Dokument LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Arkusz roboczy Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Serwer Cantor obsługi R" + +#~ msgid "R Server" +#~ msgstr "Serwer R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Użycie: saveVariables plik" + +#~ msgid "Saving failed." +#~ msgstr "Nieudany zapis." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Użycie: loadVariables plik" + +#~ msgid "Loading failed." +#~ msgstr "Nieudane wczytywanie." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Ścieżka do polecenia python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Serwer Cantor dla R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Czy chcesz również eksportować obrazki?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Ścieżka do polecenia python2" + +#~ msgid " Enable Variable Management" +#~ msgstr " Włącz zarządzanie zmiennymi" + +#~ msgid "Could not start the server." +#~ msgstr "Nie można uruchomić serwera." + +#~ msgid "Pause Animation" +#~ msgstr "Wstrzymaj animację" + +#~ msgid "Start Animation" +#~ msgstr "Rozpocznij animację" + +#~ msgid "Restart Animation" +#~ msgstr "Ponownie uruchom animację" + +#~ msgid "Append Command Entry" +#~ msgstr "Dołącz wpis polecenia" + +#~ msgid "Append Text Entry" +#~ msgstr "Dołącz wpis tekstu" + +#~ msgid "Append Latex Entry" +#~ msgstr "Dołącz wpis Latex" + +#~ msgid "Append Image" +#~ msgstr "Dołącz obraz" + +#~ msgid "Append Page Break" +#~ msgstr "Dołącz podział strony" + +#~ msgid "Other" +#~ msgstr "Inne" + +#~ msgid "And %1 more..." +#~ msgstr "Dodaj %1 więcej..." + +#~ msgid "Main Toolbar" +#~ msgstr "Główny pasek narzędzi" + +#~ msgid "Completion Style:" +#~ msgstr "Styl uzupełniania:" + +#~ msgid "Popup" +#~ msgstr "Wyskakujące okienko" + +#~ msgid "The style used for Completion" +#~ msgstr "Styl używany do uzupełniania" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Ścieżka pliku wykonywalnego Sage" + +#~| msgid "Insert Entry" +#~ msgid "Insert Command Entry Before" +#~ msgstr "Wstaw wpis polecenia przed" + +#~ msgid "Command Entry Before" +#~ msgstr "Wpis polecenia przed" + +#~ msgid "Help" +#~ msgstr "Pomoc" + +#~ msgid "Show Help Panel" +#~ msgstr "Pokaż panel pomocy" + +#~ msgid "Uploading successful" +#~ msgstr "Wysyłanie zakończone pomyślnie" + +#~ msgid "Error uploading File %1" +#~ msgstr "Błąd podczas wysyłania pliku %1" diff --git a/po/pt/cantor.po b/po/pt/cantor.po new file mode 100644 index 0000000..f6235ce --- /dev/null +++ b/po/pt/cantor.po @@ -0,0 +1,3211 @@ +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-08 11:11+0000\n" +"Last-Translator: José Nuno Coelho Pires \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-POFile-SpellExtra: MathematiK Rieder MathematiKPart Alexander Maxima\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-POFile-SpellExtra: Mathematik Eigen mac py mws dvips source open\n" +"X-POFile-SpellExtra: tensores CantorPart EPS cws Reavaliar Gonzalez\n" +"X-POFile-SpellExtra: KAlgebra Pol Aleix tex xsl Matlab Octave Miha\n" +"X-POFile-SpellExtra: Čančula GroupBox px CeCILL deci bottomright sbezier\n" +"X-POFile-SpellExtra: loadVariables Bezier topright candlesticks centi deca\n" +"X-POFile-SpellExtra: adv ps pointslines gnuplot bezier outside\n" +"X-POFile-SpellExtra: saveVariables master hecto dots csplines bottomleft\n" +"X-POFile-SpellExtra: PS histogram boxes Scilab unique true cli\n" +"X-POFile-SpellExtra: Fraccionária topleft none Qalculate lines eps below\n" +"X-POFile-SpellExtra: points steps inline scilab Spline Küttler latex\n" +"X-POFile-SpellExtra: Monotónico monotónico sce sci luajit KF Julia jl\n" +"X-POFile-IgnoreConsistency: file\n" +"X-POFile-SpellExtra: REPL Markdown\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "José Nuno Pires" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "zepires@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausa" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Iniciar" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Parar" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Gravar o resultado" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gráficos Avançados" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expressão:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opções adicionais:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Gráfico" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opção activa" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcular" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Derivar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variável:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Vezes: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pacote" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importar o Pacote" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pacote:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrar" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Limite inferior:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Limite superior:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integral definido" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Álgebra &Linear" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Criar uma Matriz" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Colunas:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Linhas:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcular os Valores de Eigen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriz:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcular os Vectores de Eigen" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverter a Matriz" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Gráfico 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variável" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nome" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Mínimo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Máximo:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Gráfico 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1ª Variável" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2ª Variável" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Executar o Programa" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Resolver as equações" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Equações:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variáveis:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versão recomendada: %4

    %2

    Veja mais informações em %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Escolha a infra-estrutura a usar:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Usar esta infra-estrutura por omissão" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    O Julia é uma linguagem de programação dinâmica de alto nível, com " +"alta performance, para a computação técnica, com uma sintaxe familiar aos " +"utilizadores de outros ambientes de computação técnica. Oferece um " +"compilador sofisticado, a execução distribuída em paralelo, precisão " +"numérica e uma biblioteca extensa de funções matemáticas.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Localização do REPL nativo do Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrar os Gráficos na Folha de Cálculo" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Ficheiro de programa do Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Localização do REPL do Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Integrar os Gráficos na Folha de Cálculo (iniciar uma nova sessão quando " +"alterado)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Formato Intermédio e Incorporado dos Gráficos:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista dos programas a executar no início da sessão" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Erro: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Programas a auto-executar" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    O Lua é uma linguagem de programação rápida e leve, com uma sintaxe " +"procedimental simples. Existem diversas bibliotecas no Lua destinadas à " +"matemática e à ciência.

    Esta infra-estrutura suporta o luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Localização do comando 'luajit'" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Ficheiro de programa em Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Localização do comando 'luajit':" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"O Maxima é um sistema para a manipulação de expressões simbólicas e " +"numéricas, incluindo a derivação, a integração, as séries de Taylor, as " +"transformadas de Laplace, as equações diferenciais ordinárias, os sistemas " +"de equações lineares, os polinómios e os conjuntos, listas, vectores, " +"matrizes e tensores. O Maxima oferece resultados numéricos de alta precisão, " +"usando fracções exactas, inteiros de precisão arbitrária e números de " +"vírgula flutuante de precisão variável. O Maxima pode desenhar gráficos das " +"funções e de dados em duas e três dimensões." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Localização do executável Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Activar a Gestão das Variáveis" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Erro: Demasiados */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Erro: Demasiados /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Erro: era esperado um '\"' antes do ';'" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "À espera do resultado do gráfico" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Ficheiro de comandos do Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Não foi possível iniciar o Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "O Maxima estoirou. A reiniciá-lo..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"O Maxima estoirou duas vezes num curto período de tempo. A interromper a " +"tentativa de reinício" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Erro - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "função" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Localização do Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrar os Gráficos na Folha de Cálculo" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Permitir ao Cantor seguir a criação/destruição das variáveis" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"O Octave da GNU é uma linguagem de alto-nível, desenhada especialmente para " +"cálculos numéricos.
    Oferece uma interface de linha de comandos " +"conveniente para resolver problemas numéricos lineares e não-lineares e " +"também para efectuar outras experiências numéricas, usando uma linguagem que " +"é bastante compatível com o Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Localização do executável Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Ficheiro de programa em Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Erro de Sintaxe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Localização do Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Ficheiro de programa em Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    O Python é uma linguagem de programação extremamente poderosa que é usada " +"numa grande variedade de domínios de aplicações. Existem diversos pacotes do " +"Python para a programação científica.

    Esta infra-estrutura suporta o " +"Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    O Python é uma linguagem de programação extremamente poderosa que é usada " +"numa grande variedade de domínios de aplicações. Existem diversos pacotes do " +"Python para a programação científica.

    Esta infra-estrutura suporta o " +"Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Janela do Gráfico" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funções" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Título" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expressão" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Adicionar" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Remover" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Limpar a Lista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variável X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Estilo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linhas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Pontos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Pontos e Linhas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Caixas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histograma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Velas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Pontos" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Suavização" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Nenhum" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotónico" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Curvas 'Spline' Cúbicas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotónico)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Intervalo da Função" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Intervalo em X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Taxa de a&mostragem" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "&Tamanho do passo" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opções" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Título do gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Legenda do eixo dos X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Legenda do eixo dos Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posição da legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Esconder a legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Topo-esquerda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Topo-direita" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Fundo-esquerda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Fundo-direita" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Por Baixo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Fora" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostrar a Grelha" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostrar o contorno inteiro" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Usar as Cores" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostrar incorporado" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Escala logarítmica em X" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Escala logarítmica em Y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opções do Ficheiro" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Gravar o gráfico num ficheiro" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipo de ficheiro" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detectar pelo nome do ficheiro" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"O Qalculate! não é uma réplica em 'software' da sua calculadora barata " +"normal. O Qalculate! tenta tirar partido completo da interface superior, das " +"potencialidades e da flexibilidade dos computadores modernos. O foco de " +"atenção no Qalculate! é a introdução da expressão. Em vez de introduzir cada " +"número numa expressão matemática separada, poderá introduzir directamente a " +"expressão inteira e depois modificá-la. A interpretação das expressões é " +"flexível e tolerante a erros e, caso faça algo de errado à mesma, o " +"Qalculate! dizer-lhe-á qualquer coisa. Nem todas as expressões solúveis são " +"de facto erros. O Qalculate! irá simplificar ao máximo e responder com uma " +"expressão. Para além dos números e operações aritméticas, uma expressão " +"poderá conter uma combinação arbitrária de variáveis, unidades e funções." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Se e como são convertidas automaticamente as unidades. Se for verdadeiro, " +"converte para as unidades SI mais adequadas (a quantidade mínima de " +"unidades)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unidade angular predefinida para as funções trigonométricas." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "A base dos números processados e avaliados." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" +"Se o resultado da avaliação deverá ser simplificado ou decomposto em " +"factores." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Se os números racionais serão apresentados como decimais, como uma fracção " +"ou como algo misto." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mostrar que a série de algarismos de um número continua para sempre com " +"reticências, em vez de arredondar (p.ex., 2/3 aparece como 0,666666... em " +"vez de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Usar todos os prefixos decimais SI. Se for falso, os prefixos que não sejam " +"um múltiplo dos milhares (centi, deci, deca, hecto) não serão usados " +"automaticamente." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Se for verdadeiro, os expoentes negativos serão usados em vez da divisão (p." +"ex., 5/x^2 fica 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Apresentação numérica." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Se for verdadeiro, os gráficos serão apresentados dentro da folha de " +"trabalho. Caso contrário, irão aparecer numa janela separada." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Se deverão ser usadas cores nos gráficos." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Se deverá desenhar uma grelha." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Se deverá desenhar um contorno completo à volta do gráfico." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "A espessura das linhas em pixels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "O número de passos da interpolação a usar no gráfico." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "O modo de suavização dos gráficos." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "O estilo dos gráficos." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "A posição da legenda dos gráficos." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"O Qalculate diz que não consegue imprimir. Será que o 'gnuplot' está " +"instalado?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "falta o %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "O %1 deverá ser um número." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "O %1 deverá ser um número inteiro." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "O %1 deverá ser um valor booleano." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Opção inválida para o %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "foram encontradas várias expressões num comando do gráfico (%1 e %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERRO" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ATENÇÃO" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Não existe nenhuma função, variável ou unidade com o nome indicado." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Função: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interface do gráfico" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Desenha o gráfico de uma ou mais funções de forma incorporada ou numa janela " +"separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expressão" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opção" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "inteiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booleano" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "número" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "por omissão: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "O nome da função" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Legenda do título" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Legenda do eixo dos X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Legenda do eixo dos Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"A imagem onde gravar o gráfico. Se vazia, mostra o gráfico numa janela do " +"ecrã. Se 'inline=true', a imagem é apresentada independentemente desta opção." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"O tipo de imagem com que gravar. Poderá ser um dos seguintes valores: auto, " +"png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Configure como 'true' (verdadeiro) para um gráfico a cores; caso contrário, " +"será monocromático." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "O valor mínimo do eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "O valor máximo do eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Se deve ser usada uma escala logarítmica para o eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Se deve ser usada uma escala logarítmica para o eixo dos Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "A base logarítmica do eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "A base logarítmica do eixo dos Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Se deve ser mostrada uma grelha no gráfico." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Se o gráfico deverá ser rodeado para um contorno em todos os lados (não só " +"no eixo)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "A espessura das linhas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Onde é que deverá ser colocada a legenda do gráfico. Deverá ser um dos " +"seguintes valores: none, top_left, top_right, bottom_left, bottom_right, " +"below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"A suavização do gráfico. Poderá ser um dos seguintes valores: none, unique, " +"csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"O estilo do gráfico. Poderá ser um dos seguintes valores: lines, points, " +"points_lines, boxes, histogram, steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Usar uma escala no segundo eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Usar uma escala no segundo eixo dos Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Se o gráfico deverá ser desenhado incorporado, em vez de numa janela nova." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "A distância entre dois pontos da interpolação. Veja também os passos." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "O número de pontos da interpolação. Veja também o passo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "O nome da variável X. Deverá ser uma variável desconhecida" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Gravar as variáveis num ficheiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Grava todas as variáveis definidas de momento num ficheiro. Poderão ser " +"actualizadas com o %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "ficheiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "ficheiro: o ficheiro onde gravar" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Carregar as variáveis de um ficheiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" +"Carregar as variáveis de um ficheiro que foi criado anteriormente por %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "ficheiro: o ficheiro a carregar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Geral" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numérica:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Formato das fracções:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exacta" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fraccionária" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Mista" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Apresentação numérica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Pura" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Notação Científica" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisão" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indicar as séries infinitas:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Activa" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usar todos os prefixos SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usar os expoentes negativos:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Avaliar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Converter para as melhores unidades SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unidade dos ângulos:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graus" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Grados" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Modo da Estrutura:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplificar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Factorizar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Desenho do Gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Desenhar os gráficos incorporados:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Gráficos a Cores:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostrar a grelha:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostrar os contornos completos:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Espessura das linhas:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Taxa de amostragem:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Modo de Suavização:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Curvas Naturais Cúbicas" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Estilo do Gráfico:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posição da Legenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"O R é uma linguagem e um ambiente para a computação e gráficos estatísticos, " +"de forma semelhante à da linguagem e ambiente S.
    Oferece uma grande " +"variedade de técnicas gráficas e estatísticas (modelação linear e não-" +"linear, testes estatísticos clássicos, análises de séries temporais, " +"classificação, agrupamentos, ...), sendo também altamente extensível. A " +"linguagem S é normalmente o veículo de escolha para a investigação de " +"metodologias estatísticas, sendo que o R oferece uma rota 'open-source' para " +"participar nessa actividade." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Erro ao abrir o ficheiro %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Ficheiro de programa em R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Erro ao Processar o Comando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Faça duplo-click para abrir a janela de selecção de ficheiros" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Ficheiros de código em R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"O Sage é um sistema de 'software' matemático livre e 'open-source', " +"licenciado segundo a GPL.
    Combina o poder de muitos pacotes 'open-" +"source' existentes com uma interface comum e baseada em Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Localização do executável Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultado do %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"O último resultado foi:\n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Programa em Python (*.py);;|Programa em Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"A versão do Sage %1.%2 não é suportada. Por favor, actualize a sua " +"instalação para uma das versões suportadas, para que funcione com o Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "O processo Sage estoirou ao avaliar esta expressão" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "O processo Sage estoirou" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "O processo Sage saiu ao avaliar esta expressão" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "O processo Sage saiu" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Não foi possível iniciar o Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Localização do Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    O Scilab é uma aplicação gratuita e multi-plataforma de computação " +"numérica e uma linguagem de programação numérica de alto nível.

    O Scilab " +"é distribuído segundo a licença CeCILL (compatível com a GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Localização do executável Scilab (Atenção: a versão do Scilab deverá ser " +"igual ou posterior à 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +";;Ficheiro de programa em Scilab (*.sce);;Ficheiro de funções em Scilab (*." +"sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Localização do comando 'scilab-adv-cli':" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Obter as Folhas de Cálculo de Exemplo" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Abrir &o Exemplo" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Ir para a área de trabalho anterior" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Ir para a área de trabalho seguinte" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Folha de Cálculo do Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Abrir um ficheiro" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Não foi Encontrada Nenhuma Infra-Estrutura

    \n" +"
    Poderia tentar:\n" +"
    • Mudar as opções na janela de configuração;
    • " +"
    • Instalar os pacotes para o seguinte programa:
    • %2
    " +msgstr[1] "" +"

    Não foi Encontrada Nenhuma Infra-Estrutura

    \n" +"
    Poderia tentar:\n" +"
    • Mudar as opções na janela de configuração;
    • " +"
    • Instalar os pacotes para um dos seguintes programas:
    • %2
    " +"
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Erro" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sessão %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Não foi possível obter a componente do Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Estão abertas diversas área de trabalho por gravar. Deseja fechá-las?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Fechar o Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "O projecto actual foi modificado. Deseja gravá-lo?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Gravar o Projecto" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "A infra-estrutura que é usada por omissão" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Fazer o Processamento de Texto por Omissão" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Fazer o Realce de Sintaxe por Omissão" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Activar a Completação por omissão" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Activar a Numeração das Expressões por Omissão" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animar as alterações na folha de cálculo por omissão" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Reavaliar automaticamente os itens abaixo do actual" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Pedir a confirmação ao reiniciar a infra-estrutura" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "A infra-estrutura %1 não está instalada" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Existem alguns problemas com a infra-estrutura %1;\n" +"verifique por favor a sua configuração ou instale os pacotes necessários.\n" +"Só poderá ver esta folha de trabalho." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Gravar em Texto Simples" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportar para LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Avaliar a Folha de Cálculo" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Formatar com o LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Realce de Sintaxe" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Completação" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Números de Linha" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Avaliar a Folha de Cálculo" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reiniciar a Infra-Estrutura" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Avaliar o Item" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Inserir um Item de Comando" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Inserir um Item de Texto" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Inserir um Item de Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Inserir um Item de LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Inserir uma Quebra de Página" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Inserir uma Imagem" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Remover o item actual" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Mostrar a Ajuda do %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostrar o Editor de Programas" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Mostrar a Completação" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Gravar como" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Gravar" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Todos os resultados dos cálculos disponíveis perder-se-ão. Deseja mesmo " +"reiniciar o %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Reiniciar o %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interromper" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "A calcular..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Pronto" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Erro da Sessão: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "A inicialização terminou" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "A inicializar..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sem nome" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[apenas para leitura]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Deseja enviar a folha de trabalho actual para o servidor Web público?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pergunta - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "A folha de cálculo não está gravada. Devê-lo-á fazer antes do envio." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Aviso - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Esta infra-estrutura não suporta os programas." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Editar" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Ver" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Folha de Trabalho" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Ficheiro" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Novo" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Painéis" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Configuração" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Branco" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Preto" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Vermelho-Escuro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Vermelho" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Vermelho Claro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verde Escuro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verde" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verde Claro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Azul Escuro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Azul" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Azul Claro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Amarelo Escuro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Amarelo" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Amarelo Claro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Cíano Escuro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Cíano" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Cíano Claro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta Escuro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Magenta Claro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Laranja Escuro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Laranja" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Laranja Claro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Cinzento Escuro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Cinzento" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Cinzento Claro" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Cor de Fundo" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Cor do Texto" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Tipo de Letra" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Negrito" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Itálico" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Aumentar o Tamanho" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Diminuir o Tamanho" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Seleccionar" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrompido" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra de Pesquisa" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Procurar:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "Segui&nte" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "An&terior" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Substituir:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "Substitui&r" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Substituir &Tudo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Procurar em:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Corresponder à capitalização" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configurar a Imagem" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Carregue aqui com o botão direito para inserir a imagem" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Não é possível carregar a imagem %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Configuração da Imagem" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Abrir" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Tamanho da Área" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Largura" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Altura" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Antevisão" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Tamanho da Impressão" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usar o Tamanho da Área" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Abrir o ficheiro da imagem" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostrar o código em LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Localização do executável 'latex'" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Localização do executável 'dvips'" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nome" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valor" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "De:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Até:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Título principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Escala das abcissas" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Escala das ordenadas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Título do gráfico:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interface para KDE de aplicações matemáticas" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" +"Manutenção
    Migração para o Qt5/KF5, infra-estruturas do Scilab e Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autoria original
    Manutenção (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Infra-estrutura do KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Infra-estrutura do Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interface" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Ícone do Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usar a infra-estrutura " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Os documentos a abrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Não foi possível aceder ao ficheiro %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Quebra de Página ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    A forma no KDE de usar a Matemática" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nome:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valor:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Adicionar uma nova variável" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Carregar as Variáveis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Guardar as Variáveis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Limpar as Variáveis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Tem a certeza que deseja remover todas as variáveis?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmação - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Carregar um ficheiro" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Remover o resultado" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Não foi possível encontrar um componente de edição de texto para o KDE;\n" +"verifique por favor a sua instalação do KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor de Programas" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de Programas - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Não encontrado" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Atingiu-se o início" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Atingiu-se o fim" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Foi substituída %1 instância" +msgstr[1] "Foram substituídas %1 instâncias" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Comandos" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultados" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Erros" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Texto" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Código em LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Infra-Estrutura por Omissão:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Se estiver activo, o Cantor irá avaliar automaticamente todos os itens " +"abaixo do actual." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Reavaliar Automaticamente os Itens" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Predefinições" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Activar o Processamento do LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Activar o Realce de Sintaxe" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Activar a Completação" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Activar os Números de Linha" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Activar as Animações da Folha de Cálculo" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostrar a Representação" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Mostrar o Código" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Não é possível representar o ficheiro EPS. Poderá necessitar de pacotes " +"adicionais" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Não é possível gravar o ficheiro %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Não é possível gravar o ficheiro." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Ocorreu um erro ao gravar o ficheiro %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"No modo apenas para leitura, o Cantor não conseguiu garantir que a " +"exportação fosse válida para o %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Ocorreu um erro ao carregar a folha 'latex.xsl'" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" +"O ficheiro seleccionado não é um ficheiro de projecto do Cantor válido." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"Não foi encontrada a infra-estrutura %1. A edição e execução dos elementos " +"não é possível." + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Item de Comando" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Item de Texto" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Item de Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Item em LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Imagem" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Quebra de Página" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Inserir um Item Depois" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Inserir um Item Antes" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Inserir um Item de LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Cor do Texto..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Cor" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Realce do &Texto..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "Tipo de &Letra" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Tamanho da Letra" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Negrito" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Itálico" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "S&ublinhado" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Traçado" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "A&linhar à Esquerda" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Esquerda" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Alinhar ao &Centro" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centro" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Alinhar à Di&reita" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Direita" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justificar" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justificar" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Remover o Item" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Arrastar o Item" diff --git a/po/pt/docs/cantor/index.docbook b/po/pt/docs/cantor/index.docbook new file mode 100644 index 0000000..7e38c08 --- /dev/null +++ b/po/pt/docs/cantor/index.docbook @@ -0,0 +1,1410 @@ + +ATEX"> + + +]> + + + +O Manual do &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +JoséPires
    zepires@gmail.com
    Tradução
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2016-08-25 +Aplicações 16.12 + + +O &cantor; é uma aplicação que pretende fornecer uma área de trabalho agradável para outros pacotes matemáticos de 'Software' Livre. + + + +KDE +kdeedu +matemática +matemática +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + +
    + + +Introdução + +O &cantor; é uma aplicação que lhe permite usar as suas aplicações matemáticas favoritas dentro de uma interface de área de trabalho agradável e integrada no &kde;. Oferece janelas de assistência para as tarefas mais comuns e permite-lhe partilhar as suas folhas de cálculo com os outros. + + + +Usar o &cantor; + +Imagem: +Aqui está uma imagem do &cantor; + + + + + + Imagem + + + + + + + +Funcionalidades do &cantor; + + Uma área de trabalho agradável para avaliar expressões. + Área para visualizar os gráficos dos resultados na área de trabalho. + Uma estrutura simples e baseada em 'plugins' para adicionar diferentes infra-estruturas. + Integração do GetHotNewStuff para obter folhas de cálculo de exemplo (ou enviá-las.) + Formatação das fórmulas matemáticas com o &latex;. + Realce de sintaxe ciente da infra-estrutura. + Janelas de assistência baseadas em 'plugins' para as tarefas mais comuns, como a integração de uma função ou a introdução de uma matriz. + + + + +As infra-estruturas do &cantor; +O &cantor; oferece-lhe diversas opções para a infra-estrutura que poderá usar à vontade. A sua escolha deverá depender da tarefa que pretende efectuar. +De momento, estão disponíveis as seguintes infra-estruturas: + + Sage: + + O Sage é um sistema de 'software' matemático livre e 'open-source', licenciado segundo a GPL. Combina o poder de muitos pacotes 'open-source' existentes com uma interface comum e baseada em Python. Veja mais informações em http://sagemath.org. + + + + Maxima: + + O Maxima é um sistema para a manipulação de expressões simbólicas e numéricas, incluindo a derivação, a integração, as séries de Taylor, as transformadas de Laplace, as equações diferenciais ordinárias, os sistemas de equações lineares, os polinómios e os conjuntos, listas, vectores, matrizes e tensores. O Maxima oferece resultados numéricos de alta precisão, usando fracções exactas, inteiros de precisão arbitrária e números de vírgula flutuante de precisão variável. O Maxima pode desenhar gráficos das funções e de dados em duas e três dimensões. Veja o http://maxima.sourceforge.net para obter mais informações. + + + + R: + + O R é uma linguagem e um ambiente para a computação e gráficos estatísticos, de forma semelhante à da linguagem e ambiente S. Oferece uma grande variedade de técnicas gráficas e estatísticas (modelação linear e não-linear, testes estatísticos clássicos, análises de séries temporais, classificação, agrupamentos, ...), sendo também altamente extensível. A linguagem S é normalmente o veículo de escolha para a investigação de metodologias estatísticas, sendo que o R oferece uma rota 'open-source' para participar nessa actividade. Veja mais informações em http://www.r-project.org. + + + + Julia: + + O Julia é uma linguagem de programação dinâmica de alto nível e alta performance para a computação técnica, com uma sintaxe que é familiar para os utilizadores de outros ambientes de computação técnica. Oferece um compilador sofisticado, a execução paralela distribuída, precisão numérica e uma biblioteca abrangente de funções matemáticas. Veja a documentação do Julia para saber mais informações. + + + + &kalgebra;: + + O &kalgebra; é uma calculadora gráfica, baseada em MathML, que vem com o projecto de educação do &kde;. Veja mais informações em http://edu.kde.org/kalgebra/. + + + + Qalculate!: + + O Qalculate! não é uma réplica em 'software' da sua calculadora barata normal. O Qalculate! tenta tirar partido completo da interface superior, das potencialidades e da flexibilidade dos computadores modernos. O foco de atenção no Qalculate! é a introdução da expressão. Em vez de introduzir cada número numa expressão matemática separada, poderá introduzir directamente a expressão inteira e depois modificá-la. A interpretação das expressões é flexível e tolerante a erros e, caso faça algo de errado à mesma, o Qalculate! dizer-lhe-á qualquer coisa. Nem todas as expressões solúveis são de facto erros. O Qalculate! irá simplificar ao máximo e responder com uma expressão. Para além dos números e operações aritméticas, uma expressão poderá conter uma combinação arbitrária de variáveis, unidades e funções. Veja mais informações em http://qalculate.sourceforge.net/. + + + + Python2 e Python3: + + O Python é uma notável linguagem de programação dinâmica e poderosa que é usada numa grande variedade de domínios aplicacionais. Existem diversos pacotes de Python para a programação cientifica. + O Python está distribuído segundo a licença da Python Software Foundation (compatível com a GPL). Veja mais informações na página oficial. + + Esta infra-estrutura adiciona um item adicional ao menu principal do &cantor;, o Pacote. O único item deste menu é o PacoteImportar um Pacote. Este item pode ser usado para importar pacotes de Python para a área de trabalho. + + + + + Scilab: + + O Scilab é um pacote de computação numérica livre e multi-plataforma, assim como uma linguagem de programação numérica. + O Scilab está distribuído segundo a licença CeCILL (compatível com a GPL). Veja mais informações em http://www.scilab.org/. + + É necessário ter instalado o Scilab na versão 5.5 ou superior no seu sistema para que esta infra-estrutura possa ser usada. + + + + + Octave: + + O Octave da &GNU; é uma linguagem de alto-nível, destinada principalmente para cálculos numéricos. Oferece uma interface conveniente por linha de comandos para resolver problemas lineares e não-lineares de forma numérica e para fazer outras experiências matemáticas, usando uma linguagem que é compatível de um modo geral com o MATLAB. Para mais informações, veja em http://www.gnu.org/software/octave/. + + + + Lua: + + O Lua é uma linguagem de programação rápida e eleve, com uma sintaxe procedimental simples. Existem diversas bibliotecas em Lua destinadas à matemática e à ciência. + Veja mais informações em http://www.lua.org/. + Esta infra-estrutura suporta o luajit 2. + + + + + + + +O Espaço de Trabalho do &cantor; + + + Imagem do Espaço de Trabalho do &cantor; + + + + + + Imagem do Espaço de Trabalho do &cantor; + + + + +A interface da folha de cálculo do &cantor; consiste em três partes: + A barra de páginas, onde poderá circular entre as folhas de cálculo abertas. + Um painel de ajuda, onde poderá obter ajuda sobre um determinado comando com a sintaxe "? comando". + Um painel de Gestão de Variáveis, onde poderá ver uma lista com todas as variáveis disponíveis na folha de trabalho actual. O painel de Ajuda e de Gestão de Variáveis serão apresentados como páginas na barra lateral de uma janela do &cantor;. O gestor de variáveis poderá ser usado apenas para as infra-estruturas do Maxima (se estiver activo na página ConfiguraçãoConfigurar o &cantor;... Maxima), o &kalgebra;, o Octave, o Python2, o Python3, o Qalculate e o Scilab. + A folha de cálculo em si. + + + +A Folha de Cálculo +A folha de cálculo é a área básica para trabalhar com o &cantor;. Nela, poderá introduzir as expressões, deixar que a infra-estrutura faça os seus cálculos e olhar para os resultados. Os comandos que as folhas de cálculo aceitam dependem da infra-estrutura escolhida, pelo que deverá aprender a Documentação apropriada (o botão Mostrar a Ajuda leva-o lá directamente). Se souber o comando, mas se necessitar de informações adicionais, poderá escrever "? comando", para que apareça uma ajuda de contexto à direita da área de trabalho. Se quiser ver folhas de exemplo, poderá ir à opção Obter Folhas de Exemplo no menu Ficheiro e obter as folhas que outros utilizadores tiverem publicado. +Para controlar cada elemento de comando na folha de trabalho, poderá usar os botões de controlo que aparecem à direita da folha de trabalho, ao passar o cursor do rato sobre o campo de um elemento. Existem três acções básicas para cada elemento: Avaliar o Elemento, para actualizar o resultado do cálculo do elemento, Arrastar o Elemento para passar o elemento para outro local da folha de trabalho actual e Remover o Elemento para retirar o elemento da folha de trabalho actual. +As definições do tipo de letra e alinhamento das folhas de trabalho poderão ser alterados com a barra de ferramentas por cima da folha de trabalho. + + Configuração + O menu de Configuração permite-lhe alterar algumas opções da aparência da sua folha de cálculo actual. + + + Formatação com o &latex; + + Esta opção muda a forma como os resultados são apresentados a si. Se estiver activada, irá passar o resultado pelo sistema &latex;, de modo a produzir fórmulas apelativas visualmente. Por exemplo, o 3*x^2*sqrt(2)*x+2/3 transforma-se em + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Realce de Sintaxe + + O Realce de Sintaxe aumenta a legibilidade do código, realçando as palavras-chave ou os parêntesis correspondentes com cores diferentes. + + + + Completação + + Quando esta opção estiver activa, o &cantor; mostrar-lhe-á completações possíveis para o comando que estiver a escrever de momento, ao usar a tecla Tab. Se só existir uma escolha possível, irá inserir o resto do comando para si. + + + + Números de Linha + + Esta opção controla se as diferentes expressões deverão ter um número à frente, de modo que, se possível, possa por exemplo no Maxima voltar a invocar os resultados mais antigos com o comando %O1. + + + + Avaliar a Folha de Cálculo + + Esta definição controla se as diferentes animações serão usadas para realçar as alterações de uma folha de cálculo. + + + + + + + +As janelas dos assistentes +Existem diversas janelas assistentes implementadas no &cantor; que aliviam o esforço de algumas operações básicas. +Estas janelas poderão ser acedidas com os itens de menu principais. Cada infra-estrutura tem as suas próprias janelas assistentes. + +A janela para Criar uma Matriz + + Imagem da janela de criação de matrizes do &cantor; + + + + + + Imagem da janela de criação de matrizes do &cantor; + + + +Esta janela pode ser usada para introduzir matrizes. Poderá definir as dimensões da matriz, bem como os seus elementos. +É possível navegar rapidamente entre células, durante a introdução, usando para tal a tecla . + + +Janela de operações com matrizes + + Imagem da janela de introdução de matrizes no &cantor; + + + + + + Imagem da janela de introdução de matrizes no &cantor; + + + +Esta janela permite introduzir o nome da matriz para calcular os seus vectores de Eigen, os valores de Eigen ou para inverter a mesma. O valor por omissão (%) é usada para referenciar o resultado anterior do cálculo ou introdução de dados. + + +Janela de derivação + + Imagem da janela de derivação do &cantor; + + + + + + Imagem da janela de derivação do &cantor; + + + +Esta janela permite a introdução da expressão da função a derivar, o nome da variável e a ordem da derivada. + + +Janela de integração + + Imagem da janela de integração do &cantor; + + + + + + Imagem da janela de integração do &cantor; + + + +Esta janela permite a introdução da expressão da função a integrar, o nome da variável e os limites da integração (para o integral em concreto). + + +Janela de resolução de equações + + Imagem da janela de resolução de equações do &cantor; + + + + + + Imagem da janela de resolução de equações do &cantor; + + + +Esta janela permite a introdução das equações a resolver (cada equação numa linha em separado) e das variáveis a determinar (separadas por vírgulas). + + +Janela de importação de pacotes + + Imagem da janela de importação de pacotes do &cantor; + + + + + + Imagem da janela de importação de pacotes do &cantor; + + + +Esta janela permite a introdução do nome do pacote a importar (⪚ numpy no Python). + + +Janela do gráfico + + Imagem da janela de gráficos do &cantor; (página de Funções) + + + + + + Imagem da janela de gráficos do &cantor; (página de Funções) + + + +As opções desta janela são separadas em dois grupos, usando tabulações. A página de Funções permite a introdução das funções a desenhar. +Para introduzir uma nova função, carregue no botão Adicionar. Faça duplo-click sobre a célula do Título e introduza o mesmo; depois faça duplo-click sobre a célula da Expressão e introduza a expressão da função. + + Imagem da janela de gráficos do &cantor; (página de Opções) + + + + + + Imagem da janela de gráficos do &cantor; (página de Opções) + + + +A página de Opções é usada para definir as opções do gráfico e das legendas. Poderá afinar quase todas as opções do gráfico para obter a aparência agradável da sua imagem. + + +Janela do gráfico em 2D + + Imagem da janela de gráficos em 2D do &cantor; + + + + + + Imagem da janela de gráficos em 2D do &cantor; + + + +Esta janela permite a introdução da expressão da função, da sua variável e dos limites para essa variável. + + +Janela do gráfico em 3D + + Imagem da janela de gráficos em 3D do &cantor; + + + + + + Imagem da janela de gráficos em 3D do &cantor; + + + +Esta janela permite a introdução da expressão da função, das suas variáveis e dos limites para essas variáveis. + + + + + +Referência de Comandos + + +A janela principal do &cantor; + +O &cantor; tem os itens de menu comuns do &kde;; para mais informações, leia o capítulo do Menu dos Fundamentos do &kde;. + +Por baixo, encontra-se a lista dos itens adicionais ou especiais do menu do &cantor;. Lembre-se que alguns menus só aparecem nas infra-estruturas que tenham uma implementação correspondente. + + +O Menu Ficheiro + + + + &Ctrl;N Ficheiro Novo +Cria uma nova folha de trabalho com a infra-estrutura predefinida. + + +Ficheiro Novo Infra-Estrutura +Cria uma nova folha de trabalho com a infra-estrutura escolhida. + + +Ficheiro Obter uma Folha de Exemplo +Abre a janela para obter exemplos enviados por outros utilizadores do &cantor; com o GetHotNewStuff. + + +Ficheiro Abrir um Exemplo +Abre a janela para escolher um exemplo a carregar. Os exemplos deverão ser transferidos com a opção Ficheiro Obter uma Folha de Trabalho de Exemplo de antemão. + + +Ficheiro Gravar Como Texto Simples +Permite gravar a folha de trabalho actual como um documento em texto simples. + + +Ficheiro Exportar para LaTeX +Permite gravar a folha de trabalho actual como um documento em &latex;. + + +Ficheiro Publicar a Folha de Trabalho +Abre a janela para publicar a sua folha de trabalho actual e disponibilizá-la para os outros utilizadores do &cantor; através do GetHotNewStuff. + + +Ficheiro Executar o Programa +Permite carregar e executar os programas em lote da infra-estrutura actual. + + + + + + + +O Menu Ver + + + + &Ctrl;+ Ver Ampliar +Amplia a folha de trabalho actual em 10%. + + + &Ctrl;- Ver Reduzir +Reduz a folha de trabalho actual em 10%. + + +Ver Mostrar o Editor de Programas +Abre a janela de edição de programas em lote para a infra-estrutura actual. + + +Ver Painéis Ajuda +Activa ou desactiva a visibilidade da barra de Ajuda na barra lateral. + + +Ver Painéis Gestor de Variáveis +Activa ou desactiva a visibilidade da barra de Gestão de Variáveis na barra lateral. + + + + + + +O Menu Folha de Trabalho + + + +Folha de Trabalho Avaliar a Folha de Trabalho +Despoleta a avaliação da folha de trabalho por inteiro. + + + &Shift;Return Folha de Trabalho Avaliar o Item +Despoleta a avaliação do item actual. + + + &Ctrl;Return Folha de Trabalho Inserir um Item de Comando +Introduz um novo item de comando abaixo da posição actual do cursor. + + +Folha de Trabalho Inserir um Item de Texto +Introduz um novo item de texto abaixo da posição actual do cursor. + + +Folha de Trabalho Inserir um Item de LaTeX +Introduz um novo item de LaTeX abaixo da posição actual do cursor. + + +Folha de Trabalho Inserir uma Quebra de Página +Introduz uma quebra de página abaixo da posição actual do cursor. + + + &Shift;Del Folha de Trabalho Remover o Item Actual +Remove o item actual da folha de trabalho. + + + + + + +O Menu de Álgebra Linear + + + +Álgebra Linear Criar uma Matriz +Abre a janela assistente de criação de matrizes. + + +Álgebra Linear Calcular os Valores de Eigen +Abre a janela assistente de introdução do nome da matriz para calcular os seus valores de Eigen e as dimensões das multiplicidades dos valores de Eigen na ordem correspondente. + + +Álgebra Linear Calcular os Vectores de Eigen +Abre a janela assistente de introdução do nome da matriz para calcular os seus valores de Eigen, as dimensões das multiplicidades dos valores e vectores de Eigen na ordem correspondente. + + +Álgebra Linear Inverter a Matriz +Abre a janela assistente de introdução do nome da matriz para descobrir a matriz inversa. + + + + + + +O Menu Calcular + + + +Calcular Derivar +Abre a janela dos parâmetros de derivação. + + +Calcular Integrar +Abre a janela dos parâmetros de integração. + + +Calcular Resolver equações +Abre a janela de introdução de parâmetros para resolver as equações lineares e não-lineares. + + + + + + +O Menu Pacote + + + +Pacote Importar um Pacote +Abre a janela de importação de pacotes. + + + + + + +O Menu Gráfico + + + +Gráfico Gráfico +Abre a janela de parâmetros do gráfico. + + +Gráfico Gráfico 2D +Abre a janela de parâmetros do gráfico. + + +Gráfico Gráfico 3D +Abre a janela de parâmetros do gráfico. + + + + + + +Os Menus de Configuração e Ajuda +O &cantor; tem os itens de menu Configuração e Ajuda comuns do &kde;; para mais informações, leia as secções dos menus Configuração e Ajuda dos Fundamentos do &kde;. + + + + + + + +Perguntas e Respostas + + + + O Item do Menu Formatação com o LaTeX não está disponível + Nem todas as infra-estruturas suportam todas as opções. A versão actual suporta o resultado em &latex; para as infra-estruturas Maxima, Qalculate! e Sage. + + + Instalei o Sage/Maxima ou outro CAS, mas a infra-estrutura apropriada não aparece. + + Uma explicação possível é que o &cantor; não tenha detectado a localização correctamente. Vá à janela em ConfiguraçãoConfigurar o &kappname;... e mude a Localização da aplicação apropriada na página da infra-estrutura. + + + + Que nome mais estranho - o que é que tem a ver com matemática? + O &cantor; vem do matemático Alemão Georg Cantor, o criador da teoria dos conjuntos. + + + + + + +Créditos e Licença + +&cantor; +Programa com 'copyright' 2009-2011 de Alexander Rieder alexanderrieder@gmail.com + +Documentação com 'copyright' © 2009-2011 de Alexander Rieder alexanderrieder@gmail.com + +Tradução de José Nuno Pires zepires@gmail.com +&underFDL; &underGPL; + +&documentation.index; +
    + + diff --git a/po/pt_BR/cantor.po b/po/pt_BR/cantor.po new file mode 100644 index 0000000..da4d532 --- /dev/null +++ b/po/pt_BR/cantor.po @@ -0,0 +1,3207 @@ +# Translation of cantor.po to Brazilian Portuguese +# Copyright (C) 2009-2018 This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Luiz Fernando Ranghetti , 2009, 2010, 2011, 2016, 2017, 2018. +# André Marcelo Alvarenga , 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018. +# Aracele Torres , 2010, 2011. +# Marcus Gama , 2011. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-30 11:12-0200\n" +"Last-Translator: Luiz Fernando Ranghetti \n" +"Language-Team: Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Luiz Fernando Ranghetti, André Marcelo Alvarenga" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "elchevive@opensuse.org, alvarenga@kde.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pausar" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Iniciar" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Parar" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Salvar resultado" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gráficos avançados" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expressão:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opções adicionais:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Gráfico" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opção ativa" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calcular" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Derivada" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variável:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Tempos: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Pacote" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importar pacote" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Pacote:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integral" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Limite inferior:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Limite superior:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "integral definida" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Álgebra &linear" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Criar matriz" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Colunas:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Linhas:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calcular os valores de Eigen" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matriz:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calcular os vetores de Eigen" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inverter matriz" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Gráfico em 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variável" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nome" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Mínimo:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Máximo:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Gráfico em 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1ª variável" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2ª variável" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Executar script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Resolver equações" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Equações:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variáveis:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Versão recomendada: %4

    %2

    Veja %3 para mais informações
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Escolha a infraestrutura a usar:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Usar esta infraestrutura por padrão" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia é uma linguagem de programação dinâmica de alto nível e alta " +"performance, para a computação técnica, com uma sintaxe familiar aos " +"usuários de outros ambientes de computação técnica. Oferece um compilador " +"sofisticado, execução distribuída em paralelo, precisão numérica e uma " +"extensa biblioteca de funções matemáticas.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Caminho do REPL nativo do Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrar gráficos na planilha" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Arquivo de script Julia (*.jil)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Caminho para o Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrar gráficos na planilha (inicia uma nova sessão quando alterado)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Formato intermediário de gráficos incorporados:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/pt_BR/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista dos scripts a executar automaticamente no início da sessão" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Erro: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripts para execução automática" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua é uma linguagem de programação rápida e leve, com uma sintaxe " +"procedimental simples. Existem diversas bibliotecas disponibilizadas por " +"essa linguagem de programação destinadas à matemática e à ciência.

    Esta infraestrutura tem suporte à luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Caminho do comando luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Arquivo de script Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Caminho do comando luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/pt_BR/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"O Maxima é um sistema para a manipulação de expressões simbólicas e " +"numéricas, incluindo a derivação, a integração, as séries de Taylor, as " +"transformadas de Laplace, as equações diferenciais ordinárias, os sistemas " +"de equações lineares, os polinômios e os conjuntos, listas, vetores, " +"matrizes e tensores. O Maxima oferece resultados numéricos de alta precisão, " +"usando frações exatas, inteiros de precisão arbitrária e números de ponto " +"flutuante de precisão variável. O Maxima pode desenhar gráficos das funções " +"e de dados em duas e três dimensões. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Caminho para o executável do Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Habilitar o gerenciamento de variáveis" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Erro: Existem muitos */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Erro: Existem muitos /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Erro: Era esperado um \" antes do ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Aguardando pelo resultado do gráfico" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Arquivo de lote do Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Falha ao iniciar o Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "O Maxima travou. Reiniciando..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"O Maxima travou duas vezes num curto período de tempo. Interrompendo a " +"tentativa de reinício" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Erro - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "função" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Caminho para o Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrar gráficos na planilha" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Permitir ao Cantor seguir a criação/destruição de variáveis" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"A Octave do GNU é uma linguagem de alto nível, desenvolvida especialmente " +"para cálculos numéricos.
    Ela oferece uma interface de linha de comando " +"conveniente para resolver problemas numéricos lineares e não-lineares e " +"também para efetuar outras experiências numéricas, usando uma linguagem que " +"é bastante compatível com o Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Caminho para o executável do Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Arquivo de script Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Erro de sintaxe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Caminho para o Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Arquivo de script Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python é uma linguagem de programação extremamente poderosa que é usada " +"em uma grande variedade de domínios de aplicativos. Existem diversos pacotes " +"do Python para a programação científica.

    Esta infraestrutura tem " +"suporte ao Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python é uma linguagem de programação extremamente poderosa que é usada " +"em uma grande variedade de domínios de aplicativos. Existem diversos pacotes " +"do Python para a programação científica.

    Esta infraestrutura tem " +"suporte ao Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Janela do gráfico" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funções" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Título" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Expressão" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Adicionar" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Remover" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Limpar lista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Variável X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Estilo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linhas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Pontos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Pontos e linhas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Caixas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histograma" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Velas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Pontos" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Suavização" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Nenhum" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monótona" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Curvas naturais cúbicas" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monótona)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Intervalo da função" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Intervalo em X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Taxa de a&mostragem" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "&Tamanho do passo" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Opções" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Título do gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Legenda do eixo X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Legenda do eixo Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Posição da legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Ocultar legenda" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Superior esquerdo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Superior direito" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Inferior esquerdo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Inferior direito" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Abaixo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Fora" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Mostrar grade" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Mostrar a borda inteira" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Usar cores" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Mostrar integrado" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Escala logarítmica em X" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Escala logarítmica em Y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Opções do arquivo" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Salvar o gráfico em um arquivo" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Tipo do arquivo" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detectar pelo nome do arquivo" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"O Qalculate! não é uma réplica em software da sua calculadora barata normal. " +"O Qalculate! tenta tirar partido completo da interface superior, das " +"potencialidades e da flexibilidade dos computadores modernos. O foco de " +"atenção no Qalculate! é a introdução da expressão. Em vez de introduzir cada " +"número em uma expressão matemática separada, você pode introduzir " +"diretamente a expressão inteira e depois modificá-la. A interpretação das " +"expressões é flexível e tolerante a erros e, caso faça algo de errado à " +"mesma, o Qalculate! irá dizer a mesma coisa. Nem todas as expressões " +"solúveis são de fato erros. O Qalculate! irá simplificar ao máximo e " +"responder com uma expressão. Para além dos números e operações aritméticas, " +"uma expressão poderá conter uma combinação arbitrária de variáveis, unidades " +"e funções." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Se e como as unidades são convertidas automaticamente. Se for verdadeiro, " +"converte para as unidades SI mais adequadas (a quantidade mínima de " +"unidades)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Unidade angular padrão para as funções trigonométricas." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "A base dos números processados e avaliados." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" +"Se o resultado da avaliação deverá ser simplificado ou decomposto em fatores." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Se os números racionais serão apresentados como decimais, como uma fração ou " +"misto." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Mostrar que a série de algarismos de um número continua para sempre com " +"reticências, em vez de arredondar (p.ex., 2/3 aparece como 0,666666... em " +"vez de 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Usar todos os prefixos decimais SI. Se for falso, os prefixos que não sejam " +"um múltiplo dos milhares (centi, deci, deca, hecto) não serão usados " +"automaticamente." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Se for verdadeiro, os expoentes negativos serão usados em vez da divisão (p." +"ex., 5/x^2 fica 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Apresentação numérica." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Se for verdadeiro, os gráficos serão apresentados dentro da planilha. Caso " +"contrário, irão aparecer em uma janela separada." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Se devem ser usadas cores nos gráficos." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Se deve desenhar uma grade." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Se deve desenhar uma borda completa em tordo do gráfico." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "A espessura das linhas em pixels." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "O número de passos da interpolação a serem usados no gráfico." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "O modo de suavização dos gráficos." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "O estilo dos gráficos." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "A posição da legenda dos gráficos." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"O Qalculate informa que não consegue imprimir. O gnuplot está instalado?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "faltando %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 deve ser um número." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 deve ser um inteiro." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "O %1 deve ser um valor booleano." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "opção inválida para %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" +"foram encontradas várias expressões em um comando do gráfico (%1 e %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERRO" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "AVISO" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Não existe nenhuma função, variável ou unidade com o nome indicado." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Função: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Interface do gráfico" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Desenha o gráfico de uma ou mais funções de forma integrada ou em uma janela " +"separada." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "expressão" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "opção" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "valor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "inteiro" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "booleano" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "número" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "padrão: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "O nome da função" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Legenda do título" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Legenda do eixo X" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Legenda do eixo Y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"A imagem onde gravar o gráfico. Se vazia, mostra o gráfico em uma janela da " +"tela. Se 'inline=true', a imagem é apresentada independentemente desta opção." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"O tipo de imagem a ser salva. Pode ser: auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Configure como 'true' (verdadeiro) para um gráfico em cores ou 'false' para " +"monocromático." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "O valor mínimo do eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "O valor máximo do eixo dos X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Se deve ser usada uma escala logarítmica para o eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Se deve ser usada uma escala logarítmica para o eixo Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "A base logarítmica do eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "A base logarítmica do eixo Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Se deve ser mostrada uma grade no gráfico." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Se o gráfico deve ser rodeado por um contorno em todos os lados (não só no " +"eixo)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "A espessura das linhas." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Onde deve ser colocada a legenda do gráfico. Pode ser: none, top_left, " +"top_right, bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"A suavização do gráfico. Pode ser: none, unique, csplines, bezier, sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"O estilo do gráfico. Pode ser: lines, points, points_lines, boxes, " +"histogram, steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Usar uma escala no segundo eixo X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Usar uma escala no segundo eixo Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Se o gráfico deve ser desenhado integrado, em vez de em uma janela nova." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "A distância entre dois pontos da interpolação. Veja também os passos." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "O número de pontos da interpolação. Veja também o passo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "O nome da variável X. Deve ser uma variável desconhecida" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Salvar as variáveis em um arquivo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Salva todas as variáveis atualmente definidas em um arquivo. Podem ser " +"atualizadas com o %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "arquivo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "arquivo: o arquivo onde salvar" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Carregar variáveis de um arquivo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" +"Carregar as variáveis de um arquivo que foi criado anteriormente por %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "arquivo: o arquivo a carregar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Geral" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Base numérica:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Formato das frações:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exato" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Fracionário" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Combinado" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Apresentação numérica:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Puro" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Científico" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precisão" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Indicar as séries infinitas:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Habilitado" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Usar todos os prefixos SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Usar expoentes negativos:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Avaliar" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Converter para as melhores unidades SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Unidade de ângulo:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianos" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Graus" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Grados" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Modo de estruturação:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Simplificar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Fatorar" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Desenho do gráfico" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Desenhar os gráficos integrados:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Gráficos em cores:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Mostrar grade:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Mostrar as bordas completas:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Espessura das linhas:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Taxa de amostragem:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Modo de suavização:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Curvas naturais cúbicas" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Estilo do gráfico:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Passos" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Posição da legenda:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"A R é uma linguagem e um ambiente para computação e gráficos estatísticos, " +"de forma semelhante à da linguagem e ambiente S.
    Ela oferece uma grande " +"variedade de técnicas gráficas e estatísticas (modelação linear e não-" +"linear, testes estatísticos clássicos, análises de séries temporais, " +"classificação, agrupamentos, ...), e é altamente extensível. A linguagem S é " +"normalmente o veículo de escolha para pesquisa de metodologias estatísticas " +"e a R oferece uma rota de código aberto para participar dessa atividade." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Erro ao abrir o arquivo %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Arquivo de script R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Erro ao analisar o comando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Clique duplo para abrir o diálogo de seleção de arquivo" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Arquivos de código em R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"O Sage é um sistema de programas matemáticos de código aberto e licenciado " +"sob a GPL.
    Ele combina o poder de muitos pacotes de código aberto " +"existentes com uma interface comum baseada em Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Caminho para o executável do Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultado de %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"A última saída foi: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Arquivo de script Python (*.py);;Arquivo de script Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Não há suporte para a versão %1.%2 do Sage. Atualize a sua instalação para " +"uma das versões que possuem suporte para que funcione com o Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "O processo Sage falhou ao avaliar esta expressão" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "O processo Sage falhou" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "O processo Sage finalizou ao avaliar esta expressão" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "O processo Sage foi finalizado" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Falha ao iniciar o Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Caminho para o Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    O Scilab é um aplicativo gratuito e multiplataforma de computação " +"numérica e uma linguagem de programação numérica de alto nível.

    O Scilab " +"é distribuído com a licença CeCILL (compatível com a GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Caminho do comando scilab-adv-cli (Atenção: a versão do Scilab deve ser a " +"5.4 ou posterior)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Arquivo de script Scilab (*.sce);;Arquivo de função Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Localização do comando 'scilab-adv-cli':" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Baixar planilhas de exemplo" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Abrir exemplo" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Ir para a planilha anterior" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Ir para a próxima planilha" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Planilha do Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Abrir arquivo" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nenhuma infraestrutura encontrada

    \n" +"
    Você pode tentar:\n" +"
    • Alterar as configurações no diálogo de configuração;
    • " +"
    • Instalar os pacotes do seguinte programa:
    • %2
    " +msgstr[1] "" +"

    Nenhuma infraestrutura encontrada

    \n" +"
    Você pode tentar:\n" +"
    • Alterar as configurações no diálogo de configuração;
    • " +"
    • Instalar os pacotes de um dos seguintes programas:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Erro" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sessão %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Não foi possível encontrar o componente do Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Estão abertas diversas planilhas que ainda não foram salvas. Deseja fechá-" +"las?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Fechar o Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "O projeto atual foi modificado. Deseja salvá-lo?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Salvar projeto" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "A infraestrutura que é usada por padrão" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Fazer o processamento de texto por padrão" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Fazer o realce de sintaxe por padrão" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Habilitar a completação padrão" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Habilitar a numeração de expressões por padrão" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animar as alterações na planilha por padrão" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Reavaliar automaticamente os itens abaixo do atual" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Solicitar confirmação ao reiniciar a infraestrutura" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "A infraestrutura %1 não está instalada" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Existem alguns problemas com a infraestrutura %1,\n" +"verifique sua configuração ou instale os pacotes necessários.\n" +"Você apenas poderá ver esta planilha." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Salvar em texto simples" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportar para LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Calcular planilha" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Formatar com o LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Realce de sintaxe" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Complementação" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Número de linhas" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animar planilha" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reiniciar infraestrutura" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Calcular entrada" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Inserir entrada de comando" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Inserir entrada de texto" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Inserir item de Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Inserir item de LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Inserir quebra de página" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Inserir imagem" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Remover entrada atual" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Exibir ajuda do %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Mostrar o editor de script" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Exibir completação" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Salvar como" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Salvar" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Todos os resultados de cálculos disponíveis serão perdidos. Deseja realmente " +"reiniciar %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Reiniciar %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Interromper" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Calculando..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Pronto" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Erro da sessão %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicialização concluída" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Inicializando..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Sem nome" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[somente leitura]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Deseja enviar a planilha atual para um servidor Web público?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Pergunta - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "A planilha não está salva. Você deve salvá-la antes de enviá-la." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Aviso - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Esta infraestrutura não suporta scripts." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Editar" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "E&xibir" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Planilha" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Arquivo" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Novo" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Painéis" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Configurações" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Branco" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Preto" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Vermelho escuro" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Vermelho" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Vermelho claro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Verde escuro" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Verde" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Verde claro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Azul escuro" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Azul" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Azul claro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Amarelo escuro" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Amarelo" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Amarelo claro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Ciano escuro" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Ciano" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Ciano claro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Magenta escuro" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Magenta claro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Laranja escuro" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Laranja" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Laranja claro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Cinza escuro" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Cinza" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Cinza claro" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Cor de fundo" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Cor do texto" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Fonte" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Negrito" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Itálico" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Aumentar tamanho" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Diminuir tamanho" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Selecionar" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Interrompido" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Barra de pesquisa" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Localizar:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Próximo" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Anterior" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Substituir:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "Substitui&r" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Substituir &tudo" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Pesquisar em:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Diferenciar &maiúsculas de minúsculas" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Configurar imagem" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Clique com o botão direito aqui para inserir imagem" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Não foi possível carregar a imagem %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Configurações da imagem" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Abrir" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Tamanho da área" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Largura" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Altura" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Visualizar" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Tamanho da impressão" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Usar o tamanho da área" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automático)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Abrir arquivo de imagem" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Mostrar o código LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Caminho para o executável do Latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Caminho para o executável dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nome" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valor" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "De:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Até:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Título principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Escala das abcissas" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Escala das ordenadas" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Título do gráfico:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interface do KDE para aplicativos matemáticos" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Mantenedor
    Migração para Qt5/KF5, infraestruturas Scilab e Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Autor original
    Mantenedor (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Infraestrutura do KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Infraestrutura do Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Interface" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Ícone do Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Usar esta infraestrutura " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Documentos a abrir." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Não foi possível abrir o arquivo %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Quebra de página ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    O modo KDE de fazer Matemática" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Nome:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valor:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Adicionar nova variável" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Carregar variáveis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Armazenar variáveis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Limpar variáveis" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Tem certeza de que deseja remover todas as variáveis?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmação - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Carregar arquivo" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Remover resultado" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Não foi possível encontrar um componente de edição de texto para o KDE.\n" +"Verifique a sua instalação do KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor de script" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de script - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Não encontrado" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "O início foi atingido" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "O fim foi atingido" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Foi substituída %1 ocorrência" +msgstr[1] "Foram substituídas %1 ocorrências" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Comandos" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultados" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Erros" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Texto" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Código LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Infraestrutura padrão:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Se estiver habilitado, o Cantor irá avaliar automaticamente todos os itens " +"abaixo do atual." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Reavaliar os itens automaticamente" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Padrões" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Ativar o processamento do LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Habilitar o realce de sintaxe" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Habilitar a completação" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Habilitar o número de linhas" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Ativar as animações da planilha" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Mostrar renderizado" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Exibir o código" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Não foi processar o arquivo EPS. Você precisa instalar pacotes adicionais" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Não foi possível gravar o arquivo %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Não foi possível gravar o arquivo." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Erro ao salvar o arquivo %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Erro no carregamento da folha de estilo latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "O arquivo selecionado não é um arquivo de projeto do Cantor válido." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Entrada de comando" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Entrada de texto" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Entrada de Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Item de LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Imagem" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Quebra de página" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Inserir entrada após" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Inserir entrada antes" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Inserir item de LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Cor do texto..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Colorido" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Realce do &texto..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Fonte" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Tamanho da fonte" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Negrito" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Itálico" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "S&ublinhado" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Tachado" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "A&linhar à esquerda" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Esquerda" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Centralizar" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centro" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Alinhar à di&reita" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Direita" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justificado" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justificado" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Remover entrada" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Arrastar o item" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "A infraestrutura na qual este arquivo foi gerado não está instalada. Ela " +#~ "necessita da %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publicar planilha" + +#~ msgid "Waiting for Image..." +#~ msgstr "Aguardando a imagem..." diff --git a/po/pt_BR/docs/cantor/index.docbook b/po/pt_BR/docs/cantor/index.docbook new file mode 100644 index 0000000..b96877f --- /dev/null +++ b/po/pt_BR/docs/cantor/index.docbook @@ -0,0 +1,1044 @@ + + + + ATEX"> + + +]> + + + +Manual do &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +Marcus Gama
    marcus.gama@gmail.com
    Tradução
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +09/05/2014 +0.5 (&kde; 4.14) + + +O &cantor; é uma aplicação que pretende fornecer uma área de trabalho agradável para outros pacotes matemáticos de 'Software' Livre. + + + +KDE +kdeedu +Matemática +matemática +Cantor +Sage +Python +Lua +Scilab +R +Maxima + + +
    + + +Introdução + +O &cantor; é uma aplicação que lhe permite usar as suas aplicações matemáticas favoritas dentro de uma interface de área de trabalho agradável e integrada no &kde;. Ele oferece janelas de assistência para as tarefas mais comuns e permite-lhe compartilhar as suas folhas de cálculo com os outros. + + + +Usando o &cantor; + +Captura de tela: +Aqui está uma captura de tela do &cantor; + + + + + + Captura de tela + + + + + + + +Recursos do &cantor; + + Uma área de trabalho agradável para avaliar expressões. + Área para visualizar os gráficos dos resultados na área de trabalho. + Uma estrutura simples e baseada em 'plugins' para adicionar diferentes infraestruturas. + Integração do GetHotNewStuff para obter folhas de cálculo de exemplo (ou enviá-las.) + Formatação das fórmulas matemáticas com o &latex;. + Realce de sintaxe ciente da infraestrutura. + Janelas de assistência baseadas em 'plugins' para as tarefas mais comuns, como a integração de uma função ou a inserção de uma matriz. + + + + +As infraestruturas do &cantor; +O &cantor; oferece diversas opções para a infraestrutura que você poderá usar à vontade. A sua escolha deverá depender da tarefa que pretende efetuar. +Atualmente, estão disponíveis as seguintes infraestruturas: + + Sage: + + O Sage é um sistema de 'software' matemático livre e 'open-source', licenciado sob a GPL. Combina o poder de muitos pacotes 'open-source' existentes com uma interface comum e baseada em Python. Veja mais informações em http://sagemath.org. + + + + Maxima: + + O Maxima é um sistema para a manipulação de expressões simbólicas e numéricas, incluindo a derivação, a integração, as séries de Taylor, as transformadas de Laplace, as equações diferenciais ordinárias, os sistemas de equações lineares, os polinômios e os conjuntos, listas, vetores, matrizes e tensores. O Maxima oferece resultados numéricos de alta precisão, usando frações exatas, inteiros de precisão arbitrária e números de vírgula flutuante de precisão variável. O Maxima pode desenhar gráficos das funções e de dados em duas e três dimensões. Veja o http://maxima.sourceforge.net para obter mais informações. + + + + R: + + O R é uma linguagem e um ambiente para a computação e gráficos estatísticos, de forma semelhante à da linguagem e ambiente S. Oferece uma grande variedade de técnicas gráficas e estatísticas (modelação linear e não-linear, testes estatísticos clássicos, análises de séries temporais, classificação, agrupamentos, ...), sendo também altamente extensível. A linguagem S é normalmente o veículo de escolha para a investigação de metodologias estatísticas, sendo que o R oferece uma rota 'open-source' para participar nessa atividade. Veja mais informações em http://www.r-project.org. + + + + &kalgebra;: + + O &kalgebra; é uma calculadora gráfica, baseada NO MathML, que vem com o Projeto Educacional do &kde;. Consulte mais informações em http://edu.kde.org/kalgebra/. + + + + Qalculate!: + + O Qalculate! não é uma réplica em 'software' da sua calculadora barata normal. O Qalculate! tenta tirar partido da interface superior, das potencialidades e da flexibilidade dos computadores modernos. O foco de atenção no Qalculate! é a introdução da expressão. Em vez de introduzir cada número numa expressão matemática separada, poderá introduzir diretamente a expressão inteira e depois modificá-la. A interpretação das expressões é flexível e tolerante a erros e, caso ainda faça algo de errado, o Qalculate! irá informar o erro. Nem todas as expressões solúveis são de fato erros. O Qalculate! irá simplificar ao máximo e responder com uma expressão. Além dos números e operações aritméticas, uma expressão poderá conter uma combinação arbitrária de variáveis, unidades e funções. Veja mais informações em http://qalculate.sourceforge.net/. + + + + Python2: + + Python é uma linguagem de programação extremamente poderosa que é usada em uma grande variedade de domínios de aplicativos. Existem diversos pacotes do Python para a programação científica. + O Python é distribuído sob a licença Python Software Foundation (compatível com a GPL). Consulte mais informações na página Web. + + Esta infraestrutura acrescenta um item adicional ao menu principal do &cantor;, chamado Pacote. O único item deste menu é o PacoteImportar pacote. Este item pode ser usado para importar pacotes de Python para a área de trabalho. + + + Esta infraestrutura tem suporte apenas ao Python 2. + + + + + Scilab: + + O Scilab é um pacote de computação numérica livre e multiplataforma, assim como uma linguagem de programação numérica. + O Scilab é distribuído sob a licença CeCILL (compatível com a GPL). Consulte mais informações em http://www.scilab.org/. + + Você precisa ter instalado o Scilab na versão 5.5 ou superior no seu sistema para usar esta infraestrutura. + + + + + Octave: + + O &GNU; Octave é uma linguagem de alto-nível, destinada principalmente para cálculos numéricos. Ela oferece uma interface conveniente por linha de comando para resolver problemas lineares e não-lineares de forma numérica e para fazer outras experiências matemáticas, usando uma linguagem que é compatível de um modo geral com o MATLAB. Para mais informações, veja em http://www.gnu.org/software/octave/. + + + + Lua: + + Lua é uma linguagem de programação rápida e leve, com uma sintaxe procedimental simples. Essa linguagem disponibiliza diversas bibliotecas destinadas à matemática e à ciência. + Consulte a página http://www.lua.org/ para obter mais informações. + Esta infraestrutura tem suporte à luajit 2. + + + + + + + +O Espaço de Trabalho do &cantor; + + + Imagem do Espaço de Trabalho do &cantor; + + + + + + Imagem do Espaço de Trabalho do &cantor; + + + + +A interface da folha de cálculo do &cantor; consiste de três partes: + A barra de páginas, onde você poderá circular entre as folhas de cálculo abertas. + Um painel de ajuda, onde você poderá obter ajuda sobre um determinado comando com a sintaxe "? comando". + Um painel de Gerenciamento de Variáveis, onde você poderá ver uma lista com todas as variáveis disponíveis na folha de trabalho atual. Os painéis de Ajuda e de Gerenciamento de Variáveis são apresentados como páginas na barra lateral de uma janela do &cantor;. O gerenciador de variáveis poderá ser usado apenas para as infraestruturas do Maxima (se estiver ativo na página ConfiguraçõesConfigurar o &cantor;... Maxima), &kalgebra;, Octave, Python2, Qalculate e Scilab. + A folha de cálculo em si. + + + +A Folha de Cálculo +A folha de cálculo é a área básica para trabalhar com o &cantor;. Nela, você poderá introduzir as expressões, deixar que a infraestrutura faça os seus cálculos e olhar para os resultados. Os comandos que as folhas de cálculo aceitam dependem da infraestrutura escolhida, sendo que você deverá aprender a sintaxe apropriada (o botão Mostrar a Ajuda o leva diretamente para a documentação). Se souber o comando, mas precisar de informações adicionais, você poderá escrever "? comando", para que apareça uma ajuda de contexto à direita da área de trabalho. Se você quiser ver folhas de exemplo, poderá ir à opção Obter Folhas de Exemplo no menu Arquivo e obter as folhas que outros usuários tiverem publicado. +Para controlar cada elemento de comando na folha de trabalho, você poderá usar os botões de controle que aparecem à direita da folha de trabalho, ao passar o cursor do mouse sobre o campo de um elemento. Existem três ações básicas para cada elemento: Avaliar o elemento, para atualizar o resultado do cálculo do elemento, Arrastar o elemento para passar o elemento para outro local da folha de trabalho atual e Remover o elemento para retirar o elemento da folha de trabalho atual. +As definições do tipo de fonte e alinhamento das folhas de trabalho poderão ser alterados com a barra de ferramentas acima da folha de trabalho. + + Configurações + O menu de Configurações permite-lhe alterar algumas opções da aparência da sua folha de cálculo atual. + + + Formatação com o &latex; + + Esta opção muda a forma como os resultados são apresentados a si. Se estiver ativada, irá passar o resultado pelo sistema &latex;, de modo a produzir fórmulas apelativas visualmente. Por exemplo, o 3*x^2*sqrt(2)*x+2/3 transforma-se em + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Realce de Sintaxe + + O realce de sintaxe aumenta a legibilidade do código, realçando as palavras-chave ou os parênteses correspondentes com cores diferentes. + + + + Completação + + Quando esta opção estiver ativa, o &cantor; mostrará completações possíveis para o comando que estiver digitando no momento, ao usar a tecla Tab. Se só existir uma escolha possível, ele irá inserir o resto do comando para você. + + + + Números de Linha + + Esta opção controla se as diferentes expressões deverão ter um número à frente, de modo que, se possível, possa por exemplo no Maxima voltar a invocar os resultados mais antigos com o comando %O1. + + + + Animar a Folha de Cálculo + + Esta definição controla se as diferentes animações serão usadas para realçar as alterações de uma folha de cálculo. + + + + + + + + + +Referência de comandos + + +A janela principal do &cantor; + +O &cantor; tem os itens de menu comuns no &kde;. Para mais informações, leia o item Menu no capítulo Fundamentos do &kde;. + +Itens de menu adicionais ou especiais no &cantor;: + + +Menu Arquivo + + + + &Ctrl;N Arquivo Novo +Cria uma nova folha de trabalho com a infraestrutura padrão. + + +Arquivo Novo Infraestrutura +Cria uma nova folha de trabalho com a infraestrutura escolhida. + + +Arquivo Obter uma folha de exemplo +Abre a janela para obter exemplos enviados por outros usuários do &cantor; com o GetHotNewStuff. + + +Arquivo Abrir um exemplo +Abre a janela para escolher um exemplo a carregar. Os exemplos deverão ser transferidos com a opção Arquivo Obter uma folha de trabalho de exemplo de antemão. + + +Arquivo Salvar texto simples... +Permite salvar a folha de trabalho atual como um documento em texto simples. + + +Arquivo Exportar para LaTeX +Permite salvar a folha de trabalho atual como um documento em &latex;. + + +Arquivo Publicar a folha de trabalho +Abre a janela para publicar a sua folha de trabalho atual e disponibilizá-la para os outros usuários do &cantor; através do GetHotNewStuff. + + +Arquivo Executar o programa +Permite carregar e executar os programas em lote da infraestrutura atual. + + + + + + + +O menu Exibir + + + + &Ctrl;+ Exibir Ampliar +Amplia a folha de trabalho atual em 10%. + + + &Ctrl;- Exibir Reduzir +Reduz a folha de trabalho atual em 10%. + + +Exibir Mostrar o Editor de Programas +Abre a janela de edição de programas em lote para a infraestrutura atual. + + +Exibir Painéis Ajuda +Ativa ou desativa a visibilidade da aba de Ajuda na barra lateral. + + +Exibir Painéis Gerenciador de variáveis +Ativa ou desativa a visibilidade da aba do Gerenciador de variáveis na barra lateral. + + + + + + +O menu Folha de Trabalho + + + +Folha de trabalho Avaliar a folha de trabalho +Dispara a avaliação de toda a folha de trabalho. + + + &Shift;Return Folha de trabalho Avaliar o item +Dispara a avaliação do item atual. + + + &Ctrl;Return Folha de trabalho Inserir um item de comando +Insere um novo item de comando abaixo da posição atual do cursor. + + +Folha de trabalho Inserir um item de texto +Insere um novo item de texto abaixo da posição atual do cursor. + + +Folha de trabalho Inserir uma imagem +Insere o modelo de imagem abaixo da posição atual do cursor. Você terá que clicar com o &RMB; no modelo para configurar os detalhes da imagem. + + +Folha de trabalho Inserir uma quebra de página +Insere uma quebra de página abaixo da posição atual do cursor. + + + &Shift;Del Folha de trabalho Remover o item atual +Remove o item atual da folha de trabalho. + + + + + + +O menu Configurações +Este menu contém os itens de Configuração normais do &kde;, assim como os itens descritos na seção de Configuração. + + + +O menu Ajuda +&help.menu.documentation; + + + + + +Guia de Programação do &cantor; + +O &cantor; é facilmente extensível com 'plugins'. Você poderá criar + + Infraestruturas: + + Uma nova infraestrutura permite-lhe usar a interface do &cantor; com um programa diferente. + + + + Assistentes: + + Os assistentes são janelas que automatizam as tarefas mais comuns (como a inserção de uma matriz ou a execução de um programa.) + + + + +Atualmente, não existe nenhum tutorial de desenvolvimento ou documentação da API; por isso, se precisar criar um plugin, você terá que consultar o código. Todas as definições da interface estão na pasta lib. Para as implementações de exemplo, veja alguns dos plugins que vêm com o &cantor;. + + + + +Perguntas e respostas +&reporting.bugs; &updating.documentation; + + O Item do Menu Formatação com o LaTeX não está disponível + Nem todas as infraestruturas tem suporte a todas as opções. A versão atual tem suporte ao resultado em &latex; para as infraestruturas Maxima, Qalculate! e Sage. + + + Instalei o Sage/Maxima, mas a infraestrutura apropriada não aparece. + + Talvez o &cantor; não tenha detectado a localização corretamente. Vá à janela em ConfiguraçõesConfigurar o &kappname;... e mude a Localização do aplicativo apropriado. + + + + Que nome mais esquisito - o que ele tem a ver com matemática? + &cantor; vem do matemático Alemão Georg Cantor, o criador da teoria dos conjuntos. + + + + + + +Créditos e licença + +&cantor; +Direitos autorais do programa 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Direitos autorais da documentação © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Tradução de Marcus Gama marcus.gama@gmail.com +&underFDL; &underGPL; + + +Instalação + + +Como obter o &cantor; +&install.intro.documentation; + + +Requisitos + +Para poder usar com sucesso o &cantor;, você precisa do &kde; 4. Se quiser suporte para a formatação dos dados, precisa do &latex; e da LibSpectre. Para usar as diferentes infraestruturas, é necessário o pacote matemático apropriado. + + + + + + + + + +Compilação e instalação +&install.compile.documentation; + + +Configuração + +Dependendo do seu sistema, você poderá ter que ajustar as localizações para as diferentes aplicações usadas pelo &cantor;. + + + + + +&documentation.index; +
    + + diff --git a/po/pt_BR/docs/cantor/screenshot.png b/po/pt_BR/docs/cantor/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..29b208fb34487ef85cdf447b0f30e1a6f314f65a GIT binary patch literal 67652 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%0DKQccuM-3A?%HE*7QNQ%N-cM>=HbMbn$=uk25r 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 YW01Z@b$n2m2B1PwlzkynDg}lAKg^GSegFUf literal 0 HcmV?d00001 diff --git a/po/ro/cantor.po b/po/ro/cantor.po new file mode 100644 index 0000000..dbb55ef --- /dev/null +++ b/po/ro/cantor.po @@ -0,0 +1,3337 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Sergiu Bivol , 2010. +# Robert Roventa , 2010. +# Victor Cărbune , 2010. +# Cristian Oneț , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2010-12-06 00:09+0200\n" +"Last-Translator: Cristian Oneț \n" +"Language-Team: American English \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.1\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Rovența Robert Ioan" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "rov_93@yahoo.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Salvează rezultatul" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Reprezentare grafică avansată" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Delimitează" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Expresie:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Opțiuni adiționale:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Delimitează" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Opțiune activă" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Calculează" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Diferențiază" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabilă:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "De câte ori:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrează" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Limita de jos:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Limita de sus:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "Integrală definită" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Algebra liniară" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Creează matrice" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Coloane:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Linii:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Calculează valoriile proprii" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrice:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Calculează vectorii proprii" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Inversează matrice " + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Reprezentare 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabilă" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Nume" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minim:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maxim:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Reprezentare 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Prima variabilă" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "A 2-a varibilă" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Rulează script" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Rezolvă ecuații" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ecuații:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabile:" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1


    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    Vezi %3 pentru mai " +"multe informații
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Alegeți platforma de utilizat:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Setează acestă platformă ca platformă implicită" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrează delimitări in foaia de lucru" + +#: backends/julia/juliaextensions.cpp:213 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Julia script file (*.jl)" +msgstr "*.R|R fișier de tip script " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to Julia REPL:" +msgstr "Calea către Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrează delimitări in foaia de lucru" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Listă de scripturi către autorulare la începutul sesiunii" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Eroare: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Scripturi către autorulare" + +#: backends/lua/luabackend.cpp:68 +#, fuzzy, kde-format +#| msgctxt "" +#| "the url to the documentation of Sage, please check if there is a " +#| "translated version and use the correct url" +#| msgid "http://www.sagemath.org/doc/reference/index.html" +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command" +msgstr "Calea către Maxima:" + +#: backends/lua/luaextensions.cpp:36 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Lua script file (*.lua)" +msgstr "*.R|R fișier de tip script " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, fuzzy, kde-format +#| msgid "Path to Maxima:" +msgid "Path to luajit command:" +msgstr "Calea către Maxima:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima este un sistem pentru manipularea simblourilor și expresiilor " +"numericeaici fiind incluse și diferențierea, integrarea , seriile Taylor, " +"transformările Laplace, ecuatii diferențiale, sisteme pentru ecuații " +"liniare, polinoame, seturi, liste, vectori, matrici și tensorii. Câmpurile " +"Maxima sunt de mare precizie datorită folosirii fracțiilor exacte, preciziei " +"arbitrare pe numere naturale si variabile de tip real. Maxima poate " +"delimita funcții si date in două sau trei dimensiuni." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Calea către programul Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, fuzzy, kde-format +#| msgid "*.mac|Maxima batch File" +msgid "Maxima batch file (*.mac)" +msgstr "*.mac|Maxima fișier batch " + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Pornirea Maxima nereușită." + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima s-a oprit inexplicabil. Restartare." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima nu s-a putut porni de două ori într-un timp scurt. Se oprește " +"pornirea." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Eroare - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "function" +msgstr "Ecuații:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Calea către Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrează delimitări in foaia de lucru" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave este un limbaj de performanță înaltă, fiind folosit în mod " +"regulat pentru calculul numeric.
    Oferă o interfață eficientă pentru " +"rezolvarea problemelor liniare și nonliniare numerice și pentru efectuarea " +"altor experimente numerice folosind un limbaj care este în mare parte " +"compatibil cu Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Calea către programul Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "*.m|Octave script file" +msgid "Octave script file (*.m)" +msgstr "*.m|Octave fișier script" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Eroare de sintaxă" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Calea către Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "Python script file (*.py)" +msgstr "*.R|R fișier de tip script " + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, fuzzy, kde-format +#| msgid "Equations:" +msgid "Functions" +msgstr "Ecuații:" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Expression" +msgstr "Expresie:" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, fuzzy, kde-format +#| msgid "Remove Entry" +msgid "Remove" +msgstr "Șterge înregistrarea" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, fuzzy, kde-format +#| msgid "Clear Variables" +msgid "Clear List" +msgstr "Sterge variabilele" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, fuzzy, kde-format +#| msgid "Variable" +msgid "X variable" +msgstr "Variabilă" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, fuzzy, kde-format +#| msgid "Option active" +msgid "Options" +msgstr "Opțiune activă" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, fuzzy, kde-format +#| msgid "Plot title:" +msgid "Plot title" +msgstr "Titlul delimitării:" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "expression" +msgstr "Expresie:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, fuzzy, kde-format +#| msgid "Completion" +msgid "option" +msgstr "Completare" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, fuzzy, kde-format +#| msgctxt "@title:column" +#| msgid "Value" +msgid "value" +msgstr "Valoare" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, fuzzy, kde-format +#| msgid "Integrate" +msgid "integer" +msgstr "Integrează" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, fuzzy, kde-format +#| msgid "Line Numbers" +msgid "number" +msgstr "Numere de linie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, fuzzy, kde-format +#| msgid "Defaults" +msgid "default: %1" +msgstr "Implicite:" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load variables from a file" +msgstr "Încarcă variabilele" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "General" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, fuzzy, kde-format +#| msgid "Expression:" +msgid "Precision" +msgstr "Expresie:" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, fuzzy, kde-format +#| msgid "Evaluate Entry" +msgid "Evaluate" +msgstr "Evaluează înregistrarea" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, fuzzy, kde-format +#| msgid "Plot" +msgid "Plotting" +msgstr "Delimitează" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show grid:" +msgstr "Arată codul" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, fuzzy, kde-format +#| msgid "Plot title:" +msgid "Plot Style:" +msgstr "Titlul delimitării:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R este un limbaj si un mediu pentru calculul statistic și grafică, similar " +"cu limbajul si mediul S.
    Oferă o varietate de statistică( modelare " +"liniară si nonliniară, teste statistice clasice, analize de tip timp-serie, " +"clasificare si adunare,...) și tehnici grafice fiind și foarte " +"extensibilă. Limbajul S este deseori modalitatea de cercetare în " +"metodologia statistică, limbajul R furnizând o modalitate de tip open-" +"source pentru a particpa la această activitate." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Eroare la deschiderea fișierului %1" + +#: backends/R/rextensions.cpp:37 +#, fuzzy, kde-format +#| msgid "*.R|R script file" +msgid "R script file (*.R)" +msgstr "*.R|R fișier de tip script " + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Eroare la analizarea comenzii" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage este un software matematic gratuit de tip sursă deschisă sub licență " +"GPL.
    Înglobează puterea mai multor pachete de tip sursă deschisă intr-" +"o interfață de bază Phyton . " + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Calea către programul Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Rezultatul lui %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Ultima ieșire a fost : \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python fișier script\n" +"*.sage|Sage fișier script" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Procesul Sage s-a oprit în timp ce evalua expresia" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Procesul Sage s-a oprit inexplicabil" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Procesul Sage a ieșit în timp ce evalua expresia" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Procesul Sage a ieșit" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Pornire nereușită a procesului Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Calea către Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, fuzzy, kde-format +#| msgid "" +#| "*.py|Python script file\n" +#| "*.sage|Sage script file" +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.py|Python fișier script\n" +"*.sage|Sage fișier script" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Descarcă exemple de foi de lucru " + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Deschide exemplu" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, fuzzy, kde-format +#| msgid "*.cws|Cantor Worksheet" +msgid "Cantor Worksheet (*.cws)" +msgstr "*.cws|Foaie de lucru Cantor" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "&Open Example" +msgid "Open file" +msgstr "&Deschide exemplu" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nicio platformă nu a fost găsită

    \n" +"
    Poți încerca:\n" +"
    • Se încarcă setările în dialogul de configurare;
    • Se " +"instalează pachetele pentru următorul program:
    • %2
    " +msgstr[1] "" +"

    Nicio platformă nu a fost găsită

    \n" +"
    Poți încerca:\n" +"
    • Se încarcă setările în dialogul de configurare;
    • Se " +"instalează pachetele pentru unul dintre programele următoare:
    • %2 " +"
    " +msgstr[2] "" +"

    Nicio platformă nu a fost găsită

    \n" +"
    Poți încerca:\n" +"
    • Se încarcă setările în dialogul de configurare;
    • Se " +"instalează pachetele pentru unul dintre programele următoare:
    • %2 " +"
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Eroare" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sesiunea %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Nu s-a putut găsi partea Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, fuzzy, kde-format +#| msgid "Save result" +msgid "Save Project" +msgstr "Salvează rezultatul" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Platforma care este folosită implicit" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Setează setările de scris la setări implicite" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Subliniază sintaxa dupa setările implicite" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Activează completarea după setările implicite" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Activează numerotarea expresiilor după setările implicite" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Evaluează in mod automat intrările de sub cea curentă" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Platforma %1 nu este instalată." + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Sunt câteva probleme cu %1 platforma,\n" +"verificați configurația sau instalează pachetele de care ai nevoie.\n" +"S-ar putea să poți vedea doar foaia de lucru." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, fuzzy, kde-format +#| msgid "Export to LaTex" +msgid "Export to LaTeX" +msgstr "Trimite către LaTex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Evaluează foaia de lucru" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Setări de scriere care folosesc LaTex" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Evidențiere sitaxă" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Completare" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Numere de linie" + +#: cantor_part.cpp:270 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Animate Worksheet" +msgstr "Evaluează foaia de lucru" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Restartează platforma" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Evaluează înregistrarea" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Inserează comandă de intrare" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Introduceți textul" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Inserează comandă de intrare" + +#: cantor_part.cpp:307 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Latex Entry" +msgstr "Introduceți textul" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Șterge intrarea actuală" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Afișează %1 ajutor" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Arată redactor de scripturi" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Arată finalizarea" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Parte a Cantor" + +#: cantor_part.cpp:423 +#, fuzzy, kde-format +#| msgid "(C) 2009-2010 Alexander Rieder" +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2010 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, fuzzy, kde-format +#| msgid "Save" +msgid "Save as" +msgstr "Salvează" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Salvează" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Restartează platforma" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Întrerupe" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Se calculează..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Gata" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Eroare sesiune: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inițializare încheiată" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Se inițializează sesiunea" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Fără nume" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Vrei să urci foaia de lucru la un server web public ?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Întrebare - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Foaia de lucru nu este salvată. Ar trebui sa o salvezi înainte de a o uploada" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Avertizare - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Această platformă nu suportă scripturi." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Vizualizare" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Foaie de lucru" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Fișier" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, fuzzy, kde-format +#| msgid "New" +msgid "&New" +msgstr "Nou" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panouri" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Setări" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Gata" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgid "Text Entry" +msgid "Text Color" +msgstr "Text de intrare" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Întrerupt" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot load image %1" +msgstr "Fișierul nu poate fi scris %1." + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, fuzzy, kde-format +#| msgid "&Settings" +msgid "Image Settings" +msgstr "&Setări" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Deschide" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, fuzzy, kde-format +#| msgid "x" +msgid "px" +msgstr "x" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, fuzzy, kde-format +#| msgid "Show Code" +msgid "Show LaTeX code" +msgstr "Arată codul" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Calea către programul latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Calea către programul dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Nume" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Valoare" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "De la:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Către:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Titlu principal" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Scara abscisei" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Scara ordonatei" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Titlul delimitării:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Interfață KDE pentru aplicații matematice" + +#: main.cpp:85 +#, fuzzy, kde-format +#| msgid "(C) 2009-2010 Alexander Rieder" +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2010 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, fuzzy, kde-format +#| msgid "Octave backend" +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Platformă Octave" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "K platformă pentru algebră" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Platformă Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, fuzzy, kde-format +#| msgid "Integrate" +msgid "Interface" +msgstr "Integrează" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "Utilizează această platformă" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "Document de deschis" + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Eroare la deschiderea fișierului %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Felul KDE de a face matematică" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Denumire:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Valoare:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Adaugă o nouă variabilă" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Încarcă variabilele" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Păstrează variabilele" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Sterge variabilele" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Sunteți sigur că vreți sa ștergeți toate variabilele?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Confirmare - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "Load Variables" +msgid "Load file" +msgstr "Încarcă variabilele" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Șterge rezultatul" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Nu a putut fi găsită o componentă KDE pentru editarea textului;\n" +"verificați instalarea KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Redactor de scripturi" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor de scripturi -%1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Command Entry" +msgid "Commands" +msgstr "Comandă de intrare" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Result" +msgid "Results" +msgstr "Rezultat" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, fuzzy, kde-format +#| msgid "Error" +msgid "Errors" +msgstr "Eroare" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Platformă implicită:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Când e activat, Cantor va evalua in mod automat fiecare intrare de sub cea " +"curentă." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Reevaluează intrările in mod automat" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Implicite:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, fuzzy, kde-format +#| msgid "Enable LaTex Typesetting" +msgid "Enable LaTeX Typesetting" +msgstr "Activează setările de scriere LaTex" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Activează evidențierea sintaxei" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Activează Completarea" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Activează numerele in linie" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, fuzzy, kde-format +#| msgid "Evaluate Worksheet" +msgid "Enable Worksheet Animations" +msgstr "Evaluează foaia de lucru" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Arată interpretările" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Arată codul" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Nu se poate reda fișierul de tip Eps. S-ar putea să aveți nevoie de resurse " +"adiționale." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Fișierul nu poate fi scris %1." + +#: worksheet.cpp:920 +#, fuzzy, kde-format +#| msgid "Cannot write file %1." +msgid "Cannot write file." +msgstr "Fișierul nu poate fi scris %1." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Eroare la salvarea fișierului %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Eroare la încarcărea foii de stil latex.xsl " + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Comandă de intrare" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Text de intrare" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Inserează comandă de intrare" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, fuzzy, kde-format +#| msgid "Text Entry" +msgid "LaTeX Entry" +msgstr "Text de intrare" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, fuzzy, kde-format +#| msgid "Remove Entry" +msgid "Image" +msgstr "Șterge înregistrarea" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Introduceți textul" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Text Entry Before" +msgid "Insert Entry Before" +msgstr "Text de intrare înainte" + +#: worksheet.cpp:1264 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert LaTeX Entry" +msgstr "Introduceți textul" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "" + +#: worksheet.cpp:1381 +#, fuzzy, kde-format +#| msgid "Inline" +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "În linie" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Șterge înregistrarea" + +#: worksheetentry.cpp:707 +#, fuzzy, kde-format +#| msgid "Remove Entry" +msgid "Drag Entry" +msgstr "Șterge înregistrarea" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Platforma pe care acest fișier a fost creeat nu este instalată. Este " +#~ "nevoie de %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publică foaia de lucru" + +#, fuzzy +#~| msgid "Insert Entry" +#~ msgid "Insert" +#~ msgstr "Inserează înregistrare" + +#, fuzzy +#~| msgid "Insert Text Entry Before" +#~ msgid "Insert Before" +#~ msgstr "Inserează text de intrare înainte de " + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Nu se poate deschide fișierul %1. Tip de fișier necunoscut" + +#, fuzzy +#~| msgid "*.tex|LaTex Document" +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex| Document LaTex " + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Foaie de lucru Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server pentru Platforma Cantor R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#, fuzzy +#~| msgid "Load Variables" +#~ msgid "Usage: loadVariables file" +#~ msgstr "Încarcă variabilele" + +#, fuzzy +#~| msgid "Load Variables" +#~ msgid "Loading failed." +#~ msgstr "Încarcă variabilele" + +#, fuzzy +#~| msgid "(C) 2009-2010 Alexander Rieder" +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2010 Alexander Rieder" + +#~ msgid "Cantor Server for R" +#~ msgstr "Server Cantor pentru R " + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Doriți să exportați și imagini?" + +#~ msgid "Could not start the server." +#~ msgstr " Serverul nu a putut fi pornit." + +#~ msgid "Pause Animation" +#~ msgstr "Întrerupe animația" + +#~ msgid "Start Animation" +#~ msgstr "Începe animația" + +#~ msgid "Restart Animation" +#~ msgstr "Repornește animația" + +#~ msgid "Append Command Entry" +#~ msgstr "Adăugă comandă de intrare" + +#~ msgid "Append Text Entry" +#~ msgstr "Adăugă text de intrare" + +#, fuzzy +#~| msgid "Append Text Entry" +#~ msgid "Append Latex Entry" +#~ msgstr "Adăugă text de intrare" + +#~ msgid "Other" +#~ msgstr "Altele" + +#~ msgid "And %1 more..." +#~ msgstr "Și %1 incă..." + +#~ msgid "Main Toolbar" +#~ msgstr "Bară de unelte principală" + +#~ msgid "Completion Style:" +#~ msgstr "Completarea Stilului" + +#~ msgid "Popup" +#~ msgstr "Indiciu" + +#~ msgid "The style used for Completion" +#~ msgstr "Stilul folosit pentru completare" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Calea către programul Sage" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Inserează comanda de intrare după" + +#~ msgid "Command Entry Before" +#~ msgstr "Comandă de intrare înainte" + +#~ msgid "GroupBox" +#~ msgstr "Grupul Box" + +#~ msgid "Help" +#~ msgstr "Ajutor" + +#~ msgid "Show Help Panel" +#~ msgstr "Arată panoul de ajutor" diff --git a/po/ru/cantor.po b/po/ru/cantor.po new file mode 100644 index 0000000..b7ede40 --- /dev/null +++ b/po/ru/cantor.po @@ -0,0 +1,3365 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Alexander Potashev , 2009, 2010, 2011, 2012, 2014, 2015, 2016, 2017, 2018. +# Yury G. Kudryashov , 2009, 2012. +# Alexey Subach , 2011. +# Yuri Efremov , 2013. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-09-22 19:31+0300\n" +"Last-Translator: Alexander Potashev \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Environment: kde\n" +"X-Accelerator-Marker: &\n" +"X-Text-Markup: kde4\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Александр Поташев,Алексей Субач" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "aspotashev@gmail.com,alexey.subach@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Приостановить" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Запустить" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Остановить" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "&Сохранить результат в файл" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Построить график..." + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "График" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Выражение:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Дополнительные параметры:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&График" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Использовать эти параметры" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Алгебра" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Найти &производную" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Переменная:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Порядок производной:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "П&акет" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Импорт пакета..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Пакет:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Найти &интеграл" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Нижний предел:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Верхний предел:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "определённый интеграл" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Линейная алгебра" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Ввести &матрицу" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Столбцов:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Строк:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Найти собственные &значения" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Матрица:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Найти собственные &векторы" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Найти &обратную матрицу" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "График функции" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Переменная" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Название" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Минимум:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Максимум:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Поверхность, задаваемая функцией" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Первый аргумент функции" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Второй аргумент функции" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Запустить сценарий" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Решить &уравнения" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Уравнения:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Неизвестные:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Рекомендуемая версия: %4

    %2

    Более подробная информация находится на сайте %3" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Выберите базовую систему компьютерной алгебры:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Использовать по умолчанию эту систему компьютерной алгебры" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Путь к программе командой строки Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Встраивать графики в документ" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Сценарии Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Путь к программе командой строки Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, fuzzy, kde-format +#| msgid "Integrate Plots in Worksheet" +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Встраивать графики в документ" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/ru/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Список сценариев, которые запускаются в начале сеанса" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Ошибка: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Автоматически запускаемые сценарии" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua — быстрый и легковесный язык сценариев с простым синтаксисом " +"процедурным синтаксисом. Существует множество математических и научных " +"библиотек для Lua.

    Этот модуль совместим с luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Путь к команде luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Сценарии Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Путь к команде luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima — это система обработки символьных и численных выражений, включая " +"дифференцирование, интегрирование, ряды Тейлора, преобразования Лапласа, " +"обыкновенные дифференциальные уравнения, системы линейных уравнений, " +"многочлены, и множества, списки, векторы, матрицы и тензоры. Maxima получает " +"численные результаты высокой точности, используя точные дроби, целые числа " +"произвольной длины и действительные числа переменной точности. Maxima может " +"строить двумерные и трёхмерные графики функций и данных." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Путь к исполняемому файлу Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Включить управление переменными" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Ошибка: слишком много */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Ошибка: слишком много /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Ошибка: ожидалась кавычка \" до ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Пакетные файлы Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Не удалось запустить систему Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Система Maxima аварийно завершилась. Перезапуск..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Приложение Maxima завершилось с ошибкой дважды за короткий промежуток " +"времени. Прекращаю попытки запустить." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Ошибка — Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "функция" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Путь к программе Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Встраивать графики в документ" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Разрешить Cantor следить за созданием и уничтожением переменных" + +# http://xgu.ru/wiki/GNU_Octave -- ссылки на информацию об Octave (в том числе на русском языке). +# http://ru.wikibooks.org/wiki/GNU_Octave -- зачатки русского перевода документации. +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave — это язык программирования высокого уровня, предназначенный в " +"основном для численных расчётов.
    GNU Octave предоставляет удобный " +"интерфейс командной строки для численного решения линейных и нелинейных " +"задач и выполнения других видов численных расчётов с использованием языка, " +"по большей части совместимого с MATLAB." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Путь к исполняемому файлу Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Сценарии Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Синтаксическая ошибка" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Путь к программе Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Сценарии Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python — исключительно мощный язык программирования, используемый для " +"широкого круга приложений. Существует несколько пакетов для языка Python, " +"предназначенных для научных расчётов.

    Этот модуль поддержки Python " +"работает только с Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python — исключительно мощный язык программирования, используемый для " +"широкого круга приложений. Существует несколько пакетов для языка Python, " +"предназначенных для научных расчётов.

    Этот модуль поддержки Python " +"работает только с Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor — Диалог графика" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Функции" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Заголовок" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Выражение" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Добавить" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Удалить" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Очистить список" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Переменная x" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Стиль" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Линии" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Кресты" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Кресты и линии" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Квадраты" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Гистограмма" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Шаги" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "График «Японские свечи»" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Точки" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Сглаживание" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Нет" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "С сохранением монотонности" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Натуральные кубические сплайны" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Кривая Безье" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Кривая Безье (монотонная)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Диапазон значений функции" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Диапазон по оси x" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "&Частота точек" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Р&азмер шага" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Параметры" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Заголовок графика" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Метка оси X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Метка оси Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Расположение легенды" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Скрыть легенду" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Верхний левый угол" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Верхний правый угол" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Нижний левый угол" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Нижний правый угол" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Снизу" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Снаружи" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Показывать сетку" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Показывать полный край" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Использовать цвета" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Показывать внутри" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Логарифмическая шкала оси x" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Логарифмическая шкала оси y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Параметры файла" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Сохранить график в файл" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Тип файла" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Определить из имени файла" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! — это не просто копия самого дешёвого калькулятора. Qalculate! " +"нацелен на полное использование превосходного интерфейса, мощности и " +"гибкости современных компьютеров. В центре внимания Qalculate! находится " +"работа с выражениями. Вместо ввода каждого числа в математическом выражении " +"отдельно, вы можете написать целое выражение и позже изменять его. " +"Преобразование выражений гибкое и безошибочное, так что если вы что-то " +"сделаете неправильно, Qalculate! скажет вам об этом. Выражения, которые " +"нельзя полностью сократить, не приводят к ошибкам. Qalculate! упростит их " +"настолько, насколько это возможно и выдаст ответ в виде выражения. В " +"дополнение к числам и арифметическим операторам, выражение может содержать " +"любые комбинации переменных, единиц измерения и функций." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Как будут автоматически преобразовываться единицы измерения. Если да, " +"значения будут автоматически приводиться к самым подходящим единицам " +"измерения системы СИ." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Единица измерения углов по умолчанию для тригонометрических функций." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Основание системы счисления чисел результата." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Будет ли результат вычисления упрощён или разложен на множители." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Будут ли рациональные числа показаны как десятичная дроби, правильные или " +"неправильные дроби." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Бесконечная дробная часть числа будет продолжена многоточием вместо " +"округления (пример: 2/3 отображается как 0.666666... вместо 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Использовать все десятичные префиксы СИ. Если нет, префиксы, которые не " +"являются степенью тысячи, не будут использоваться автоматически." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Если да, отрицательные степени появятся вместо деления (например, 5/x^2 " +"станет 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Формат записи числа." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Если да, графики будут отображаться внутри рабочего пространства. Иначе, они " +"будут появляться в отдельном окне." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Должны ли разные цвета быть использованы при построении графиков." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Должна ли сетка быть нанесена на график." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Должны ли быть нарисованы вокруг графика полные границы." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Толщина линий, в пикселах." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Количество шагов интерполяции, используемых при построении графиков." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Режим сглаживания графиков." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Стиль графиков." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Расположение легенды на графиках." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Не может быть напечатано. Установлен ли пакет gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "пропущен %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 должно быть числом." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 должно быть целым числом." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 должно быть логическим (булевым) значением." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "недопустимый параметр для %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "найдено несколько выражений в одной команде графика (%1 и %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "Ошибка" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "Предупреждение" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" +"Не существует функции, переменной или единицы измерения с заданным именем." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Функция: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Внешний вид графика" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Рисовать график одной или нескольких функций подряд или в отдельных окнах." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "выражение" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "параметр" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "значение" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "целое число" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "логический" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "число" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "по умолчанию: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Имя функции" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Заголовок" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "метка оси x" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "метка оси y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Изображение для сохранения графика. Если пусто, показать график на экране. " +"Если inline=true, изображение покажется независимо от значения этого " +"параметра." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Расширение изображения для сохранения. Возможные значения: auto " +"(автоматически), png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Установите в «true» для раскрашивания графика, «false» — для чёрно-белого " +"изображения." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Минимальное значение по оси x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Максимальное значение по оси x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Будет ли логарифмическая шкала использована для оси x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Будет ли логарифмическая шкала использована для оси y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Основание логарифма для шкалы x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Основание логарифма для шкалы y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Будет ли показана сетка на графике." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Будет ли график окружён полями со всех сторон (не только со стороны осей)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Толщина линий." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Где будет расположена легенда графика. Возможные значения: none (нигде), " +"top_left (слева вверху), top_right (справа вверху), bottom_left (снизу " +"слева), bottom_right (снизу справа), below (ниже), outside (снаружи)." + +# BUGME: unique -> monotonic --aspotashev +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Сглаживание графика. Возможные значения: none (без сглаживания), monotonic " +"(с сохранением монотонности), csplines (натуральные кубические сплайны), " +"bezier (кривая Безье), sbezier (монотонная кривая Безье)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Стиль графика. Возможные значения: lines (линии), points (кресты), " +"points_lines (кресты и линии), boxes (квадраты), histogram (гистограмма), " +"steps (шаги), candlesticks («Японские свечи»), dots (точки)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Использовать вторую ось x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Использовать вторую ось y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Будут ли графики нарисованы внутри документа, вместо открытия нового окна." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" +"Расстояние между двумя точками интерполяции. Также обратите внимание на " +"количество шагов интерполяции." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" +"Количество точек интерполяции. Также обратите внимание на количество шагов " +"интерполяции." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Имя переменной x. Должно быть неизвестной переменной." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Сохранить значения переменных в файл" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Сохранить все определённые на данный момент переменные в файл. Они могут " +"быть позже загружены из этого файла командой %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "файл" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "файл: файл для сохранения" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Загрузить переменные из файла" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Загрузить переменные из файла, который был ранее создан командой %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "файл: файл для загрузки" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Общие" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Система счисления:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Формат дробей:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Десятичный" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Точный" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Дробный" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Правильные дроби" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Формат записи числа:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Полный" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Инженерный" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Точный" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Указывать на бесконечный ряд:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Включено" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Использовать все префиксы СИ:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Использовать отрицательные степени:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Выполнить" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Преобразовывать к наиболее подходящим единицам СИ:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Единица измерения углов:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "радианы" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "градусы" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "грады" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Упрощение формул:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "упрощение" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "разложение на множители" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Построение графиков" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Показывать графики внутри документа:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Цветные графики:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Показывать сетку:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Показывать полные границы:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Толщина линий:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Частота точек:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Режим сглаживания:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Натуральные кубические сплайны" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Стиль графика:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Шаги" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Расположение легенды:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R — это язык программирования и среда для статистических вычислений и " +"графики, похожая на язык программирования и среду разработки S.
    Этот " +"язык предоставляет широкий выбор статистических (линейное и нелинейное " +"моделирование, классические статистические тесты, анализ временных рядов, " +"классификация, кластеризация, ...) и графических инструментов. Кроме того, " +"он легко расширяем. Язык программирования S используется повсеместно для " +"статистических исследований, а язык R — альтернативный вариант с открытым " +"кодом." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Ошибка открытия файла %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Сценарии R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Ошибка при анализе выражения" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Сделайте двойной щелчок мышью для добавления файлов" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Сценарии R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage — это бесплатная математическая программа с открытым исходным кодом, " +"распространяемая на условиях лицензии GPL.
    Она использует мощь многих " +"существующих пакетов с открытым исходным кодом, предоставляя к ним общий " +"интерфейс на языке Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Путь к исполняемому файлу Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Результат операции %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Последний вывод был: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Сценарии Python (*.py);;Сценарии Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Процесс Sage аварийно завершился при вычислении этого выражения" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Процесс Sage аварийно завершился" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Процесс Sage завершился при вычислении этого выражения" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Процесс Sage завершился" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Не удалось запустить систему Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Путь к программе Sage:" + +# BUGME: are docs available in Russian? --aspotashev +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab — это свободное программное обеспечение, кроссплатформенная " +"вычислительная система и высокоуровневый численно-ориентированный язык " +"программирования.

    Scilab распространяется под лицензией CeCILL " +"(совместима с GPL)." + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Путь к исполняемому файлу scilab-adv-cli. Предупреждение: версия Scilab " +"должна быть 5.4 или новее." + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Сценарии Scilab (*.sce);;Файлы функций Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Путь к команде scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Загрузить примеры..." + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Открыть &пример..." + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Документы Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Открытие файла" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Не обнаружено ни одной поддерживаемой системы компьютерной алгебры

    \n" +"
    Вы можете попробовать:\n" +"
    • Изменить настройки в диалоге конфигурации;
    • Установить " +"пакеты, содержащие одну из следующих программ:
    • %2
    " +msgstr[1] "" +"

    Не обнаружено ни одной базовой системы

    \n" +"
    Вы можете попробовать:\n" +"
    • Изменить настройки в диалоге конфигурации;
    • Установить " +"пакеты, содержащие одну из следующих программ:
    • %2
    " +msgstr[2] "" +"

    Не обнаружено ни одной базовой системы

    \n" +"
    Вы можете попробовать:\n" +"
    • Изменить настройки в диалоге конфигурации;
    • Установить " +"пакеты, содержащие одну из следующих программ:
    • %2
    " +msgstr[3] "" +"

    Не обнаружено ни одной базовой системы

    \n" +"
    Вы можете попробовать:\n" +"
    • Изменить настройки в диалоге конфигурации;
    • Установить " +"пакеты, содержащие следующую программу:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Ошибка" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Сеанс %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Не удалось найти компонент Cantor." + +# BUGME: broken English --aspotashev +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Несколько открытых документов не были сохранены. Выйти из Cantor и закрыть " +"все документы?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Выход из Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Проект был изменён. Сохранить изменения?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Сохранение проекта" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Базовая система по умолчанию" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "По умолчанию показывать результаты с помощью LaTeX" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Использовать подсветку синтаксиса по умолчанию" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Использовать автодополнение по умолчанию" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "По умолчанию показывать номера строк" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "По умолчанию включать анимацию в документе" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Автоматически пересчитывать все выражения ниже текущего" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Базовая система %1 не установлена" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"В работе базовой системы %1 возникли проблемы,\n" +"вы сможете только просматривать данный документ.\n" +"Пожалуйста, проверьте настройки и установите необходимые пакеты." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Сохранить в виде обычного текста" + +# BUGME: add ellipsis ("...") --aspotashev +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Экспорт в LaTeX..." + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Посчитать все выражения" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Показывать результаты с помощью LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Подсветка синтаксиса" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Автодополнение" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Показывать номера строк" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Включить анимацию в документе" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Перезапустить базовую систему" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Посчитать выражение" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Вставить выражение" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Вставить фрагмент текста" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Вставить выражение" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Вставить фрагмент кода LaTeX ниже" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Вставить разрыв страницы ниже" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Вставить изображение ниже" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Удалить текущее выражение" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Открыть документацию по %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Редактор сценариев" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Показать варианты автодополнения" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© Alexander Rieder, 2009-2015" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Сохранение в файл" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Сохранить" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Перезапустить базовую систему" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "&Прервать" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Вычисление..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Готово" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Ошибка в сеансе: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Инициализация завершена" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Инициализация..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Безымянный" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Вы хотите опубликовать текущий документ на общедоступном веб-сервере?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Вопрос — Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Документ не сохранён. Перед публикацией его необходимо сохранить." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Предупреждение — Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Эта базовая система не поддерживает сценариев." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Правка" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Вид" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Документ" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Файл" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Создать" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Панели" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Настройка" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Белый" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Чёрный" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Тёмно-красный" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Красный" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Розовый" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Тёмно-зелёный" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Зелёный" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Салатовый" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Тёмно-синий" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Синий" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Голубой" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Тёмно-жёлтый" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Жёлтый" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Кремовый" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Тёмно-бирюзовый" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Бирюзовый" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Аквамариновый" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Тёмно-пурпурный" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Пурпурный" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Лавандовый" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Ржавый" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Оранжевый" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Рыжий" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Тёмно-серый" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Серый" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Светло-серый" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Цвет фона" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Цвет текста" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Шрифт" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Полужирный" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Курсив" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Вычисление выражения прервано" + +# BUGME: not visible in the UI? --aspotashev +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Строка поиска" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Искать:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Следующее" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Предыдущее" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Заменить на:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Заменить" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Заменить &все" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Искать в:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "С &учётом регистра" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Настроить изображение" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Нажмите правой кнопкой для вставки изображения" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Не удалось загрузить изображение %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Параметры изображения" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Открыть" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Размер на экране" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Ширина" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Высота" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Предварительный просмотр" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Размер на печати" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Использовать размер на экране" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(автоматически)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "пикс." + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Выбор файла изображения" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Показать код LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Путь к исполняемому файлу latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Путь к исполняемому файлу dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Имя" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Значение" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "От:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "До:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Заголовок" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Ось абсцисс" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ось ординат" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Заголовок графика:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Оболочка к системам компьютерной алгебры для KDE" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© Alexander Rieder, 2009-2015
    © Filipe Saraiva, 2016" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Сопровождающий, перенос на Qt5/KF5, поддержка Scilab и Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Первоначальный автор, прежний сопровождающий (в 2009-2015 годах)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Поддержка KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Поддержка Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Интерфейс" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Значок Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Использовать систему компьютерной алгебры " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Открываемые документы." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Не удалось открыть файл %1." + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Разрыв страницы ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Математический центр KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Имя:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Значение:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Добавить переменную" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Загрузить переменные из файла" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Сохранить список переменных" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Очистить список переменных" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Удалить все переменные?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Подтверждение — Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Загрузка файла" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Удалить результат" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Компонент редактирования текста не найден в KDE.\n" +"Проверьте установку KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Редактор сценариев" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "%1 — Редактор сценариев" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Не найдено" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Достигнуто начало документа" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Достигнут конец документа" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Заменено %1 вхождение" +msgstr[1] "Заменены %1 вхождения" +msgstr[2] "Заменены %1 вхождений" +msgstr[3] "Заменено %1 вхождение" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Выражения" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Результаты" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Ошибки" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Текст" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Код LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Система по умолчанию:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "Автоматически пересчитывать все выражения ниже текущего." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Автоматически пересчитывать выражения" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "По умолчанию" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Показывать результаты с помощью LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Включить подсветку синтаксиса" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Включить автодополнение" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Показывать номера строк" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Включать анимацию в документах" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Показать выражение" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Показать код LaTeX" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Не удалось интерпретировать файл Eps. Возможно, нужны дополнительные пакеты" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Не удалось записать в файл %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Не удалось записать в файл." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Ошибка при сохранении файла %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Не удалось загрузить таблицу стилей LaTeX XSL" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Выражение" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Фрагмент текста" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Вставить выражение" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Фрагмент кода LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Изображение" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Разрыв страницы" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Вставить фрагмент текста" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Text Entry Before" +msgid "Insert Entry Before" +msgstr "Фрагмент текста выше" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Вставить фрагмент кода LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Цвет текста..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Цвет" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Подсветка текста..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Шрифт" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Размер шрифта" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "Полу&жирный" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "К&урсив" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "Под&чёркнутый" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "П&еречёркнутый" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "По &левому краю" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Слева" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Выравнивание по &центру" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "По центру" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "По &правому краю" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Справа" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "Выравнивание по &ширине" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "По ширине" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Удалить запись" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Перетащить запись" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Базовая система, при помощи которой был создан этот файл, не установлена. " +#~ "Требуется %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "О&публиковать документ" + +#~ msgid "Waiting for Image..." +#~ msgstr "Ожидание изображения..." + +#~ msgid "Insert" +#~ msgstr "Вставить ниже" + +#~ msgid "Insert Before" +#~ msgstr "Вставить выше" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Не удалось открыть файл %1: неизвестный тип MIME" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Документы LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "Документы Cantor (*.cws)" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Сервер для базовой системы R для Cantor" + +#~ msgid "R Server" +#~ msgstr "Сервер R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© Alexander Rieder, 2009" + +# BUGME: note that "saveVariables" should not be translated in the context --aspotashev +#~ msgid "Usage: saveVariables file" +#~ msgstr "Использование: saveVariables [файл]" + +#~ msgid "Saving failed." +#~ msgstr "При сохранении произошла ошибка." + +# BUGME: add context: loadVariables shouldn't be translated --aspotashev +#~ msgid "Usage: loadVariables file" +#~ msgstr "Использование: loadVariables [файл]" + +#~ msgid "Loading failed." +#~ msgstr "При загрузке произошла ошибка." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© Alexander Rieder, 2009-2013" + +#~ msgid "Path to python command" +#~ msgstr "Путь к команде python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Сервер R для Cantor" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Экспортировать изображения?" + +#, fuzzy +#~| msgid "Path to scilab-adv-cli command:" +#~ msgid "Path to python2 command:" +#~ msgstr "Путь к команде scilab-adv-cli:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Включить управление переменными" + +#~ msgid "Could not start the server." +#~ msgstr "Не удалось запустить сервер." + +#~ msgid "Pause Animation" +#~ msgstr "Остановить анимацию" + +#~ msgid "Start Animation" +#~ msgstr "Запустить анимацию" + +#~ msgid "Restart Animation" +#~ msgstr "Перезапустить анимацию" + +#~ msgid "Append Command Entry" +#~ msgstr "Добавить выражение" + +#~ msgid "Append Text Entry" +#~ msgstr "Добавить фрагмент текста" + +#~ msgid "Append Latex Entry" +#~ msgstr "Добавить фрагмент кода LaTeX" + +#~ msgid "Append Image" +#~ msgstr "Добавить изображение" + +#~ msgid "Append Page Break" +#~ msgstr "Добавить разрыв страницы" + +#~ msgid "Other" +#~ msgstr "Другое" + +#~ msgid "And %1 more..." +#~ msgstr "И ещё %1..." + +#~ msgid "Main Toolbar" +#~ msgstr "Основная панель инструментов" + +#~ msgid "Completion Style:" +#~ msgstr "Варианты автодополнения:" + +#~ msgid "Popup" +#~ msgstr "Во всплывающем меню" + +#~ msgid "The style used for Completion" +#~ msgstr "Режим автодополнения" + +#, fuzzy +#~| msgid "Path to the Sage executable" +#~ msgid "Path to the Scilab executable" +#~ msgstr "Путь к исполняемому файлу Sage" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Вставить выражение выше" + +#~ msgid "Command Entry Before" +#~ msgstr "Выражение выше" + +# BUGME: shouldn't be translatable (not user visible) +#~ msgid "GroupBox" +#~ msgstr "GroupBox" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "" +#~ "Для запуска этого теста требуется поддержка системы компьютерной алгебры " +#~ "%1" + +#~ msgid "Help" +#~ msgstr "Справка" + +#~ msgid "Show Help Panel" +#~ msgstr "Панель справки" + +#~ msgid "Uploading successful" +#~ msgstr "Публикация прошла успешно" + +#~ msgid "Error uploading File %1" +#~ msgstr "Ошибка при публикации файла %1" diff --git a/po/ru/docs/cantor/index.docbook b/po/ru/docs/cantor/index.docbook new file mode 100644 index 0000000..b0972cc --- /dev/null +++ b/po/ru/docs/cantor/index.docbook @@ -0,0 +1,571 @@ + + + + + +]> + + + +Руководство &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +АлександрПоташев
    aspotashev@gmail.com
    Перевод на русский язык
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +26 августа 2009 г. +0.1 + + +&cantor; — это программа, предоставляющая удобный интерфейс к различным свободным математическим пакетам. + + + +KDE +kdeedu +математика +алгебра +Cantor +Sage +R +Maxima + + +
    + + +Введение + +&cantor; — это программа, позволяющая использовать ваши любимые математические приложения через приятный интерфейс для &kde;. Она содержит диалоговые окна для удобства выполнения часто встречающихся задач и позволяет публиковать документы. + + + +Использование &cantor; + +Снимок экрана: +Это снимок экрана программы &cantor; + + + + + + + + + Снимок экрана + + + + + + + +Возможности &cantor; + + Интуитивно понятный вид документа для подсчёта выражение, + Показ полученных графиков прямо в документе, + Простая модульная структура программы, позволяющая добавлять поддержку новых систем компьютерной алгебры, + Возможность загрузки и публикации примеров документов с помощью утилиты «Загрузка материалов из Интернета». + Вывод математических формул с помощью LaTeX, + Подсветка синтаксиса в зависимости от системы компьютерной алгебры, + Диалоговые окна, упрощающие выполнение часто используемых действий, таких как интегрирование и ввод матрицы. + + + + +Базовые системы для &cantor; +&cantor; предлагает выбрать одну из нескольких систем компьютерной алгебры в зависимости от ваших нужд. +На данный момент доступны следующие системы компьютерной алгебры: + + Sage: + + Sage — это бесплатная математическая программа с открытым исходным кодом, распространяемая на условиях лицензии GPL. Она использует мощь многих существующих пакетов с открытым исходным кодом, предоставляя к ним общий интерфейс на языке Python. Более подробная информация находится на сайте http://sagemath.org. + + + + Maxima: + + Maxima — это система обработки символьных и численных выражений, включая дифференцирование, интегрирование, ряды Тейлора, преобразования Лапласа, обыкновенные дифференциальные уравнения, системы линейных уравнений, многочлены, и множества, списки, векторы, матрицы и тензоры. Maxima получает численные результаты высокой точности, используя точные дроби, целые числа произвольной длины и действительные числа переменной точности. Maxima может строить двумерные и трёхмерные графики функций и данных. Более подробная информация находится на сайте http://maxima.sourceforge.net. + + + + R: + + R — это язык программирования и среда для статистических вычислений и графики, похожая на язык программирования и среду разработки S. Этот язык предоставляет широкий выбор статистических (линейное и нелинейное моделирование, классические статистические тесты, анализ временных рядов, классификация, кластеризация, ...) и графических инструментов. Кроме того, он легко расширяем. Язык программирования S используется повсеместно для статистических исследований, а язык R — альтернативный вариант с открытым кодом. Более подробная информация находится на сайте http://www.r-project.org. + + + + KAlgebra: + + KAlgebra — это калькулятор с поддержкой построения графиков на основе языка MathML, входящий в состав образовательного пакета KDE. Более подробная информация находится на сайте http://edu.kde.org/kalgebra/. + + + + + + + +Интерфейс &cantor; + + + Снимок экрана с документом &cantor; + + + + + + + + + Снимок экрана с документом &cantor; + + + + +Интерфейс пользователя &cantor; состоит из трёх частей: + Панель вкладок, при помощи которой можно переключаться между документами; + Панель справки, где будет показано описание команды, если ввести «? команда»; + Документ. + + + +Документ +В &cantor; вы работаете с документом. В нём можно вводить выражения, производить вычисления и видеть результаты. Набор доступных в выражениях команд зависит от используемой системы компьютерной алгебры, поэтому полезно знать синтаксис конкретной системы. Если вы знаете название команды, можно посмотреть её описание, введя «? команда». Чтобы посмотреть примеры документов &cantor;, выберите пункт меню Файл Загрузить примеры... и загрузите документы, опубликованные другими пользователями. + + Настройка + В меню Настройка можно настроить внешний вид текущего документа. + + + Показывать результаты с помощью LaTeX + + Этот параметр влияет на то, в каком виде будут показаны результаты вычислений. Если он включён, результат будет обработан системой LaTeX для создания визуально понятных формул. Например, 3*x^2*sqrt(2)*x+2/3 превратится в + + + + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Подсветка синтаксиса + + Подсветка синтаксиса повышает читаемость кода, выделяя цветом ключевые слова и парные скобки. + + + + Автодополнение + + Если включить этот параметр, &cantor; будет показывать возможные продолжения вводимой вами команды при нажатии клавиши Tab. Если существует только одно продолжение команды, при нажатии клавиши Tab название команды будет автоматически введено полностью. + + + + Показывать номера строк + + Этот параметр позволяет добавить нумерацию введённых выражений. Нумерацию можно использовать для подстановки предыдущих результатов в новое выражение; в Maxima это делается командой %O1. + + + + + + + + + +Список команд + + +Главное окно &cantor; + + +Меню <guimenu +>Файл</guimenu +> + + + + &Ctrl;N Файл Создать +Создаёт новый документ. + + + &Ctrl;S Файл Сохранить +Сохраняет документ. + + + &Ctrl;Q Файл Выход +Завершает работу &cantor;. + + + + + + + +Меню <guimenu +>Справка</guimenu +> +&help.menu.documentation; + + + + + +Руководство разработчика &cantor; + +&cantor; расширяется простыми в написании модулями. Модули бывают: + + Для поддержки системы компьютерной алгебры + + Новый модуль поддержки системы компьютерной алгебры позволит работать с ней из &cantor;. + + + + Диалоговые окна для упрощения ввода команд + + Вспомогательные диалоговые окна упрощают и делают наглядным выполнение таких стандартных действий, как например ввод матрицы или запуск сценария. + + + + +На данный момент не написано ни руководства по написанию модулей для Cantor, ни документации по программному интерфейсу. Поэтому при написанием модулей у вас есть только один источник информации — исходный код Cantor. Все определения интерфейса находятся в каталоге lib. В качестве примеров модулей можно рассматривать модули, входящие в состав &cantor;. + + + + +Вопросы и ответы +&reporting.bugs; &updating.documentation; + + Пункт меню Показывать результаты с помощью LaTeX недоступен + Не все базовые системы поддерживают каждый параметр. + + + Sage или Maxima установлены, но соответствующая базовая система не появляется в списке. + + Возможно программа &cantor; не смогла найти расположение базовой системы. Откройте диалоговое окно «Настройка» и укажите правильный путь к соответствующей программе. + + + + Откуда такое странное название программы? Какое оно имеет отношение к математике? + Программа Cantor названа в честь немецкого математика Георга Кантора (Georg Cantor), создателя теории множеств. + + + + + + +Авторские права и лицензия + +&cantor; +© Alexander Rieder alexanderrieder@gmail.com, программа, 2009 + +© Alexander Rieder alexanderrieder@gmail.com, документация, 2009 + +Перевод на русский язык: Александр Поташев aspotashev@gmail.com +&underFDL; &underGPL; + + +Установка + + +Как получить &cantor; +&install.intro.documentation; + + +Системные требования + +Чтобы успешно использовать &cantor;, необходим &kde; 4. Для возможности отрисовки формул требуется установить LaTeX и LibSpectre. Для использования различных базовых систем компьютерной алгебры, их нужно установить. + + + + + + + + + +Компиляция и установка +&install.compile.documentation; + + +Настройка + +В зависимости от вашей системы может потребоваться настройка путей к различным приложениям, используемым &cantor;. + + + + + +&documentation.index; +
    + + diff --git a/po/sk/cantor.po b/po/sk/cantor.po new file mode 100644 index 0000000..b556e35 --- /dev/null +++ b/po/sk/cantor.po @@ -0,0 +1,3246 @@ +# translation of cantor.po to Slovak +# Richard Fric , 2009. +# Roman Paholík , 2012, 2013, 2014, 2015, 2016, 2017. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2017-08-04 22:17+0100\n" +"Last-Translator: Roman Paholik \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Roman Paholík" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "wizzardsk@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Pozastaviť" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Spustiť" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Zastaviť" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Uložiť výsledok" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Pokročilé kreslenie" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Kresliť" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Výraz:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Ďalšie voľby:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "Kresliť" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Voľba aktívna" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "Vypočítať" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Diferencovať" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Premenná:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Časy:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "Balík" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importovať balík" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Balíček:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrovať" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Dolný limit:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Horný limit:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "Určitý integrál" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "Lineárna algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Vytvoriť maticu" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Stĺpce:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Riadky:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Vypočítať vlastné hodnoty" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matica:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Vypočítať vlastné vektory" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertovať maticu" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2D graf" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Premenná" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Názov" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3D graf" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Prvá premenná" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Druhá premenná" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Spustiť skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Riešiť rovnice" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Rovnice:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Premenné:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Odporúčaná verzia: %4
    %2

    Pozri %3 pre viac informácií
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Vyberte backend na použitie:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Nastaviť tento backend predvolený" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia je dynamický programovací jazyk vysokej úrovne s vysokým " +"výkonom pre technické výpočty so syntaxou, ktorá je známe používateľom iných " +"technických výpočtových prostredí. Poskytuje sofistikovaný prekladač, " +"distribuované paralelné spúšťanie, číselnú presnosť a bohatú matematickú " +"knižnicu funkcií.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Cesta k Julia natívnemu REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrovať grafy do pracovného listu" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Súbor skriptu Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Cesta k Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrovať grafy do pracovného listu (spustí nové sedenie pri zmene)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Prechodný formát radového zápisu" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/sk/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Zoznam skriptov automaticky spustených na začiatku sedenia" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Chyba: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Automaticky spustené skripty" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua je rýchly a ľahký skriptovací jazyk s jednoduchou procedurálnou " +"syntaxou. Obsahuje niekoľko knižníc zameraných na matematiku a vedu.

    " +"

    Tento backend podporuje luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Cesta k príkazu luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Súbor skriptu Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Cesta k príkazu luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima je systém pre manipuláciu so symbolickými a numerickými výrazmi, " +"vrátane derivovania, integrovania, Taylorovho radu, Laplaceovej " +"transformácie, obyčajných diferenciálnych rovníc, sústav lineárnych rovníc, " +"polynómov a radov, zoznamov, vektorov, matíc a tenzorov. Maxima prináša " +"vysokopresné číselné výsledky pomocou presných zlomkov, celých čísel s " +"ľubovoľnou presnosťou a čísel s plávajúcou desatinnou čiarkou a premenlivou " +"presnosťou. Maxima môže vykresliť funkcie a dáta v dvoch a troch rozmeroch. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Cesta k spustiteľnému súboru Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Povoliť správu premenných" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Chyba: Príliš veľa */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Chyba: Príliš veľa /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Chyba: očakávané \" pred ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Dávkový súbor Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Zlyhalo spustenie Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Aplikácia Maxima spadla. reštartovanie..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Aplikácia Maxima spadla dvakrát počas krátkej doby. Zastavenie pokúšania sa " +"o spustenie" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Chyba - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkcia" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Cesta k Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrovať grafy do pracovného listu" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Nechať Cantor sledovať vytvorenie/zánik premenných" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave je vysokoúrovňovýí programovací jazyk, primárne určený pre " +"numerické výpočty.
    Poskytuje pohodlné rozhranie príkazového riadku pre " +"riešenie lineárnych a nelineárnych problémov numericky a pre vykonávanie " +"iných numerických experimentov pomocou jazyka, ktorý je väčšinou " +"kompatibilný s Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Cesta k spustiteľnému súboru Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Súbor skriptu Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaktická chyba" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Cesta k Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Súbor skriptu Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python je pozoruhodne silný, dynamický programovací jazyk, ktorý sa " +"používa v celom rade aplikačných oblastí. Existuje niekoľko balíkov Python " +"pre vedecké programovanie.

    Tento backend podporuje Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python je pozoruhodne silný, dynamický programovací jazyk, ktorý sa " +"používa v celom rade aplikačných oblastí. Existuje niekoľko balíkov Python " +"pre vedecké programovanie.

    Tento backend podporuje Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Dialóg grafu" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkcie" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Názov" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Výraz" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Pridať" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Odstrániť" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Vyčistiť zoznam" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Premenná X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Štýl" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Čiary" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Body" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Body a čiary" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Škatule" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Kroky" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Sviečkový" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Bodky" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Vyhladzovanie" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Žiadne" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotónne" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Prirodzené kubické splajny" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bézier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bézierove (monotónna)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Rozsah funkcie" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X rozsah" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Vzorkovacia frekvencia" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Veľkosť kroku" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Možnosti" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Titulok grafu" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Popis osi X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Popis osi Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Pozícia legendy" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Skryť legendu" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Vľavo hore" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Vpravo hore" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Vľavo dole" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Vpravo dole" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Pod" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Vonku" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Zobraziť mriežku" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Zobraziť úplne ohraničenie" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Použiť farby" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Zobraziť vložené" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmická stupnica x" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmická stupnica y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Možnosti súboru" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Uložiť graf do súboru" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Typ súboru" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Zisťovať z názvu súboru" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! nie je váš bežný softvér replikácie najlacnejšej, dostupnej " +"kalkulačky. Qalculate! si kladie za cieľ plne využiť lepšie rozhranie, silu " +"a pružnosť moderných počítačov. V centre pozornosti v Qalculate! je vstupný " +"výraz. Namiesto zadania každého čísla v matematickom výraze samostatne, " +"môžete priamo napísať celý výraz a neskôr ho upraviť. Interpretácia výrazov " +"je flexibilná a odolná voči chybám, a ak predsa len urobíte niečo zlé, " +"Qalculate! vám to povie. Nie celkom riešiteľné výrazy však nie sú chyby. " +"Qalculate! ich zjednoduší tak ďaleko, ako je to možné, a odpovie s výrazom. " +"Okrem čísel a aritmetických operátorov, môže výraz obsahovať ľubovoľnú " +"kombináciu premenných, jednotiek a funkcií." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Či a ako budú jednotky automaticky premenené. Ak je pravda, premeniť na " +"najvhodnejšie jednotky SI (najmenšie množstvo jednotiek)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Predvolená jednotka uhlov pre trigonometrické funkcie." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Základ analyzovaných a vyhodnotených čísel." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Či výsledok vyhodnotenia bude zjednodušený alebo faktorizovaný." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Či budú racionálne čísla zobrazené s desatinnými miestami, ako zlomok alebo " +"niečo medzi tým." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Ukázať, že číselný rad číslic pokračuje neustále s tromi bodkami namiesto " +"zaokrúhlenia (výraz 2/3 sa zobrazí ako 0.666666... namiesto 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Použiť všetky desiatkové predpony SI. Ak je nepravda, predpony, ktoré nie sú " +"násobkami tisíc (centi, deci, deka, hekto) nebudú použité automaticky." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Ak je pravda, budú použité záporné exponenty namiesto delenia (výraz 5/x^2 " +"sa stáva 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Číselné zobrazenie." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Ak je pravda, budú grafy zobrazené vnútri pracovného listu. Ak nie je, " +"objavia sa v samostatnom okne." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Či by sa mali použiť farby v grafoch." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Či by sa mala v grafe vykresliť mriežka." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Či by sa malo vykresliť úplne ohraničenie okolo grafu." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Šírka čiar v pixeloch." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Počet interpolačných krokov, ktoré majú byť použité vo vykresľovaní." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Vyhladzovací režim v grafoch." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Štýl grafov." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Pozícia legendy v grafoch." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate hlási, že nemožno tlačiť. Je nainštalovaná aplikácia gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "chýba %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 musí byť číslo." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 musí byť integer." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 musí byť boolean." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "Neplatná možnosť pre %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "nájdených viac výrazov v jednom príkaze vykreslenia (%1 a %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "CHYBA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "UPOZORNENIE" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Žiadna funkcia, premenná alebo jednotka s daným názvom neexistuje." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkcia: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Rozhranie kreslenia" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Zakreslí jednu alebo viac funkcií buď ako vložené alebo v samostatnom okne." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "výraz" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "voľba" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "hodnota" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "celé číslo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolean" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "číslo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "predvolené: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Názov funkcie" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Poúis titulku" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Popis osi y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Popis osi y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Obrázok, do ktorého sa uloží graf. Ak je to prázdne, ukazuje graf v okne na " +"obrazovke. Ak je vložený=pravda, obrázok sa zobrazí bez ohľadu na túto voľbu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Typ obrázka pre uloženie ako. Jeden z auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Nastaviť pravda pre farebný graf, nepravda pre monochromatický." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minimálna hodnota osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Maximálna hodnota osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Či bude použitá logaritmická stupnica pre os x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Či bude použitá logaritmická stupnica pre os y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritmický základ pre os x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritmický základ pre os y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Či bude mriežka zobrazená v grafe." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Či bude graf ohraničený zo všetkých strán (nielen os)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Šírka čiar." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Kde sa umiestni legenda grafu. Jedno zo žiadneho, hore vľavo, hore vpravo, " +"dole vľavo, dole vpravo, pod grafom, mimo grafu" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Vyhladzovanie grafu. Jedno zo žiadneho, jedinečného, csplajn, bézieroveho, " +"sbézieroveho" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Štýl grafu. Jeden z čiarového, bodového, bodovo-čiarového, krabicového, " +"histogramu, krokového, sviečkového, bodkového" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Použiť stupnicu na druhej osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Použiť stupnicu na druhej osi y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Či je graf vykreslený ako vložený, namiesto v novom okne." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Vzdialenosť medzi dvoma interpolačnými bodmi. Tiež pozrieť kroky." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Počet interpolačných bodov. Tiež pozrieť krok." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Názov premennej x. Musí to byť neznáma premenná" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Uložiť premenné do súboru" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Uložiť všetky aktuálne definované premenné do súboru. Môžu byť znovu " +"načítané s %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "súbor" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "súbor: súbor, do ktorého sa ukladá" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Načítať premenné zo súboru" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Načítať premenné zo súboru, ktorý bol už predtým vytvorený s %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "súbor: súbor pre načítanie" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Všeobecné" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Číselný základ:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Formát zlomku:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Dekadický" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Presne" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Zlomkový" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinovaný" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Číselné zobrazenie:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Čisté" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Vedecké" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Presnosť" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Uviesť nekonečné rady:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Zapnuté" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Použiť všetky SI predpony:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Použiť záporné exponenty:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Vyhodnotiť" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Premeniť na najlepšie SI jednotky:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Uhlová jednotka:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radiány" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Stupňe" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradiány" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Štruktúrovaný režim:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Zjednodušiť" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktorizovať" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Kreslenie" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Zobraziť grafy vložené:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Farebné grafy:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Zobraziť mriežku:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Ukázať úplne ohraničenie:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Šírka čiar:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Vzorkovacia frekvencia:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Režim vyhladzovania:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Prirodzené kubické splajny" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Štýl nákresu:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Kroky" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Pozícia legendy:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R je jazyk a prostredie pre štatistické výpočty a grafiku, podobný ako " +"prostredie a jazyk S.
    Poskytuje širokú škálu štatistických (lineárne a " +"nelineárne modelovanie, klasické štatistické testy, analýza časových radov, " +"triedenie, zhlukovanie, ...) a grafických techník a je vysoko rozšíriteľný. " +"Jazyk S je často vozidlom voľby pre výskum v štatistickej metodike a R " +"poskytuje Open Source cestu k účasti na tejto činnosti." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Chyba pri otváraní súboru %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Súbor skriptu R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Chyba príkazu analýzy" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dvojitým kliknutím otvoriť dialóg pre výber súboru" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Zdrojové súbory R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage je slobodný open-source matematický softvérový systém pod licenciou GPL." +"
    Spája v sebe silu mnohých existujúcich open-source balíčkov do " +"spoločného rozhrania založenom na jazyku Python." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Cesta k spustiteľnému súboru Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Výsledok %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Posledný výstup bol: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Súbor skriptu Python (*.py);;Súbor skriptu Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Proces Sage počas vyhodnocovania tohto výrazu spadol" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Proces Sage spadol" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Proces Sage bol počas vyhodnocovania tohto výrazu ukončený" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Proces Sage bol ukončený" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Zlyhalo spustenie Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Cesta k Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab je slobodný softvér, multiplatformový numerický počítačový balíček " +"a vysokoúrovňový, číselne orientovaný programovací jazyk.

    Scilab je " +"šírený pod licenciou CeCILL (GPL kompatibilná)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Cesta k príkazu scilab-adv-cli (Varovanie: Verzia Scilab musí byť vyššia " +"alebo rovná verzii 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Súbor skriptu Scilab (*.sce);;Súbor funkcie Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Cesta k príkazu scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Stiahnuť vzorové pracovné listy" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Otvoriť príklad" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Pracovný list Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Otvoriť súbor" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Nenájdený žiadny backend

    \n" +"
    Mohli by ste skúsiť:\n" +"
    • Zmena nastavení v konfiguračnom dialógu;
    • " +"
    • InÅ¡talácia balíčkov pre nasledujúci program:
    • %2
    " +msgstr[1] "" +"

    Nenájdený žiadny backend

    \n" +"
    Mohli by ste skúsiť:\n" +"
    • Zmena nastavení v konfiguračnom dialógu;
    • " +"
    • InÅ¡talácia balíčkov pre nasledujúce programy:
    • %2
    " +msgstr[2] "" +"

    Nenájdený žiadny backend

    \n" +"
    Mohli by ste skúsiť:\n" +"
    • Zmena nastavení v konfiguračnom dialógu;
    • " +"
    • InÅ¡talácia balíčkov pre nasledujúce programy:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Chyba" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Sedenie %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Nepodarilo sa nájsť časť Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Je otvorených viac neuložených pracovných listov. Chcete ich zatvoriť?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Zatvoriť Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Aktuálny projekt bol zmenený. Chcete ho uložiť?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Uloženie projektu" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Backend, ktorý je použitý v predvolenom nastavení" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Sádzanie textu v predvolenom nastavení" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Zvýrazňovať syntax v predvolenom nastavení" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Povoliť dokončovania v predvolenom nastavení" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Povoliť vyčíslenie výrazov v predvolenom nastavení" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animovať zmeny v pracovnom liste v predvolenom nastavení" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Automaticky znovu vyhodnotiť položky pod aktuálnou" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Backend %1 nie je nainštalovaný" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Existujú nejaké problémy s backendom %1,\n" +"skontrolujte si vašu konfiguráciu alebo nainštalujte potrebné balíčky.\n" +"Budete môcť zobraziť iba tento pracovný list." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Uložiť jednoduchý text" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportovať do LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Vyhodnotiť pracovný zošit" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Sádzanie textu pomocou LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Zvýrazňovanie syntaxe" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Dokončovanie" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Čísla riadkov" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animovať pracovný zošit" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Reštartovať backend" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Vyhodnotiť položku" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Vložiť položku príkazu" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Vložiť textovú položku" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Vložiť položku príkazu" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Vložiť položku Latex" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Vložiť koniec strany" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Vložiť obrázok" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Odstrániť súčasnú položku" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Zobraziť pomocníka %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Ukázať editor skriptov" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Ukázať dokončovanie" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Uložiť ako" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Uložiť" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Reštartovať backend" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Prerušenie" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Vypočítava sa..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Pripravený" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Chyba sedenia: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Inicializácia kompletná" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Inicializácia sedenia" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Nepomenované" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Chcete nahrať aktuálny pracovný list na verejný webový server?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Otázka - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Pracovný list sa neuložil. Mali by ste ho pred nahratím uložiť." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Varovanie - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Tento backend nepodporuje skripty." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Upraviť" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "P&ohľad" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "Pracovný list" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Súbor" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nový" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Panely" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "Na&stavenia" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Pripravený" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X rozsah" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X rozsah" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X rozsah" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Farba &textu..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Písmo" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Tučné" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Kurzíva" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Prerušené" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Vyhľadávací panel" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Nájsť:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Nasledujúci" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Predchádzajúci" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Nahradiť:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Nahradiť" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Zameniť všetko" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Prehľadať:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Rozlišovať veľkosť" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Konfigurovať obrázok" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Sem kliknúť pravým tlačidlom myši pre vloženie obrázka" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Nemožno načítať obrázok %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Nastavenia obrázku" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Otvoriť" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Zobraziť veľkosť" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Šírka" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Výška" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Náhľad" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Veľkosť tlače" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Použiť veľkosť displeja" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(auto)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "bd" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Otvoriť súbor obrázka" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Ukázať kód LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Cesta k spustiteľnému súboru latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Cesta k spustiteľnému súboru dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Názov" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Hodnota" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Od:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Do:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Hlavný titulok" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Rozsah abscisy" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Rozsah ordináty" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Titulok grafu" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Rozhranie KDE pre matematické aplikácie" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Správca
    Port Qt5/KF5, backendy Scilab a Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Pôvodný autor
    Správca (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra backend" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave backend" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Rozhranie" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Ikona Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Použiť backend " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Dokument na otvorenie." + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Chyba pri otváraní súboru %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Koniec strany ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Spôsob KDE, ako robiť matematiku" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Názov:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Hodnota:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Pridať novú premennú" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Načítať premenné" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Uložiť premenné" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Vyčistiť premenné" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Ste si istý, že chcete odstrániť všetky premenné?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Potvrdenie - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Načítať súbor" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Odstrániť výsledok" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Nepodarilo sa nájsť komponent KDE pre textový editor;\n" +"skontrolujte si svoju inštaláciu KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Editor skriptov" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Editor skriptu - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Nenájdené" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Dosiahnutý začiatok" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Dosiahnutý koniec" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Nahradená %1 inštancia" +msgstr[1] "Nahradené %1 inštancie" +msgstr[2] "Nahradených %1 inštancií" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Príkazy" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Výsledky" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Chyby" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Kód LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Predvolený backend:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Ak je povolené, bude Cantor automaticky vyhodnocovať každú položku pod " +"aktuálnou." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Znovu vyhodnotiť položky automaticky" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Predvolené" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Povoliť sádzanie textu LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Povoliť zvýrazňovanie syntaxe" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Povoliť dokončovanie" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Povoliť čísla riadkov" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Povoliť animácie pracovného listu" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Ukázať vykreslené" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Zobraziť kód" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Nemožno vykresliť súbor Eps. Budete možno potrebovať ďalšie balíčky" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Nemožno zapisovať do súboru %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Nemožno zapisovať do súboru." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "chyba pri ukladaní súboru %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Chyba pri načítaní súboru štýlov latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Položka príkazu" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Textový vstup" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Vložiť položku príkazu" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Položka LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Obrázok" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Koniec strany" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Vložiť textovú položku" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "Vložiť pred" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Vložiť položku LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Farba &textu..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Farba" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Zvýraznenie &textu..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Písmo" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Veľko&sť písma" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Tučné" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kurzíva" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "Podčiark&nuté" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Preš&krtnuté" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Zarovnať &vľavo" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Vľavo" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Zarovnať na &stred" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Na stred" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Zarovnať vpr&avo" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Vpravo" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "Do &bloku" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Do bloku" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Odstrániť položku" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Presunúť položku" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Backend, s ktorým bol vygenerovaný tento súbor nie je nainštalovaný. " +#~ "Potrebuje %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Zverejniť pracovný zošit" + +#~ msgid "Waiting for Image..." +#~ msgstr "Čakanie na obrázok..." + +#~ msgid "Insert" +#~ msgstr "Vložiť" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Nemožno otvoriť súbor %1: Neznámy typ MIME" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex| Dokumenty LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Pracovný list Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server pre Backend Cantor R" + +#~ msgid "R Server" +#~ msgstr "R Server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Použitie: uložiť súbor premenných" + +#~ msgid "Saving failed." +#~ msgstr "Uloženie zlyhalo." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Použitie: načítať súbor premenných" + +#~ msgid "Loading failed." +#~ msgstr "Načítanie zlyhalo." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "(C) 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Cesta k príkazu python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Server Cantor pre R" diff --git a/po/sl/cantor.po b/po/sl/cantor.po new file mode 100644 index 0000000..d18b644 --- /dev/null +++ b/po/sl/cantor.po @@ -0,0 +1,3264 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Jure Repinc , 2010, 2011, 2012, 2013. +# Andrej Mernik , 2013, 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-01-13 17:35+0100\n" +"Last-Translator: Andrej Mernik \n" +"Language-Team: Slovenian \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Jure Repinc,Andrej Mernik" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "jlp@holodeck1.com,andrejm@ubuntu.si" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Premor" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Zaženi" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Zaustavi" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Shrani rezultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Napredno risanje" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Graf" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Izraz:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Dodatne možnosti:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Izriši" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Možnost je omogočena" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Izračunaj" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Odvajaj" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Spremenljivka:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Krat: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Uvozi paket" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integriraj" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Spodnja meja:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Zgornja meja:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "Določen integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Linearna algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Ustvari matriko" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Stolpci:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Vrstice:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Izračunaj lastne vrednosti" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matrika:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Izračunaj lastne vektorje" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Obrni matriko" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Izriši v 2D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Spremenljivka" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Ime" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum: " + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maksimum: " + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Izriši v 3D" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. spremenljivka" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. spremenljivka" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Zaženi skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Reši enačbe" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Enačbe:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Spremenljivke:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Priporočena različica: %4

    %2

    Za več podrobnosti si oglejte %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Izberite zaledje, ki bo uporabljeno:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Nastavi kot privzeto zaledje" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia je visokostopenjski in visokozmogljiv dinamični programski " +"jezik za tehnično računanje, ki ima skladnjo podobno drugim tehničnim " +"programskim jezikom. Ponuja izpopolnjen prevajalnik, porazdeljeno vzporedno " +"izvajanje, numerično natančnost in obširno knjižnico matematičnih funkcij." + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Pot do lupine za Julio" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Vgradi grafe v delovni list" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Skriptna datoteka Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Pot do lupine za Julio:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Vgradi grafe v delovni list (začni novo sejo ob spremembi)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Vmesna oblika znotrajvrstičnih grafov:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Seznam skriptov, ki bodo samodejno zagnani na začetku seje" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Napaka: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Samodejno zagnani skripti" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua je hiter in lahek skriptni jezik s preprosto procedurno skladnjo. Za " +"Lua obstajajo številne knjižnice, ki se osredotočajo na matematiko in " +"znanost.

    To zaledje podpira luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Pot do ukaza luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Skriptna datoteka Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Pot do ukaza luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima je sistem za manipulacijo s simboličnimi in numeričnimi izrazi, kar " +"vključuje odvajanje, integriranje, Taylorjeve vrste, Laplaceove " +"transformacije, navadne diferencialne enačbe, sisteme linearnih enačb, " +"polinome, ter množice, sezname, vektorje, matrike in tenzorje. Maxima s " +"pomočjo točnih ulomkov, celih števil s poljubno natančnostjo ter decimalnih " +"števil s spremenljivo natančnostjo pridela izredno natančne numerične " +"rezultate. Maxima lahko funkcije in podatke izriše v dveh in treh " +"razsežnostih. " + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Pot do izvedljive datoteke Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Omogoči upravljanje spremenljivk" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Napaka: preveč nizov »*/«" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Napaka: preveč nizov »/*«" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Napaka: pred ; je pričakovan \"" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Paketna datoteka Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Zagon Maxime ni uspel" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima se je sesula, ponovni zagon ..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima se je v kratkem času dvakrat sesula. Zaustavljanje za poskus " +"ponovnega zagona." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Napaka - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funkcija" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Pot do Maxime:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Vgradi grafe v delovni list" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Cantor naj spremlja ustvaritev in uničenje spremenljivk" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave je visoko-nivojski jezik, ki je v prvi vrsti namenjen numeričnemu " +"računanju.
    Ponuja priročen ukazni vmesnik za numerično reševanje " +"linearnih in nelinearnih nalog ter izvajanje drugih numeričnih poskusov. " +"Jezik je večinoma združljiv z Matlabom." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Pot do izvedljive datoteke Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Skriptna datoteka Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Skladenjska napaka" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Pot do Octave-a:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Skriptna datoteka Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python je zmogljiv dinamični programski jezik, ki je uporabljen v " +"številnih programskih domenah. Za znanstveno programiranje obstajajo " +"številni paketi za Python.

    To zaledje podpira Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python je zmogljiv dinamični programski jezik, ki je uporabljen v " +"številnih programskih domenah. Za znanstveno programiranje obstajajo " +"številni paketi za Python.

    To zaledje podpira Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor – pogovorno okno risanja" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funkcije" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Naslov" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Izraz" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Dodaj" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Odstrani" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Počisti seznam" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Spremenljivka x" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Slog" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Črte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Točke" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Točke in črte" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Škatle" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Stopnice" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Japonske sveče" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Pike" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Glajenje" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Brez" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monotono" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naravni kubični zlepki" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monotono)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Interval funkcije" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Interval x" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "–" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "&Gostota vzorčenja" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Velikos&t koraka" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Možnosti" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Naslov grafa" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Oznaka osi x" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Oznaka osi y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Položaj legende" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Skrij legendo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Zgoraj-levo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Zgoraj-desno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Spodaj-levo" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Spodaj-desno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Pod" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Izven" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Pokaži mrežo" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Pokaži polno obrobo" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Uporabi barve" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Pokaži znotrajvrstično" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritemsko merilo x" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritemsko merilo y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Možnosti datoteke" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Shrani graf v datoteko" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Vrsta datoteke" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Ugotovi iz imena datoteke" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! ni običajen program, ki bi kopiral najcenejše računalo. Cilj " +"programa Qalculate! je v polni meri izkoristiti boljši uporabniški vmesnik, " +"zmogljivost in prilagodljivost modernih računalnikov. V središču pozornosti " +"je vnos izraza. Namesto vnašanja vsake številke matematičnega izraza posebej " +"lahko neposredno vnesete celoten izraz in ga kasneje spreminjate. Tolmačenje " +"izrazov je prilagodljivo in ni občutljivo na napake. Če kljub temu storite " +"napako, vam bo Qalculate! to sporočil. Izrazi, ki jih ni mogoče rešiti v " +"celoti, niso napake. Qalculate! bo poenostavil kolikor je mogoče in vrnil " +"izraz. Poleg številk in računskih operatorjev lahko izraz vsebuje poljubno " +"kombinacijo spremenljivk, enot in funkcij." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Ali naj se enote samodejno pretvori in kako. Če je vključeno, se enote " +"pretvori v najprimernejše enote SI (najmanjše število enot)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Privzeta kotna enota za trigonometrične funkcije." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Osnova razčlenjenih in ovrednotenih števil." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Ali naj bo rezultat vrednotenja poenostavljen ali faktoriziran." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Ali naj bodo racionalna števila prikazana z decimalkami, kot ulomek ali " +"nekaj vmes." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Namesto zaokroževanja s tripičjem nakaži, da se zaporedje decimalk nadaljuje " +"v neskončnost (npr: 2/3 bo prikazano kot 0,666666... in ne kot 0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Uporabi vse decimalne predpone SI. Če ni vključeno, predpone, ki niso " +"mnogokratniki 1000 (centi, deci, deka, hekto), ne bodo uporabljene samodejno." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Če je vključeno, bodo namesto deljenja uporabljeni negativni eksponenti " +"(npr. 5/x^2 postane 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Številski prikaz." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Če je vključeno, bodo grafi prikazani vstavljeni v delovne liste. V " +"nasprotnem bodo prikazani v ločenem oknu." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Ali naj bodo v grafih uporabljene barve." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Ali naj bo na grafu izrisana mreža." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Ali naj bo okoli grafa izrisana polna obroba." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Širina črt v slikovnih točkah." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Število korakov interpolacije pri risanju grafa." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Način glajenja grafa." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Slog grafa." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Položaj legende na grafu." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate! sporoča, da tiskanje ni mogoče. Ali je program gnuplot nameščen?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "manjka %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 mora biti število." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 mora biti celo število." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 mora biti logična vrednost." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "neveljavna možnost za %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "v enem ukazu za izris grafa je bilo najdenih več izrazov (%1 in %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "NAPAKA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "OPOZORILO" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Funkcija, spremenljivka ali enota z danim imenom ne obstaja." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funkcija: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Vmesnik za izris grafa" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Znotrajvrstično ali v ločenem oknu izriše graf ene ali več funkcij." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "izraz" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "možnost" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "vrednost" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "celo število" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "logična vrednost" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "število" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "privzeto: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Ime funkcije" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Naslovna oznaka" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Oznaka osi x" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Oznaka osi y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Slika, v katero bo shranjen graf. Če je prazno, bo graf prikazan v oknu na " +"zaslonu. Če je možnost »inline« nastavljena na »true«, bo slika prikazana na " +"zaslonu ne glede na to možnost." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Vrsta slike, v katero bo shranjen graf. Izbirate lahko med auto, png, ps, " +"eps, latex, svg in fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Nastavite na »true« za graf v barvah in na »false« za enobarven graf." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Najmanjša vrednost na osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Največja vrednost na osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Ali naj bo za os x uporabljeno logaritemsko merilo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Ali naj bo za os y uporabljeno logaritemsko merilo." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritemska osnova za os x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritemska osnova za os y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Ali naj bo na grafu prikazana mreža." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Ali naj bo graf obrobljen z vseh strani (in ne samo pri oseh)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Širina črt." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Kam naj bo postavljena legenda grafa. Izbirate lahko med none, top_left, " +"top_right, bottom_left, bottom_right, below, outside" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Glajenje grafa. Izbirate lahko med none, unique, csplines, bezier, sbezier." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Slog grafa. Izbirate lahko med lines, points, points_lines, boxes, " +"histogram, steps, candlesticks, dots" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Uporabi merilo na drugi osi x." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Uporabi merilo na drugi osi y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Ali naj bo graf izrisan znotrajvrstično in ne v novem oknu." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" +"Razdalja med točkama interpolacije. Oglejte si tudi nastavitev korakov." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Število interpolacijskih točk. Oglejte si tudi nastavitev korakov." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Ime spremenljivke x. To mora biti neznana spremenljivka." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Shrani spremenljivke v datoteko" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Shrani vse trenutno določene spremenljivke v datoteko. Znova jih lahko " +"naložite z %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "datoteka" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "datoteka: datoteka, v katero se bo shranilo" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Naloži spremenljivke iz datoteke" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Naloži spremenljivke iz datoteke, ki je bila prej ustvarjena z %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "datoteka: datoteka, ki bo naložena" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Splošno" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Številska osnova:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Oblika ulomkov:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Desetiško" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Točno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Ulomek" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Združeno" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Številski prikaz:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Čisto" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Znanstveno" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Natančnost" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Nakaži neskončna zaporedja:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Omogočeno" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Uporabi vse predpone SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Uporabi negativne eksponente:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Ovrednoti" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Pretvori v najprimernejše enote SI:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Enota kota:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radian" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Stopinja" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradian" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Način strukturiranja:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Poenostavi" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktoriziraj" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Risanje grafa" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Graf pokaži znotrajvrstično:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Grafi v barvah:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Pokaži mrežo:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Pokaži polne obrobe:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Širina črt:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Gostota vzorčenja:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Način glajenja:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naravni kubični zlepki" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Slog grafa:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Stopnice" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Položaj legende:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R je jezik in okolje za statistično računanje in grafiko in je podoben " +"jeziku in okolju S.
    Ponuja široko paleto statističnih (linearno in ne-" +"linearno modeliranje, klasični statistični preizkusi, klasifikacija, " +"preučitev časovnih vrst, kopičenje ...) in grafičnih metod ter je zelo " +"razširljiv. Jezik S je pogosta izbira za raziskovanje statistične " +"metodologije, R pa ponuja prosto in odprtokodno pot do sodelovanja pri teh " +"dejavnostih." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Napaka med odpiranjem datoteke %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "Skriptna datoteka R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Napaka med razčlenjevanjem ukaza" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dvokliknite za odprtje pogovornega okna za izbor datotek" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|Izvorna koda R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage je prosta in odprtokodna matematična programska oprema, ki je pod " +"licenco GPL
    Za skupnim Python-ovim vmesnikom združuje moč več obstoječih " +"odprtokodnih programskih paketov." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Pot do izvedljive datoteke Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Rezultat %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Zadnji izhod je bil: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Skriptna datoteka Python (*.py);;Skriptna datoteka Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Opravilo Sage se je med vrednotenjem tega izraza sesulo" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Opravilo Sage se je sesulo" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Opravilo Sage se je končalo med vrednotenjem tega izraza" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Opravilo Sage se je končalo" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Ni bilo mogoče zagnati Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Pot do Sage-ja:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab je prosta programska oprema. Je paket za numerično računanje in " +"visoko-nivojski numerično orientiran programski jezik, ki deluje v več " +"okoljih.

    Scilab se razširja pod pogoji licence CeCILL (združljiva z GNU " +"GPL)." + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Pot do ukaza scilab-adv-cli (opozorilo: različica paketa Scilab mora biti " +"5.4 ali višja)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +";;Skriptna datoteka Scilab (*.sce);;Datoteka s funkcijami za Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Pot do ukaza scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Prejmi primere delovnih listov" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Odpri primer" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantorjev delovni list (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Odpri datoteko" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Najdenega ni bilo nobenega zaledja

    \n" +"
    Poskusite lahko:\n" +"
    • Spremeniti nastavitve
    • Namestiti pakete za enega izmed " +"naslednjih programov:
    • %2
    " +msgstr[1] "" +"

    Najdenega ni bilo nobenega zaledja

    \n" +"
    Poskusite lahko:\n" +"
    • Spremeniti nastavitve
    • Namestiti pakete za naslednji program:" +"
    • %2
    " +msgstr[2] "" +"

    Najdenega ni bilo nobenega zaledja

    \n" +"
    Poskusite lahko:\n" +"
    • Spremeniti nastavitve
    • Namestiti pakete za enega izmed " +"naslednjih programov:
    • %2
    " +msgstr[3] "" +"

    Najdenega ni bilo nobenega zaledja

    \n" +"
    Poskusite lahko:\n" +"
    • Spremeniti nastavitve
    • Namestiti pakete za enega izmed " +"naslednjih programov:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Napaka" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Seja %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Ni bilo mogoče najti sestavnega dela Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Več odprtih delovnih listov še ni shranjenih. Ali jih želite zapreti?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Zapri Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Trenutni projekt je bil spremenjen. Ali ga želite shraniti?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Shrani projekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Zaledje, ki je uporabljeno privzeto" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Privzeto omogoči stavljenje" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Privzeto omogoči poudarjanje skladnje" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Privzeto omogoči dopolnjevanje" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Privzeto omogoči številčenje izrazov" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Privzeto animiraj spremembe na delovnem listu" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Samodejno znova ovrednoti vnose, ki so pod trenutnim" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Zaledje %1 ni nameščeno." + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Z zaledjem %1 je nekaj težav.\n" +"Preverite vaše nastavitve ali pa namestite zahtevane pakete.\n" +"Delovni list si boste lahko le ogledali." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Shrani navadno besedilo" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Izvozi v LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Ovrednoti delovni list" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Stavljenje s pomočjo LaTeXa" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Poudarjanje skladnje" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Dopolnjevanje" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Številke vrstic" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animiraj delovni list" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Znova zaženi zaledje" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Ovrednoti vnos" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Vstavi ukazni vnos" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Vstavi besedilni vnos" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Vstavi ukazni vnos" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Vstavi vnos LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Vstavi prelom strani" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Vstavi sliko" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Odstrani trenutni vnos" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Pokaži pomoč za %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Pokaži urejevalnik skriptov" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Prikaži dopolnjevanje" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Shrani kot" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Shrani" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Znova zaženi zaledje" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Prekini" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Preračunavanje ..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Pripravljen" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Napaka seje: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Začenjanje je zaključeno" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Začenjanje ..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Neimenovano" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Ali želite trenutni delovni list poslati na javni spletni strežnik?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Vprašanje - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Delovni list ni shranjen. Pred pošiljanjem bi ga morali shraniti." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Opozorilo - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "To zaledje ne podpira skriptov." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Uredi" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Pogled" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Delovni list" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Datoteka" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Nova" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Pulti" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "&Nastavitve" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Pripravljen" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "Interval x" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "Interval x" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "Interval x" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "&Barva besedila ..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Pisava" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Krepko" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Ležeče" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Prekinjeno" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Iskalna vrstica" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Najdi:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Naslednje" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Predhodno" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Zamenjaj:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Zamenjaj" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Zamenjaj &vse" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Poišči v:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "Ujemanje &velikosti črk" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Nastavi sliko" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Kliknite tukaj z desno, da vstavite sliko" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Ni mogoče naložiti slike %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Nastavitve slik" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Odpri" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Velikost za prikaz" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Širina" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Višina" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Predogled" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Velikost za tisk" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Uporabi velikost za prikaz" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(samodejno)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr " %" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Odpri slikovno datoteko" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Pokaži kodo LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Pot do izvedljive datoteke latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Pot do izvedljive datoteke dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Ime" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Vrednost" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Od:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Do:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Glavni naslov" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Merilo abscise" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Merilo ordinate" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Naslov grafa:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "KDE-jevo začelje za matematične programe" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Vzdrževalec
    Predelava za Qt5/KF5, zaledji za Scilab in Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Prvotni avtor
    Vzdrževalec (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Zaledje za KAlgebro" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Zaledje za Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Vmesnik" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Ikona za Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Uporabi zaledje " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Dokumenti za odprtje." + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "Napaka med odpiranjem datoteke %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Prelom strani ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE-jev način za delo z matematiko" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Ime:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Vrednost:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Dodaj novo spremenljivko" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Naloži spremenljivke" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Shrani spremenljivke" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Počisti spremenljivke" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Ali res želite odstraniti vse spremenljivke?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Potrditev – Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Naloži datoteko" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Odstrani rezultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Sestavnega dela KDE za urejanje besedila ni bilo mogoče najti.\n" +"Preverite vašo namestitev KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Urejevalnik skriptov" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "%1 – Urejevalnik skriptov" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Ni najdeno" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Dosežen začetek" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Dosežen konec" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Zamenjanih %1 primerkov" +msgstr[1] "Zamenjan %1 primerek" +msgstr[2] "Zamenjana %1 primerka" +msgstr[3] "Zamenjani %1 primerki" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Ukazi" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Rezultati" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Napake" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Besedilo" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Koda LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Privzeto zaledje:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Ko je omogočeno, bo Cantor samodejno ovrednotil vse vnose, ki so pod " +"trenutnim." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Samodejno znova ovrednoti vnose" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Privzete vrednosti" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Omogoči stavljenje LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Omogoči poudarjanje skladnje" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Omogoči dopolnjevanje" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Omogoči številke vrstic" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Omogoči animacije delovnega lista" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Pokaži izrisano" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Pokaži kodo" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Ni mogoče izrisati datoteke EPS. Morda potrebujete dodatne pakete." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Datoteke %1 ni mogoče zapisati." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Ni mogoče zapisati datoteke." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Napaka med shranjevanjem datoteke %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Napaka med nalaganjem slogovne predloge latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Ukazni vnos" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Besedilni vnos" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Vstavi ukazni vnos" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Vnos LaTeX-a" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Slika" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Prelom strani" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Vstavi besedilni vnos" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "Vstavi pred" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Vstavi vnos LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Barva besedila ..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Barva" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "P&oudarjanje besedila ..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Pisava" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Velikost pisave" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Krepko" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Ležeče" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "Po&dčrtano" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Prečr&tano" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Poravnaj l&evo" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Levo" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Na &sredino" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Na sredino" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Poravnaj de&sno" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Desno" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "Poravnaj obo&jestransko" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Obojestransko" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Odstrani vnos" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Povlecite vnos" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Zaledje, s katerim je bila ustvarjena ta datoteka, ni nameščeno. " +#~ "Zahtevano je zaledje %1." + +#~ msgid "Publish Worksheet" +#~ msgstr "Objavi delovni list" + +#~ msgid "Waiting for Image..." +#~ msgstr "Čakanje na sliko ..." + +#~ msgid "Insert" +#~ msgstr "Vstavi" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Ni mogoče odpreti datoteke %1: neznana vrsta MIME" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Dokument LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantorjev delovni list" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Strežnik za Cantor-jevo zaledje za R" + +#~ msgid "R Server" +#~ msgstr "Strežnik R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Uporaba: saveVariables datoteka" + +#~ msgid "Saving failed." +#~ msgstr "Shranjevanje ni uspelo." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Uporaba: loadVariables datoteka" + +#~ msgid "Loading failed." +#~ msgstr "Nalaganje ni uspelo." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009–2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Pot do ukaza python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantor-jev Strežnik za R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Ali želite izvoziti tudi slike?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Pot do ukaza python2:" diff --git a/po/sv/cantor.po b/po/sv/cantor.po new file mode 100644 index 0000000..94dcde2 --- /dev/null +++ b/po/sv/cantor.po @@ -0,0 +1,3334 @@ +# translation of mathematik.po to Swedish +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Stefan Asserhäll , 2009, 2010. +# Stefan Asserhall , 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-08 20:07+0100\n" +"Last-Translator: Stefan Asserhäll \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Stefan Asserhäll" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "stefan.asserhall@bredband.net" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Paus" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Starta" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Stoppa" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Spara resultat" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Avancerat diagram" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Rita" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Uttryck:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Ytterligare alternativ:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Rita" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Alternativ aktivt" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Beräkna" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Differentiera" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Variabel:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Gånger: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Importera paket" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Integrera" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Under gräns:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Övre gräns:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "bestämd integral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Linjär algebra" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Skapa matris" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Kolumner:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Rader:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Beräkna egenvärden" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matris:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Beräkna egenvektorer" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Invertera matris" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Rita i två dimensioner" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Namn" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Minimum:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Maximum:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Rita i tre dimensioner" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Första variabel" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Andra variabel" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Kör skript" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Lös ekvationer" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Ekvationer:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Variabler:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Rekommenderad version: %4

    %2

    Se %3 för mer information
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Välj bakgrundsprogram att använda:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Gör detta bakgrundsprogram till standard" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia är ett högnivå och högprestanda dynamiskt programspråk för " +"teknisk databehandling, med en syntax som är bekant för användare av andra " +"tekniska databehandlingsmiljöer. Det tillhandahåller en sofistikerad " +"kompilator, distribuerad parallell exekvering, numerisk noggrannhet och ett " +"omfattande matematiskt funktionsbibliotek.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Sökväg till Julia inbyggd REPL" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Integrera diagram på arbetsblad" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia-skriptfil (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Sökväg till Julia REPL:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Integrera diagram på arbetsblad (starta ny session vid ändring)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Intermediärt format för diagram på plats:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Lista med skript att köra automatiskt när sessionen startas" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Fel: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Skript att köra automatiskt" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua är ett snabbt och lättviktigt skriptspråk, men en enkel " +"procedurbaserad syntax. Det finns flera bibliotek i Lua avsedda för " +"matematik och vetenskap.

    Det här bakgrundsprogrammet stöder luajit 2." + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Sökväg till luajit-kommando" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua-skriptfil (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Sökväg till kommandot luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima är ett system för hantering av symboliska och numeriska uttryck, " +"inklusive derivering, integrering, Taylor-serier, Laplace-transformer, " +"vanliga differentialekvationer, system av linjära ekvationer, polynom, samt " +"mängder, listor, vektorer, matriser och tensorer. Maxima ger numeriska " +"resultat med hög precision genom att använda exakta bråk, heltal med " +"godtycklig precision och flyttal med variabel precision. Maxima kan rita upp " +"funktioner och data i två och tre dimensioner." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Sökväg till körbar fil för Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Aktivera variabelhantering" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Fel: För många */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Fel: För många /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Fel: Förväntade \" innan ;" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Väntar på diagramresultatet" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima-bakgrundsfil (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Misslyckades starta Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima kraschade. Startar om..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima kraschade två gånger på kort tid. Avbryter startförsök." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Fel - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "funktion" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Sökväg till Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Integrera diagram på arbetsblad" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Låt Cantor bevaka när variabler skapas och försvinner" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave är ett högnivåspråk, i huvudsak avsett för numeriska beräkningar." +"
    Det tillhandahåller ett bekvämt kommandoradsgränssnitt för att lösa " +"linjära och icke-linjära problem numeriskt, och för att uföra andra " +"numeriska experiment med användning av ett språk som i huvudsak är " +"kompatibelt med Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Sökväg till körbar fil för Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave-skriptfil (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Syntaxfel" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Sökväg till Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python-skriptfil (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python är ett häpnadsväckande kraftfullt dynamiskt programspråk som " +"utnyttjas för ett stort antal användningsområden. Det finns flera Python-" +"paket för vetenskaplig programmering.

    Det här bakgrundsprogrammet " +"stöder Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python är ett häpnadsväckande kraftfullt dynamiskt programspråk som " +"utnyttjas för ett stort antal användningsområden. Det finns flera Python-" +"paket för vetenskaplig programmering.

    Det här bakgrundsprogrammet " +"stöder Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Diagramdialogruta" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Funktioner" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Rubrik" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Uttryck" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Lägg till" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Ta bort" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Rensa lista" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X-variabel" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Stil" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Punkter" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Punkter och linjer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Rutor" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Histogram" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Steg" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Ljus" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Cirklar" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Utjämning" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Ingen" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Monoton" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Naturlig kubisk spline" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (monoton)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Funktionsintervall" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X-intervall" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Sa&mplingsfrekvens" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Ste&gstorlek" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Alternativ" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Diagramrubrik" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-axelns beteckning" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-axelns beteckning" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Förklaringens position" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Dölj förklaring" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Uppe till vänster" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Uppe till höger" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Nere till vänster" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Nere till höger" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Nedanför" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Utanför" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Visa rutnät" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Visa fullständig kant" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Använd färger" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Visa på plats" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmisk x-skala" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmisk y-skala" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Filalternativ" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Spara diagram i fil" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Filtyp" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Detektera från filnamn" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "Latex" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! är inte en vanlig programvarukopia av den billigaste tillgängliga " +"räknaren. Syftet med Qalculate! är att dra full nytta av det överlägsna " +"gränssnittet, kraftfullheten och flexibiliteten hos moderna datorer. Fokus " +"för uppmärksamheten i Qalculate! är inmatningen av uttryck, där man direkt " +"kan skriva in hela det matematiska uttrycket och senare modifiera det, " +"istället för att skriva in varje tal i ett uttryck separat. Tolkningen av " +"uttryck är flexibel och feltolerant, och om du trots det gör något fel, " +"talar Qalculate! om det. Uttryck som inte kan lösas helt är dock inga fel. " +"Qalculate! förenklar så långt det går, och svarar med ett uttryck. Förutom " +"tal och aritmetiska operatorer, kan ett uttryck innehålla vilken kombination " +"av variabler, enheter och funktioner som helst." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Om och hur enheter kommer att konverteras automatiskt. Om sant, konvertera " +"till de SI-enheter som passar bäst (minst antal enheter)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Förvald vinkelenhet för trigonometriska funktioner." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Bas för tolkade och utvärderade tal." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Om utvärderingsresultatet ska förenklas eller faktoriseras." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Om rationella tal kommer att visas med decimaler, som bråk, eller någonting " +"däremellan." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Visa att talföljden för ett tal fortsätter i det oändliga med tre punkter, " +"istället för avrundning (t.ex. 2/3 visas som 0,666666... istället för " +"0,666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Använd alla decimala SI-prefix. Om falskt, kommer prefix som inte är en " +"multipel av tusen (centi, deci, deka, hekto) inte användas automatiskt." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Om sant, kommer negativa exponenter användas istället för division (t.ex. " +"blir 5/x^2 till 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Numerisk display." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Om sant, kommer diagram visas inne i arbetsbladet. Om inte visas de i ett " +"separat fönster." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Om färger ska användas i diagram." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Om ett rutnät ska ritas upp." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Om hela kanter ska ritas omkring diagrammet." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Linjebredden i bildpunkter." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Antal interpolationssteg att använda vid uppritning." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Utjämningsmetod i diagram." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Diagramstilen." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Förklaringens position i diagram." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate rapporterar att utskrift inte är möjlig. Är gnuplot installerat?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "saknar %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 måste vara ett tal." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 måste vara ett heltal." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 måste vara Boolesk." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "ogiltigt alternativ för %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "hittade flera uttryck i ett diagramkommando (%1 och %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "Fel" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "Varning" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Det finns ingen funktion, variabel eller enhet med angivet namn." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Funktion: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Diagramgränssnitt" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Ritar diagram av ett eller flera funktioner antingen på plats eller i ett " +"separat fönster." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "uttryck" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "alternativ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "värde" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "heltal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "boolean" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "tal" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "förval: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Funktionens namn" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Rubrikbeteckning" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-axelns beteckning" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-axelns beteckning" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Bild att spara diagrammet i. Om tomt visas diagrammet i ett fönster på " +"skärmen. Om på plats är sant visas bilden oberoende av det här alternativet." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "Bildtypen att spara med. En av auto, png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Ställ in till sant för färglagda diagram, falskt för svartvita." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Minimalt x-axelvärde." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Maximalt x-axelvärde." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Om en logaritmisk skala ska användas för x-axeln." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Om en logaritmisk skala ska användas för y-axeln." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Logaritmisk bas för x-axeln." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Logaritmisk bas för y-axeln." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Om ett rutnät ska visas i diagrammet." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "Om diagrammet ska omges av kanter på alla sidor (inte bara axlar)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Linjebredden." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Var diagramförklaringen ska placeras. Ett av ingen, uppe till vänster, uppe " +"till höger, nere till vänster, nere till höger, nedanför, utanför." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Diagramutjämning. Ett av ingen, unik, csplines, bezier, sbezier." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Diagramstil. En av linjer, punkter, punkt och linjer, rutor, histogram, " +"steg, ljus, cirklar" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Använd skala på andra x-axeln." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Använd skala på andra y-axeln." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Om diagrammet ska ritas på plats, istället för i ett nytt fönster." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Avstånd mellan två interpolationspunkter. Se också steg." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Antal interpolationspunkter. Se också steg." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Namnet på x-variabeln. Den måste vara en okänd variabel." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Spara variabler i en fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Spara alla variabler som för närvarande är definierade i en fil. De kan " +"läsas in igen med %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "fil: filen att spara i" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Läs in variabler från en fil" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "Läs in variabler från en fil som tidigare har skapats av %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "fil: filen att läsa in" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Allmänt" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Talbas:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Bråkdelsformat:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Decimal" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Exakt" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Bråkdel" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Kombinerat" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Numerisk visning:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Enkel" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Vetenskaplig" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Precision" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Ange oändliga serier:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Aktiverad" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Använd alla SI-prefix:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Använd negativa exponenter:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Beräkna" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Konvertera till bästa SI-enheter:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Vinkelenhet:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radianer" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Grader" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradianer" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Struktureringsläge:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Förenkla" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Faktorisera" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Uppritning" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Visar diagram på plats:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Färglagda diagram:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Visa rutnät:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Visa hela kanter:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Linjebredden:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Samplingsfrekvens:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Utjämningsmetod:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Naturlig kubisk spline" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Diagramstil:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Steg" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Förklaringens position:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R är ett språk och en miljö för statistiska beräkningar och diagram, som " +"liknar språket och miljön S.
    Det tillhandahåller en stor mängd " +"statistiska och grafiska tekniker (linjär och icke-linjär modellering, " +"klassiska statistiska prov, analys av tidserier, klassificering, ...), och " +"är mycket utökningsbart. Språket S är ofta förstahandsvalet för forskning i " +"statistiska metoder, och R tillhandahåller en väg att delta i dessa " +"aktiviteter med öppen källkod." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Fel när filen %1 skulle öppnas" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R-skriptfil (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Fel vid tolkning av kommando" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dubbelklicka för att öppna en filvalsdialogruta" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R-källkodsfiler (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage är ett fritt matematikpaket med öppen källkod licensierat med GPL. Det " +"kombinerar kraftfullheten hos många befintliga paket med öppen källkod i ett " +"gemensamt Python-baserat gränssnitt." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sökväg till körbar fil för Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Resultat för %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Den senaste utmatningen är: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python-skriptfil (*.py);;Sage-skriptfil (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Sage version %1.%2 stöds inte. Uppdatera installationen till versioner som " +"stöds för att det ska fungera med Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Processen Sage kraschade medan det här uttrycket utvärderades" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Processen Sage kraschade" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Processen Sage avslutades medan det här uttrycket utvärderades" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Processen Sage avslutades" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Misslyckades starta Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sökväg till Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab är ett numeriskt beräkningspaket med fri programvara för flera " +"plattformar, och ett högnivåspråk med numerisk inriktning.

    Scilab " +"distribueras med licensen CeCILL (kompatibel med GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Sökväg till kommandot scilab-adv-cli (Varning: Versionen av Scilab måste " +"vara senare än eller lika med version 5.4)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab-skriptfil (*.sce);;Scilab-funktionsfil (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Sökväg till kommandot scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Ladda ner exempelarbetsblad" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Ö&ppna exempel" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Gå till föregående arbetsblad" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Gå till nästa arbetsblad" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor-arbetsblad (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Öppna fil" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Inget bakgrundsprogram hittades.

    \n" +"
    Du kan prova att:\n" +"
    • Ändra inställningar i inställningsdialogrutan
    • " +"
    • Installera paket för nÃ¥gon av följande programvaror:
    • %2
    " +"
    " +msgstr[1] "" +"

    Inget bakgrundsprogram hittades.

    \n" +"
    Du kan prova att:\n" +"
    • Ändra inställningar i inställningsdialogrutan
    • " +"
    • Installera paket för nÃ¥gon av följande programvaror:
    • %2
    " +"
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Fel" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Session %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Kunde inte hitta Cantor-delprogrammet." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "Flera osparade arbetsblad är öppna. Vill du stänga dem?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Stäng Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Aktuellt projekt har ändrats. Vill du spara det?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Spara projekt" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Bakgrundsprogrammet som normalt används" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Utför normalt typsättning" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Utför normalt syntaxfärgläggning" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Aktivera normalt komplettering" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Aktivera normalt numrering av uttryck" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Animera normalt ändringar av arbetsbladet" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Utvärdera automatiskt posterna under den nuvarande igen" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Fråga efter bekräftelse när bakgrundsprogrammet startas om" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Bakgrundsprogrammet %1 är inte installerat" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"Det finns vissa problem med bakgrundsprogrammet %1.\n" +"Kontrollera din inställning, eller installera nödvändiga paket.\n" +"Du kommer bara att kunna granska det här arbetsbladet." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Spara vanlig text" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Exportera till Latex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Beräkna arbetsblad" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Typsätt med Latex" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Syntaxfärgläggning" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Komplettering" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Radnummer" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Animera arbetsblad" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Starta om bakgrundsprogram" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Beräkna post" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Infoga kommandopost" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Infoga textpost" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Infoga Markdown-post" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Infoga Latex-post" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Infoga sidbrytning" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Infoga bild" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Ta bort nuvarande post" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Visa hjälp om %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Visa skripteditor" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Visa komplettering" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantor-delprogram" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Spara som" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Spara" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Alla tillgängliga beräkningsresultat kommer att gå förlorade. Vill du " +"verkligen starta om %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Starta om %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Avbrott" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Beräknar..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Klar" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Sessionsfel: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Initiering färdig" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Initierar..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Namnlös" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[skrivskyddad]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Vill du ladda upp nuvarande arbetsblad till en öppen webbserver?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Fråga - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Arbetsbladet har inte sparats. Du bör spara det innan uppladdning." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Varning - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Bakgrundsprogrammet stöder inte skript." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Redigera" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Visa" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "Ar&betsblad" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Arkiv" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Ny" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneler" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "In&ställningar" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "Vit" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "Svart" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "Mörkröd" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "Röd" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "Ljusröd" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "Mörkgrön" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "Grön" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "Ljusgrön" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "Mörkblå" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "Blå" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "Ljusblå" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "Mörkgul" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "Gul" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "Ljusgul" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "Mörkturkos" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "Turkos" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "Ljusturkos" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "Mörk magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "Magenta" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "Ljus magenta" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "Mörkorange" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "Orange" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "Ljusorange" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "Mörkgrå" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "Grå" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "Ljusgrå" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Bakgrundsfärg" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Textfärg" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Teckensnitt" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Fetstil" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Kursiv" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Öka storlek" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Minska storlek" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Välj" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Avbruten" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Sökrad" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Sök:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Nästa" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Föregående" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Ersätt:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "E&rsätt" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Ersätt &alla" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Sök i:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Matcha skiftläge" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Anpassa bild" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Högerklicka här för att infoga bild" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Kan inte läsa in bild %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Bildinställningar" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Öppna" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Visningsstorlek" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Bredd" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Höjd" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Förhandsgranskning" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Utskriftsstorlek" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Använd skärmstorlek" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(automatisk)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "bildpunkter" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr " %" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Öppna bildfil" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Visa Latex-kod" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Sökväg till körbar fil för latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Sökväg till körbar fil för dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Namn" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Värde" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Från:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Till:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Huvudrubrik" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "X-axelns skala" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Y-axelns skala" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Diagramrubrik:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Gränssnitt till matematiska program för KDE" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© 2016 Filipe Saraiva
    © 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" +"Underhåll
    Konvertering till Qt5/KF5, bakgrundsprogram för Scilab och " +"Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Ursprunglig upphovsman
    Underhåll (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Bakgrundsprogram för Kalgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Bakgrundsprogram för Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Gränssnitt" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor-ikon" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Använd bakgrundsprogram " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Dokument att öppna." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Kunde inte öppna filen %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Sidbrytning ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE:s sätt att utföra matematik" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Namn:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Värde:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Lägg till ny variabel" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Läs in variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Lagra variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Rensa variabler" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Är du säker på att du vill ta bort alla variabler?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Bekräftelse - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Läs in fil" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Ta bort resultat" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"En KDE texteditorkomponent kunde inte hittas,\n" +"kontrollera installationen av KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Skripteditor" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Skripteditor - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Hittades inte" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Början uppnådd" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Slutet uppnått" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Ersatte %1 förekomst" +msgstr[1] "Ersatte %1 förekomster" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Kommandon" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Resultat" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Fel" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Text" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Latex-kod" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Standardbakgrundsprogram:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Om aktiverat, utvärderar Cantor automatiskt alla poster under den nuvarande." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Utvärdera poster automatiskt igen" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Standardvärden" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Aktivera typsättning med Latex" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Aktivera syntaxfärgläggning" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Aktivera komplettering" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Aktivera radnummer" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Aktivera animeringar av arbetsblad" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Visa återgivning" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Visa kod" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Kan inte återge eps-fil. Ytterligare paket kan behövas." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Kan inte skriva till filen %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Kan inte skriva filen." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Fel när filen %1 skulle sparas" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"I skrivskyddat läge kan inte Cantor garantera att export är giltig för %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Fel vid inläsning av stilmallen latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Den valda filen är inte en giltig Cantor projektfil." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"Bakgrundsprogrammet %1 hittades inte. Redigering och utvärdering av poster " +"är inte möjlig." + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Kommandopost" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Textpost" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Markdown-post" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Latex-post" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Bild" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sidbrytning" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Infoga post efter" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Infoga post före" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Infoga Latex-post" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Text&färg..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Färg" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Textfärg&läggning..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Teckensnitt" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Tecken&storlek" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Fetstil" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Kursiv" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Understryket" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "Över&struket" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Justera &vänster" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Vänster" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Centrera" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Centrera" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Justera &höger" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Höger" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&Justera" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "Justera" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Ta bort post" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Dra post" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Bakgrundsprogrammet som den här filen skapades med är inte installerat. " +#~ "Den behöver %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Publicera arbetsblad" + +#~ msgid "Waiting for Image..." +#~ msgstr "Väntar på bild..." + +#~ msgid "Insert" +#~ msgstr "Infoga" + +#~ msgid "Insert Before" +#~ msgstr "Infoga före" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Kan inte öppna filen %1: Okänd Mime-typ" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|Latex-dokument" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor-arbetsblad" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Server för bakgrundsprogrammet Cantor R" + +#~ msgid "R Server" +#~ msgstr "R-server" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Användning: saveVariables fil" + +#~ msgid "Saving failed." +#~ msgstr "Misslyckades spara." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Användning: loadVariables fil" + +#~ msgid "Loading failed." +#~ msgstr "Inläsning misslyckades." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© 2009-2013 Alexander Rieder" + +#~ msgid "Path to python command" +#~ msgstr "Sökväg till Python-kommando" + +#~ msgid "Cantor Server for R" +#~ msgstr "Cantorserver för R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Vill du också exportera bilderna?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Sökväg till kommandot python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Aktivera variabelhantering" + +#~ msgid "Could not start the server." +#~ msgstr "Kunde inte starta servern." + +#~ msgid "Pause Animation" +#~ msgstr "Gör paus i animering" + +#~ msgid "Start Animation" +#~ msgstr "Starta animering" + +#~ msgid "Restart Animation" +#~ msgstr "Starta om animering" + +#~ msgid "Append Command Entry" +#~ msgstr "Lägg till kommandopost" + +#~ msgid "Append Text Entry" +#~ msgstr "Lägg till textpost" + +#~ msgid "Append Latex Entry" +#~ msgstr "Lägg till Latex-post" + +#~ msgid "Append Image" +#~ msgstr "Lägg till bild sist" + +#~ msgid "Append Page Break" +#~ msgstr "Lägg till sidbrytning sist" + +#~ msgid "Other" +#~ msgstr "Annan" + +#~ msgid "And %1 more..." +#~ msgstr "Och ytterligare %1..." + +#~ msgid "Main Toolbar" +#~ msgstr "Huvudverktygsrad" + +#~ msgid "Completion Style:" +#~ msgstr "Kompletteringsstil" + +#~ msgid "Popup" +#~ msgstr "Ruta" + +#~ msgid "The style used for Completion" +#~ msgstr "Stilen använd för komplettering" + +#~ msgid "Path to the Scilab executable" +#~ msgstr "Sökväg till körbar fil för Scilab" + +#~ msgid "" +#~ "Scilab version of the master branch of the Scilab's repository is " +#~ "compatible" +#~ msgstr "Versionen av Scilab i huvudgrenen av Scilabs arkiv är kompatibel" + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Infoga kommandopost före" + +#~ msgid "Command Entry Before" +#~ msgstr "Kommandopost före" + +#~ msgid "GroupBox" +#~ msgstr "Gruppruta" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "Testen kräver ett fungerade bakgrundsprogram %1" + +#~ msgid "Form" +#~ msgstr "Formulär" + +#~ msgid "Help" +#~ msgstr "Hjälp" + +#~ msgid "Show Help Panel" +#~ msgstr "Visa hjälpruta" + +#~ msgid "Uploading successful" +#~ msgstr "Uppladdning lyckades" + +#~ msgid "Error uploading File %1" +#~ msgstr "Fel när filen %1 skulle laddas upp" + +#~ msgid "MathematiKPart" +#~ msgstr "Matematik-delprogram" + +#~ msgid "MathematiK" +#~ msgstr "Matematik" diff --git a/po/sv/docs/cantor/index.docbook b/po/sv/docs/cantor/index.docbook new file mode 100644 index 0000000..54cc713 --- /dev/null +++ b/po/sv/docs/cantor/index.docbook @@ -0,0 +1,1410 @@ + +ATEX"> + + +]> + + + +Handbok &cantor; + + + Alexander Rieder alexanderrieder@gmail.com + Stefan Asserhäll
    stefan.asserhall@bredband.net
    Översättare
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +2016-08-25 +Program 16.12 + + +&cantor; är ett program med målet att tillhandahålla en vy med ett trevligt kalkylblad för andra matematikpaket med fri programvara. + + + +KDE +kdeedu +matematik +matte +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + +
    + + +Inledning + +&cantor; är ett program som lÃ¥ter dig använda ditt matematiska favoritprogram inne i ett elegant arbetsbladgränssnitt integrerat med &kde;. Det tillhandahÃ¥ller guidedialogrutor för vanliga uppgifter och lÃ¥ter dig dela arbetsblad med andra. + + + +Använda &cantor; + +Skärmbild: +Här är en skärmbild av &cantor; + + + + + + Skärmbild + + + + + + + +Funktioner i &cantor; + + Intuitiv arbetsbladsvy för att utvärdera uttryck. + Resultat av diagramuppritning visas pÃ¥ arbetsbladet + Enkel struktur baserad pÃ¥ insticksprogram för att tillÃ¥ta att olika bakgrundsprogram läggs till. + Integrering med Hämta heta nyheter för att tillÃ¥ta att exempel pÃ¥ arbetsblad laddas ner (eller laddas upp). + Typsättning av matematiska formler med användning av &latex;. + Syntaxfärgläggning med kännedom om bakgrundsprogram. + Guidedialogrutor baserade pÃ¥ insticksprogram för att hjälpa till med vanliga uppgifter, som att integrera en funktion eller skriva in en matris. + + + + +Bakgrundsprogrammen för &cantor; +&cantor; erbjuder flera val av bakgrundsprogram som du önskar använda med det. Valet beror pÃ¥ vad du vill uppnÃ¥. +För närvarande är följande bakgrundsprogram tillgängliga: + + Sage: + + Sage är ett fritt matematikpaket med öppen källkod licensierat med GPL. Det kombinerar kraftfullheten hos mÃ¥nga befintliga paket med öppen källkod inom ett gemensamt Python-baserat gränssnitt. Se http://sagemath.org för mer information. + + + + Maxima: + + Maxima är ett system för hantering av symboliska och numeriska uttryck, inklusive derivering, integrering, Taylor-serier, Laplace-transformer, vanliga differentialekvationer, system av linjära ekvationer, polynom, mängder, listor, vektorer, matriser och tensorer. Maxima ger numeriska resultat med hög precision genom att använda exakta brÃ¥k, heltal med godtycklig precision och flyttal med variabel precision. Maxima kan rita upp funktioner och data i tvÃ¥ och tre dimensioner. Se http://maxima.sourceforge.net för mer information. + + + + R: + + R är ett sprÃ¥k och en miljö för statistiska beräkningar och diagram, som liknar sprÃ¥ket och miljön S. Det tillhandahÃ¥ller en stor mängd statistiska och grafiska tekniker (linjär och icke-linjär modellering, klassiska statistiska prov, analys av tidserier, klassificering, ...), och är mycket utökningsbart. SprÃ¥ket S är ofta förstahandsvalet för forskning i statistiska metoder, och R tillhandahÃ¥ller en väg med öppen källkod att delta i dessa aktiviteter. Se http://www.r-project.org för mer information. + + + + Julia: + + Julia är ett högnivÃ¥ och högprestanda dynamiskt programsprÃ¥k för teknisk databehandling, med en syntax som är bekant för användare av andra tekniska databehandlingsmiljöer. Det tillhandahÃ¥ller en sofistikerad kompilator, distribuerad parallell exekvering, numerisk noggrannhet och ett omfattande matematiskt funktionsbibliotek. Se Julias dokumentation för mer information. + + + + &kalgebra;: + + &kalgebra; är en grafisk räknare baserad pÃ¥ MathML, som levereras med &kde;:s utbildningsprojekt. Se http://edu.kde.org/kalgebra/ för mer information. + + + + Qalculate!: + + Qalculate! är inte en vanlig programvarukopia av den billigaste tillgängliga räknaren. Syftet med Qalculate! är att dra full nytta av det överlägsna gränssnittet, kraftfullheten och flexibiliteten hos moderna datorer. Fokus för uppmärksamheten i Qalculate! är inmatningen av uttryck, där man direkt kan skriva in hela det matematiska uttrycket och senare modifiera det, istället för att skriva in varje tal i ett uttryck separat. Tolkningen av uttryck är flexibel och feltolerant, och om du trots det gör nÃ¥got fel, talar Qalculate! om det. Uttryck som inte kan lösas helt är dock inga fel. Qalculate! förenklar sÃ¥ lÃ¥ngt det gÃ¥r, och svarar med ett uttryck. Förutom tal och aritmetiska operatorer, kan ett uttryck innehÃ¥lla vilken kombination av variabler, enheter och funktioner som helst. Se http://qalculate.sourceforge.net/ för mer information. + + + + Python2 och Python3: + + Python är ett häpnadsväckande kraftfullt dynamiskt programsprÃ¥k som utnyttjas för ett stort antal användningsomrÃ¥den. Det finns flera Python-paket för vetenskaplig programmering. + Python distribueras enligt Python Software Foundation-licensen (kompatibel med GPL). Se den officiella webbplatsen för mer information. + + Bakgrundsprogrammet lägger till ytterligare ett alternativ i &cantor;s huvudmeny, Paket. Det enda alternativet i menyn är Paket Importera paket. Alternativet kan användas för att importera Python-paket till arbetsbladet. + + + + + Scilab: + + Scilab är ett numeriskt beräkningspaket med fri programvara för flera plattformar, och ett högnivÃ¥sprÃ¥k med numerisk inriktning. + Scilab distribueras enligt CeCILL licensen (kompatibel med GPL). Se http://www.scilab.org/ för mer information. + + Du mÃ¥ste installera Scilab version 5.5 eller senare för att kunna installeras pÃ¥ systemet för att bakgrundsprogrammet ska vara användbart. + + + + + Octave: + + &GNU; Octave är ett högnivÃ¥sprÃ¥k, i huvudsak avsett för numeriska beräkningar. Det tillhandahÃ¥ller ett bekvämt kommandoradsgränssnitt för att lösa linjära och icke-linjära problem numeriskt, och för att utföra andra numeriska experiment med ett sprÃ¥k som i huvudsak är kompatibelt med MATLAB. Se http://www.gnu.org/software/octave/ för mer information. + + + + Lua: + + Lua är ett snabbt och lättviktigt skriptsprÃ¥k, men en enkel procedurbaserad syntax. Det finns flera bibliotek i Lua avsedda för matematik och vetenskap. + Se http://www.lua.org/ för mer information. + Bakgrundsprogrammet stöder luajit 2. + + + + + + + +Arbetsytan i &cantor; + + + Skärmbild av arbetsytan i &cantor; + + + + + + Skärmbild av arbetsytan i &cantor; + + + + +Arbetsbladgränssnittet i &cantor; bestÃ¥r av tre delar: + Flikraden, där du kan byta mellan öppna arbetsblad. + En hjälpruta, där hjälp för ett specifikt kommando visas om du skriver "? kommando". + En ruta för variabelhantering där du kan se en lista över alla tillgängliga variabler pÃ¥ det aktuella arbetsbladet. Rutorna för hjälp och variabelhantering visas som flikar pÃ¥ en sidorad i &cantor;s fönster. Variabelhantering kan bara användas för bakgrundsprogrammen Maxima (om det aktiveras pÃ¥ sidan Maxima med Inställningar Anpassa &cantor;...), &kalgebra;, Octave, Python 2, Python 3, Qalculate och Scilab. + Själva arbetsbladet. + + + +Arbetsbladet +Arbetsbladet är det grundläggande omrÃ¥det för att arbeta med &cantor;. Genom att använda det kan du skriva in uttryck, lÃ¥ta bakgrundsprogrammet utföra beräkningar, och titta pÃ¥ resultaten. Kommandon som arbetsbladen accepterar beror pÃ¥ det valda bakgrundsprogrammet, sÃ¥ man bör lära sig lämplig syntax för bakgrundsprogrammet (knappen Visa hjälp gÃ¥r direkt dit). Om du kan kommandot, men behöver ytterligare information, kan du skriva "? kommando", sÃ¥ visas sammanhangsberoende hjälp till höger om arbetsbladet. Om du vill se exempel pÃ¥ arbetsblad, kan du gÃ¥ till Ladda ner exempelarbetsblad i menyn Arkiv, och ladda ner arbetsblad som andra användare har publicerat. +För att hantera varje kommandoinmatning pÃ¥ arbetsbladet, kan du använda styrknapparna som visas pÃ¥ höger sida av arbetsbladet när muspekaren hÃ¥lls i inmatningsfältet. Det finns tre grundÃ¥tgärder för varje inmatning: Beräkna post för att uppdatera resultatet av beräkningarna för posten, Dra post för att flytta posten till en annan plats pÃ¥ det aktuella arbetsbladet och Ta bort post för att ta bort posten frÃ¥n det aktuella arbetsbladet. +Teckensnittsinställningar och justering av arbetsbladets poster kan ändras genom att använda en verktygsrad ovanför arbetsbladet. + + Inställningar + Menyn Inställningar lÃ¥ter dig ändra vissa inställningar av det aktuella arbetsbladets utseende + + + Typsättning med användning av &latex; + + Inställningen ändrar sättet som resultat presenteras. Om aktiverat, skickas resultatet genom &latex;-systemet för att skapa visuellt tilltalande formler. Exempelvis blir 3*x^2*sqrt(2)*x+2/3: + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Syntaxfärgläggning + + Syntaxfärgläggning ökar kodens läsbarhet, genom att färglägga nyckelord eller samhörande parenteser i olika färger. + + + + Komplettering + + När det här är aktiverat visar &cantor; möjliga kompletteringar av kommandot som du för närvarande skriver in, när du trycker pÃ¥ tabulatortangenten. Om bara ett val Ã¥terstÃ¥r, infogas resten av kommandot Ã¥t dig. + + + + Radnummer + + Inställningen styr om de olika uttrycken ska föregÃ¥s av ett nummer. Det lÃ¥ter dig Ã¥terkalla gamla resultat: i Maxima görs det exempelvis med kommandot %O1. + + + + Animera arbetsblad + + Den här inställningen styr om de olika animeringarna används för att färglägga ändringar pÃ¥ ett arbetsblad. + + + + + + + +Guidedialogrutorna +Flera handledningsdialogrutor är implementerade i &cantor; för att underlätta nÃ¥gra grundoperationer. +Dialogrutorna kan kommas Ã¥t via alternativen i huvudmenyn. Varje bakgrundsprogram har sina egna handledningsdialogrutor. + +Dialogrutan Skapa matris + + Skärmbild av dialogrutan Skapa matris i &cantor; + + + + + + Skärmbild av dialogrutan Skapa matris i &cantor; + + + +Dialogrutan kan användas för att mata in matriser. Det gÃ¥r att definiera matrisens dimensioner och dess element. +Det är möjligt att snabbt navigera mellan celler vid inmatning genom att använda tabulatortangenten. + + +Dialogrutan Matrisoperation + + Skärmbild av dialogrutan för matrisinmatning i &cantor; + + + + + + Skärmbild av dialogrutan för matrisinmatning i &cantor; + + + +Dialogrutan gör det möjligt att ange matrisens namn för att beräkna dess egenvektorer, egenvärden, eller invertera matrisen. Förvalt värde (%) används för att referera till föregÃ¥ende resultat av en beräkning eller inmatning. + + +Deriveringsdialogrutan + + Skärmbild av deriveringsdialogrutan i &cantor; + + + + + + Skärmbild av deriveringsdialogrutan i &cantor; + + + +Dialogrutan gör det möjligt att mata in funktionsuttrycket att derivera, namnet pÃ¥ variabeln och derivatans ordning. + + +Integreringsdialogrutan + + Skärmbild av integreringsdialogrutan i &cantor; + + + + + + Skärmbild av integreringsdialogrutan i &cantor; + + + +Dialogrutan gör det möjligt att mata in funktionen att integrera, namnet pÃ¥ variabeln och integralens gränser (för en bestämd integral). + + +Dialogrutan Lös ekvationer + + Skärmbild av dialogrutan Lös ekvationer i &cantor; + + + + + + Skärmbild av dialogrutan Lös ekvationer i &cantor; + + + +Dialogrutan gör det möjligt att mata in ekvationer att lösa (varje ekvation pÃ¥ en separat linje) och variablerna att bestämma (Ã¥tskilda av kommatecken). + + +Dialogrutan Paketimport + + Skärmbild av dialogrutan Paketimport i &cantor; + + + + + + Skärmbild av dialogrutan Paketimport i &cantor; + + + +Dialogrutan gör det möjligt att ange namnet pÃ¥ paketet att importera (t.ex. numpy för Python). + + +Dialogrutan Rita + + Skärmbild av dialogrutan Rita i &cantor; (fliken Funktioner) + + + + + + Skärmbild av dialogrutan Rita i &cantor; (fliken Funktioner) + + + +Dialogrutans alternativ är uppdelade i tvÃ¥ grupper genom att använda flikar. Fliken Funktioner gör det möjligt att mata in funktioner att rita upp. +Klicka pÃ¥ Lägg till för att mata in en ny funktion. Dubbelklicka pÃ¥ cellen Rubrik och ange rubriken, dubbelklicka därefter pÃ¥ cellen Uttryck och ange funktionens uttryck. + + Skärmbild av dialogrutan Rita i &cantor; (fliken Alternativ) + + + + + + Skärmbild av dialogrutan Rita i &cantor; (fliken Alternativ) + + + +Fliken Alternativ används för att definiera diagram- och förklaringsalternativ. Det gÃ¥r att finjustera nästan alla diagramalternativ för att erhÃ¥lla ett snyggt utseende pÃ¥ figuren. + + +Dialogrutan Rita i tvÃ¥ dimensioner + + Skärmbild av dialogrutan Rita i tvÃ¥ dimensioner i &cantor; + + + + + + Skärmbild av dialogrutan Rita i tvÃ¥ dimensioner i &cantor; + + + +Dialogrutan gör det möjligt att mata in funktionens uttryck, dess variabel och variabelns gränser. + + +Dialogrutan Rita i tre dimensioner + + Skärmbild av dialogrutan Rita i tre dimensioner i &cantor; + + + + + + Skärmbild av dialogrutan Rita i tre dimensioner i &cantor; + + + +Dialogrutan gör det möjligt att mata in funktionens uttryck, dess variabler och varje variabels gränser. + + + + + +Kommandoreferens + + +Huvudfönstret i &cantor; + +&cantor; har de vanliga menyalternativen i &kde;. För mer information, läs kapitlet Meny i &kde;:s grunder. + +Nedan är listan över ytterligare eller speciella menyalternativ i &cantor;. Observera att vissa menyer bara visas för bakgrundsprogram som har motsvarande implementering. + + +Menyn Arkiv + + + +&Ctrl;N AlbumNy +Skapar ett nytt arbetsblad med förvalt bakgrundsprogram. + + +Arkiv Ny Bakgrundsprogram +Skapar ett nytt arbetsblad med valt bakgrundsprogram. + + +Arkiv Ladda ner exempelarbetsblad +Öppnar en dialogruta för att ladda ner exempel uppladdade av andra användare &cantor; med Hämta heta nyheter. + + +Arkiv Öppna exempel +Öppnar dialogrutan för att välja ett exempel att läsa in. Exemplen mÃ¥ste först laddas ner med Arkiv Ladda ner exempelarbetsblad innan. + + +Arkiv Spara vanlig text +Gör det möjligt att spara aktuellt arbetsblad som ett vanligt textdokument. + + +Arkiv Exportera till Latex +Gör det möjligt att spara aktuellt arbetsblad som ett &latex;-dokument. + + +Arkiv Publicera arbetsblad +Öppnar dialogrutan för att publicera aktuellt arbetsblad och göra det tillgängliga för andra användare av &cantor; via Hämta heta nyheter. + + +Arkiv Kör skript +Gör det möjligt att ladda och köra bakgrundsskripten för nuvarande bakgrundsprogram. + + + + + + + +Menyn Visa + + + + &Ctrl;+ Visa Zooma in +Zooma in aktuellt arbetsblad 10 %. + + + &Ctrl;- Visa Zooma ut +Zooma ut aktuellt arbetsblad 10 %. + + +Visa Visa skripteditor +Öppna fönstret för redigering av bakgrundsskript för aktuellt bakgrundsprogram. + + +Visa Paneler Hjälp +Ändrar synlighet för fliken Hjälp i sidoraden. + + +Visa Paneler Variabelhantering +Ändrar synlighet för fliken Variabelhantering i sidoraden. + + + + + + +Menyn Arbetsblad + + + +Arbetsblad Beräkna arbetsblad +Utlöser beräkningen av hela arbetsbladet. + + + &Shift;Return Arbetsblad Beräkna post +Utlöser beräkningen av aktuell post. + + + &Ctrl;Retur Arbetsblad Infoga kommandopost +Infogar en ny kommandopost under nuvarande markörposition. + + +Arbetsblad Infoga textpost +Infogar en ny textpost under nuvarande markörposition. + + +Arbetsblad Infoga Latex-post +Infogar en ny Latex-post under nuvarande markörposition. + + +Arbetsblad Infoga sidbrytning +Infogar sidbrytningen under nuvarande markörposition. + + + &Shift;Delete Arbetsblad Ta bort nuvarande post +Tar bort aktuell post frÃ¥n arbetsbladet. + + + + + + +Menyn Linjär algebra + + + +Linjär algebra Skapa matris +Visar handledningsdialogrutan Skapa matris. + + +Linjär algebra Beräkna egenvärden +Visar handledningsdialogrutan för inmatning av matrisnamn för att beräkna dess egenvärden och dimensionerna för egenvärdenas multipler i motsvarande ordning. + + +Linjär algebra Beräkna egenvektorer +Visar handledningsdialogrutan för inmatning av matrisnamn för att beräkna dess egenvärden och dimensionerna för egenvärdenas och egenvektorernas multipler i motsvarande ordning. + + +Linjär algebra Invertera matris +Visar handledningsdialogrutan för inmatning av matrisnamn för att beräkna matrisens invers. + + + + + + +Menyn Beräkna + + + +Beräkna Derivera +Visar dialogrutan för deriveringsparametrar. + + +Beräkna Integrera +Visar dialogrutan för integreringsparametrar. + + +Beräkna Lös ekvationer +Visar dialogrutan för parameterinmatning för att lösa linjära och icke-linjära ekvationer. + + + + + + +Menyn Paket + + + +Paket Importera paket +Visar dialogrutan för paketimport. + + + + + + +Menyn Rita + + + +Rita Rita +Visar dialogrutan för diagramparametrar. + + +Rita Rita i tvÃ¥ dimensioner +Visar dialogrutan för diagramparametrar. + + +Rita Rita i tre dimensioner +Visar dialogrutan för diagramparametrar. + + + + + + +Menyerna Inställningar och Hjälp +&cantor; har de vanliga menyalternativen i &kde;, Inställningar och Hjälp. För mer information läs avsnitten om Menyn Inställningar och Menyn Hjälp i &kde;:s grunder. + + + + + + + +Vanliga frÃ¥gor + + + + Menyalternativet Typsätt med Latex är inte tillgängligt + Alla bakgrundsprogram stöder inte alla alternativ. Den nuvarande versionen stöder &latex;-utmatning för bakgrundsprogrammen Maxima, Qalculate! och Sage. + + + Jag har installerat Sage och Maxima eller ett annat CAS som stöds, men det lämpliga bakgrundsprogrammet visas inte. + + En möjlig förklaring är att &cantor; inte detekterade platsen riktigt. GÃ¥ till Inställningar Anpassa &cantor;... och ändra Sökväg till lämpligt program pÃ¥ bakgrundsprogramsidan. + + + + Vilket underligt namn, vad har det att göra med matematik? + &cantor; är uppkallat efter den tyska matematikern Georg Cantor, skaparen av mängdteori. + + + + + + +Tack till och licens + +&cantor; +Program copyright 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Dokumentation Copyright © 2009-2011 Alexander Rieder alexanderrieder@gmail.com + +Översättning Stefan Asserhäll stefan.asserhall@bredband.net +&underFDL; &underGPL; + +&documentation.index; +
    + + diff --git a/po/tr/cantor.po b/po/tr/cantor.po new file mode 100644 index 0000000..f102008 --- /dev/null +++ b/po/tr/cantor.po @@ -0,0 +1,3248 @@ +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# zeugma , 2013. +# Ozan Çağlayan , 2010. +# Renan Cakirerk, 2010. +# obsoleteman , 2009. +# Volkan Gezer , 2014, 2015, 2017. +msgid "" +msgstr "" +"Project-Id-Version: kdeedu-kde4\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2017-06-09 14:24+0100\n" +"Last-Translator: Volkan Gezer \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Serdar Soytetir, Renan Çakırerk" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "tulliana@gmail.com, renan@pardus.org.tr" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Duraklat" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Başlat" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Dur" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Sonucu kaydet" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Gelişmiş Çizim" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Çizim" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "İfade:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Ek seçenekler:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Çizim" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Seçenek etkin" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Hesapla" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Farklılaştır" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Değişken:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Kez: " + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Paket" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Paketi İçe Aktar" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Paket:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Bütünleştir" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Alt sınır:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Üst limit:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "belirli intagral" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Doğrusal Cebir" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Matris Oluştur" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Sütunlar:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Satırlar:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Eigen değerlerini hesapla" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Matris:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Eigen vektörlerini hesapla" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Matrisi Tersine Çevir" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "2B Çizim" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Değişken" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "İsim" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "En küçük:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "En büyük:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "3B Çizim" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "1. Değişken" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "2. Değişken" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Betik Çalıştır" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Eşitlikleri çöz" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Eşitlikler:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Değişkenler:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Tavsiye edilen sürüm: %4

    %2

    Daha fazla bilgi için %3 göz atınız
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Kullanılacak arka ucu seç:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Bunu öntanımlı arka uç yap" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia, teknik hesaplamalar için diğer teknik hesaplama " +"ortamlarının kullanıcıları tarafından bilinen sözdizimi ile birlikte yüksek " +"düzeyli, yüksek performanslı bir dinamik programlama dilidir. Gelişmiş bir " +"derleyici, dağıtık paralel yürütme, sayısal doğruluk ve kapsamlı bir " +"matematiksel işlev kitaplığı sağlamaktadır.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Julia doğal REPL için yol" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Çizimlerin integralini çalışma sayfasna koy " + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia betik dosyası (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Julia REPL için yol:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "Çizimleri Çalışma Sayfasına Dahil Et (değiştiğinde yeni oturum başlar)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Birarada Çizimler Ara Biçimi:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Oturum başlangıcında otomatik çalıştırılacak betiklerin listesi" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Hata: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Otomatik çalıştırılacak betikler" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua, basit bir sözdizimine sahip, hızlı ve hafif bir betik dilidir. " +"Matematik ve bilim için pek çok Lua kitaplığı bulunmaktadır.

    Bu arka " +"uç luajit 2 desteklemektedir.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "luajit komutunun yolu" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua betik dosyası (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "luajit komutunun yolu:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima, türev, integral, Taylor serileri, Laplace dönüşümleri, adi " +"differansiyel denklemler, doğrusal eşitlik sistemleri, polinomlar, takımlar " +"(set), listeler, vektörler, matrisler, tensör (tensor) gibi sembolik ve " +"sayısal ifadeleri düzenlemek için kullanılan bir sistemdir. Maxima tam " +"kesir, rastgele hassasiyetli tamsaylar ve değişken hassasiyetli kayan " +"noktalı sayılar kullanarak yüksek hassasiyetli sayısal sonuçlar üretir. " +"Maxima, fonksiyonları ve verileri iki ve üç boyutlu olarak çizebilir." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima çalıştırılabilir dosyasının yolu" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Değişken Yönetimini Etkinleştir" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Hata: Çok fazla */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Hata: Çok fazla /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Hata: ; öncesinde \" bekleniyor" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima toplu iş dosyası (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Maxima başlatılamadı" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima çöktü. Yeniden başlatılıyor..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Maxima kısa bir süre içerisinde 2 kere çöktü. Yeniden başlatılmaya " +"çalışılıyor." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Hata - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "fonksiyon" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima yolu:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Çizimleri Çalışma Sayfasına Dahil Et" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" +"Cantor'un değişkenlerin oluşturulması/kaldırılmasını takip etmesine izin ver" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave öncelikli olarak sayısal hesaplamalar için geliştirilmiş yüksek " +"seviyeli bir dildir.
    Lineer ve lineer olmayan problemleri sayısal " +"olarak çözmek ve diğer sayısal deneyleri yapmak için çoğunlukla Matlab ile " +"uyumlu güçlü bir komut satırı arayüzü sunar." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave çalıştırılabilir dosyasının yolu" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave betik dosyası (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Sözdizimi Hatası" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave yolu:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python betik dosyası (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python geniş bir yelpazede uygulama alanları bulunan son derece güçlü " +"dinamik bir programlama dilidir. Bilimsel hesaplama için pek çok Python " +"kitaplığı bulunmaktadır.

    Bu arka uç Python 2 desteklemektedir.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python geniş bir yelpazede uygulama alanları bulunan son derece güçlü " +"dinamik bir programlama dilidir. Bilimsel hesaplama için pek çok Python " +"kitaplığı bulunmaktadır.

    Bu arka uç Python 3 desteklemektedir.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - Çizim Penceresi" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Fonksiyonlar" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Başlık" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "İfade" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Ekle" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Kaldır" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Listeyi Temizle" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X değişkeni" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Biçim" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "Çizgiler" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "Noktalar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "Noktalar ve Çizgiler" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "Kutular" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "Sütun Grafiği" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Adımlar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "Sütunlar" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "Noktalar" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Yumuşatma" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "Hiçbiri" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "Tek tip" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "Doğal Kübik Şeritler" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "Bezier" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "Bezier (tek tip)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Fonksiyon Aralığı" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X aralığı" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "Ör&nekleme oranı" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "Adım bü&yüklüğü" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Seçenekler" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Çizim başlığı" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-eksen etiketi" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-eksen etiketi" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Açıklama konumu" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "Açıklamayı gizle" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "Üst-sol" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "Üst-sağ" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "Alt-sol" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "Alt-sağ" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "Altında" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "Dışarıda" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Izgarayı Göster" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Tüm kenarlığı göster" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Renk kullan" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Satır içinde görüntüle" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Logaritmik x ölçeği" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Logaritmik y ölçeği" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Dosya Seçenekleri" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Çizimi dosyaya kaydet" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Dosya türü" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Dosya adından algıla" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! basit hesap makinenizin bir yenilemesi değildir. Qalculate! " +"günümüz bilgisayarlarının bütün gücünü ve esnekliğini kullanması için " +"tasarlanmıştır. Qalculate!'in odağında ifade girdileri vardır. Bir " +"matematiksel ifadenin her sayısını ayrı ayrı girmek yerine tüm ifadeyi yazıp " +"daha sonra düzenleyebilirsiniz. İfadelerin yorumlanması esnek ve hata " +"toleranslıdır ve yine de hatalı bir şey yaparsanız Qalculate! bunu size " +"bildirecektir. Tamamen çözülemeyen ifadeler hata sayılmazlar. Qalculate! " +"yapabildiği kadar onları sadeleştirir ve sonuç olarak gösterir. Sayılar ve " +"aritmetik işlemlerin yanı sıra bir ifade değişkenler, birimler ve " +"fonksiyonlardan oluşabilir." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Birimlerin otomatik olarak dönüştürülüp dönüştürülmeyeceği ve " +"dönüştürülecekse bunun nasıl yapılacağı. Eğer doğru olarak ayarlanırsa en " +"uygun SI birimlerine dönüştürülür (en azından çoğu birim)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Trigonometrik fonksiyonlar için varsayılan açı birimi." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Ayrıştırılmış ve değerlendirilmiş sayılara dayanır." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Hesaplama sonucu sadeleştirilecek mi çarpanlara mı ayrılacak." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Rasyonel sayıların ondalıklı mı, kesir olarak mı yoksa ikisinin arasında mı " +"görüntüleneceği." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Sonsuza kadar devam eden ondalıklı sayıları yuvarlamak yerine üç nokta ile " +"göster (2/3 ifadesi 0.666667 yerine 0.666666... olarak görüntülenir)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Tüm ondalık SI ön eklerini kullan. Eğer false olarak ayarlanırsa bin çarpanı " +"olan ön ekler (centi, desi, deka, hekto) otomatik olarak kullanılmaz." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Eğer true olarak ayarlanırsa bölme yerine negatif kuvvetler kullanılır (5/" +"x^2 yerine 5*x^-2 yazılır)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Sayısal görünüm." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Eğer doğru olarak ayarlanırsa çizimler çalışma sayfasının içinde " +"görüntülenir. Aksi halde ayrı pencerede gösterilirler." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Çizimde renklerin kullanılıp kullanılmayacağı." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Izgaraların çizilip çizilmeyeceği." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Çizimin etrafına tüm kenarlıkların çizilip çizilmeyeceği." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Piksel cinsinden çizgi kalınlığı." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Çizimde kullanılan interpolasyon adım sayısı." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Çizimlerde yumuşatma kipi." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Çizimlerin biçemi." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Çizimde açıklamanın konumu." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate yazdıramadığını bildirdi. gnuplot kurulumu?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "%1 eksik" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 bir sayı olmalıdır." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 bir tam sayı olmalıdır." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 doğru veya yanlış olmalı." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "%1 için geçersiz seçenek: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "bir çizim komutunda birden çok ifade bulundu (%1 ve %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "HATA" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "UYARI" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Belirtilen isimde hiç bir fonksiyon, değişken veya birim yok." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Fonksiyon: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Çizim arayüzü" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "Bir veya daha fazla fonksiyonu bir arada veya ayrı pencerelerde çizer." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "ifade" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "seçenek" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "değer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "tam sayı" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "mantıksal değer" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "sayı" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "öntanımlı: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Fonksiyon adı" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Başlık etiketi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-ekseni etiketi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-ekseni etiketi" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Çizimin kaydedileceği görüntü dosyası. Boş olduğunda çizim ekranda bir " +"pencerede gösterilir. Eğer inline=true olarak ayarlanmışsa bu seçeneğe " +"bakılmadan görüntülenir." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Görüntünün kaydedileceği görüntü türü. auto, png, ps, eps, latex, svg veya " +"fig olabilir." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "Renkli çizim için true, tek renk çizim için false olarak ayarlayın." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "En küçük x ekseni değeri." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "En büyük x ekseni değeri." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "X ekseni için logaritmik ölçek kullanılacaksa." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Y ekseni için logaritmik ölçek kullanılacaksa." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "X ekseni için logaritmik taban." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Y ekseni için logaritmik taban." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Çizimde ızgara gösterilecekse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Çizim tüm slaytlarda kenarlıklarla çevrelenecekse (sadece eksenler değil)." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Çizgilerin genişliği." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Çizim açıklamasının konumu. none, top_left, top_right, bottom_left, " +"bottom_right, below veya outside olabilir" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "Çizim yumuşatma. none, unique, csplines, bezier veya sbezier olabilir" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Çizim biçemi. lines, points, points_lines, boxes, histogram, steps, " +"candlesticks veya dots olabilir" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "İkinci x ekseninde ölçek kullan." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "İkinci y ekseninde ölçek kullan." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "Çizim yeni bir pencerede değil iç içe çizilecekse." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "İki interpolasyon noktası arasındaki mesafe. Adımlar alanına da bakın." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "İnterpolasyon nokta sayısı. Adım alanına da bakın." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "X değişkeninin adı. Bu bilinmeyen bir değer olmalıdır" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Değişkenleri dosyaya kaydet" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Tanımlanmış bütün değişkenleri bir dosyaya kaydet. %1 ile yeniden " +"yüklenebilirler." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "dosya" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "dosya: kaydedilecek dosya" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Değişkenleri dosyadan yükle" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "%1 tarafından oluşturulmuş dosyadan değişkenleri yükle." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "dosya: yüklenecek dosya" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Genel" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Sayı tabanı:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Kesir biçimi:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "Ondalık" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "Tam" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "Kesirli" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "Bileşik" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Sayısal görünüm:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "Sade" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "Bilimsel" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "Duyarlılık" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Sonsuz serileri belirtin:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "Etkin" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Tüm SI önekleri kullan:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Negatif üstleri kullan:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Hesapla" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "En iyi SI birimlere dönüştür:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Açı birimi:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "Radyan" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "Derece" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradiyantler" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Yapılandırma Kipi:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "Basitleştir" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "Çarpanlara ayır" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Çizim" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Çizimleri bir arada göster:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Renkli Çizimler:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Izgarayı göster:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Tüm kenarlıkları göster:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Çizgilerin genişliği:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Örnekleme oranı:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Yumuşatma Kipi:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "Doğal kübik Spline çizgileri" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Çizim Biçemi:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Adımlar" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Açıklama Konumu:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R, S diline ve programlama arayüzüne benzeyen, istatistiksel hesaplamalar ve " +"grafikler için kullanılan bir programlama dili ve ortamıdır.
    Çok " +"çeşitli istatistiksel ve grafiksel teknikler (doğrusal ve doğrusal olmayan " +"modelleme, klasik istatistiksel testler, zaman-dizi analizi, sınıflandırma, " +"kümelendirme, ...) içerir ve oldukça genişletilebilir bir yapıya sahiptir. " +"S programalama dili sıklıkla istatistiksel metodoloji üzerine yapılan " +"araştırmalarda kullanılan bir araçtır, R dili ise buna açık kaynaklı bir " +"çözüm getirmektedir." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "%1 dosyası açılamadı" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R betik dosyası (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Komut Ayrıştırma Hatası" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "Dosya seçim penceresini açmak için çift tıklayın" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R kaynak dosyaları (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage, GPL lisanlı açık kaynaklı bir matematik yazılımıdır.
    Halihazırda " +"bulunan birçok açık kaynaklı paketin gücünü Python tabanlı bir arayüzde " +"birleştirir." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage çalıştırılabilir dosyasının yolu" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 sonucu" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Son çıktı: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python betik dosyası (*.py);;Sage betik dosyası (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "İfade hesaplanırken Sage süreci çöktü" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage süreci çöktü" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "İfade hesaplanırken Sage sürecinden çıkıldı" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage sürecinden çıkıldı" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Sage başlatılamadı" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage'nin yolu:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab bir özgür yazılımdır, çapraz platform sayısal hesaplama paketi ve " +"sayısal olarak yönlendirilmiş üst düzey bir programlama dilidir.

    Scilab, " +"CeCILL lisansı altında dağıtılır (GPL uyumlu)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"scilab-adv-cli komutunun yolu (Uyarı: Scilab sürümü en az 5.4 veya daha üstü " +"olmalıdır)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab betik dosyası (*.sce);;Scilab fonksiyon dosyası (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "scilab-adv-cli komutunun yolu:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Örnek Çalışma Kağıtları İndir" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "Ö&rnek Aç" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor Çalışma Sayfası (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Dosya aç" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Arka Uç Bulunamadı

    \n" +"
    Şunları deneyebilirsiniz:\n" +"
    • Yapılandırma penceresinden ayarları değiştirin;
    • Şu " +"program için gerekli paketleri kurun:
    • %2
    " +msgstr[1] "" +"

    Arka Uç Bulunamadı

    \n" +"
    Şunları deneyebilirsiniz:\n" +"
    • Yapılandırma penceresinden ayarları değiştirin;
    • Şu " +"programlar için gerekli paketleri kurun:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Hata" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Oturum %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Cantor parçacığı bulunamadı." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Birden çok kaydedilmemiş Çalışma Sayfası açık. Kapatmak istiyor musunuz?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Cantor'u Kapat" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "Mevcut proje değiştirildi. Kaydetmek istiyor musunuz?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Projeyi Kaydet" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Öntanımlı olarak kullanılacak arka uç" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Öntanımlı olarak Tür Ayarı uygula" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Öntanımlı olarak Sözdizimi Vurgulamasını yap" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Tamamlamayı öntanımlı olarak etkinleştir." + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "İfade numaralandırmayı öntanımlı olarak etkinleştir" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Öntanımlı olarak değişiklikleri Çalışma Sayfasında canlandır" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Bundan aşağıdaki girdileri otomatik olarak yeniden hesapla" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "%1 arka ucu kurulu değil" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"%1 arka ucunda sorun var,\n" +"lütfen ayarlarınızı kontrol edin ya da gerekli paketleri tekrar yükleyin.\n" +"Sadece bu çalışma sayfasını görüntüleyebileceksiniz." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Düz Metin Kaydet" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "LaTex'e çıkart" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Çalışma Kağıdını Değerlendir" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "LaTeX kullanan Karakter Dizisi" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Sözdizimi Renklendirmesi" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Tamamlama" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Satır Numaraları" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Çalışma Sayfasını Canlandır" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Arka Ucu Yeniden Başlat" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Girdiyi Değerlendir" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Komut Girdisi Ekle" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Metin Girdisi Ekle" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "Komut Girdisi Ekle" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Latex Girdisi Ekle" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Sayfa Sonu Ekle" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Resim Ekle" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Mevcut girdiyi kaldır" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "%1 Yardımını Göster" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Betik Düzenleyiciyi Göster" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Tamamlamayı Göster" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Farklı kaydet" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Kaydet" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "Arka Ucu Yeniden Başlat" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Kesme" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Hesaplanıyor..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Hazır" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Oturum Hatası: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Başlatma işlemi tamamlandı" + +#: cantor_part.cpp:665 +#, fuzzy, kde-format +#| msgid "Initializing Session" +msgid "Initializing..." +msgstr "Oturum Başlatılıyor" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "İsimsiz" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" +"Geçerli Çalışma Kağıdını herkese açık bir web sunucusuna göndermek istiyor " +"musunuz?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Soru - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "Çalışma kapığıdı kaydedilmedi. Göndermeden önce kaydetmelisiniz." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Uyarı - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Bu arka uç betikleri desteklemiyor." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "&Düzenle" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "&Görünüm" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Çalışma Kağıdı" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Dosya" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Yeni" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Paneller" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "Aya&rlar" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "Hazır" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X aralığı" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X aralığı" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X aralığı" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "Metin &Rengi..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "&Yazı Tipi" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "&Kalın" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "&Yatık" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Kesintiye uğradı" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Arama Çubuğunu" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Bul:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Sonraki" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Önceki" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Değiştir:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "&Değiştir" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Tümünü &Değiştir" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Burada ara:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Büyük/Küçük eşleştir" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Görüntüyü Yapılandır" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Görüntü eklemek için buraya sağ tıklayın" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "%1 resmi yüklenemedi" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Resim Ayarları" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Aç" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Görüntüleme Boyutu" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Genişlik" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Yükseklik" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Önizleme" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Yazdırma Boyutu" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Görüntüleme Boyutunu Kullan" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(otomatik)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Görüntü dosyasını aç" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "LaTeX kodunu göster" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Latex çalıştırılabilir dosyasının yolu" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Dvips çalıştırılabilir dosyasının yolu" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "İsim" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Değer" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Gönderen:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "Alıcı:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Ana başlık" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Apsis ölçeği" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Ordinat ölçeği" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Çizim başlığı:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Matematiksel uygulamalar için bir KDE önyüzü" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Projeyi Yürüten
    Qt5/KF5 portu, Scilab ve Python arka ucu" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Asıl yazar
    Proje Yürütücüs (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra arka ucu" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave arka ucu" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Arayüz" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor simgesi" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr " arka ucunu kullan" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Açılacak belgeler." + +#: main.cpp:144 worksheet.cpp:1009 +#, fuzzy, kde-format +#| msgid "Error opening file %1" +msgid "Couldn't open the file %1" +msgstr "%1 dosyası açılamadı" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Sayfa Sonu ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Matematiğe KDE yaklaşımı" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "İsim:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Değer:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Yeni değişken ekle" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Değişkenleri Yükle" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Değişkenleri Depola" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Değişkenleri Temizle" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Tüm değişkenleri silmek istediğinizden emin misiniz?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Onaylama - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Dosya yükle" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Sonucu kaldır" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Bir KDE metin düzenleyici bileşeni bulunamadı;\n" +"lütfen KDE kurulumunuzu kontrol edin." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Betik Düzenleyici" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Betik Düzenleyici - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Bulunamadı" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Başlangıca ulaşıldı" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Sona ulaşıldı" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "%1 eşleşme değiştirildi" +msgstr[1] "%1 eşleşme değiştirildi" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Komutlar" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Sonuçlar" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Hatalar" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Metin" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX Kodu" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Öntanımlı Arka Uc:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Etkinleştirildiğinde Cantor buranın altındaki her girdiyi otomatik hesaplar." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Girdileri otomatik olarak yeniden hesapla" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Öntanımlılar" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "LaTeX Yazımını Etkinleştir" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Sözdizimi Renklendirmesini Etkinleştir" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Tamamlamayı Etkinleştir" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Satır Numaralarını Etkinleştir" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Çalışma Sayfası Canlandırmalarını Etkinleştir" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Tamamlananı/Çizileni Göster" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Kodu Göster" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "Eps dosyası hazırlanamadı. Ek paketlere gereksinim duyuluyor" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" +"%1 dosyası yazılamıyor:\n" +"." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Dosyaya yazılamıyor." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "%1 dosyası kaydedilemedi" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "latex.xsl çalışma sayfası yüklenirken hata oluştu" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Komut Girdisi" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Metin Girişi" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Markdown Entry" +msgstr "Komut Girdisi Ekle" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX Girdisi" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Resim" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Sayfa Sonu" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "Metin Girdisi Ekle" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "Öncesine Ekle" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "LaTeX Girdisi Ekle" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "Metin &Rengi..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Renk" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "Metin &Vurgulaması..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Yazı Tipi" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "Yazı Tipi Boyutu" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Kalın" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Yatık" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "&Altı Çizili" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Üzeri Çizili" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "&Sola Hizala" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Sol" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "&Ortaya Hizala" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "Ortala" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "S&ağa Hizala" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Sağ" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "&İki Yana Hizala" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "İki Yana Hizala" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Girdiyi Kaldır" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Girdiyi Sürükle" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "Bu dosyanın oluşturulduğu arka uç yüklü değil. Gereksinim duyulan %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Çalışma Kağıdını Yayınla" + +#~ msgid "Waiting for Image..." +#~ msgstr "Görüntü bekleniyor..." + +#~ msgid "Insert" +#~ msgstr "Ekle" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "%1 dosyası açılamadı: Bilinmeyen Mime Türü" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|LaTex Belge" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|Cantor Çalışma Kağıdı" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Cantor R Arka Ucu için Sunucu" + +#~ msgid "R Server" +#~ msgstr "R Sunucusu" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "(C) 2009 Alexander Rieder" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Kullanım: saveVariables dosya" + +#~ msgid "Saving failed." +#~ msgstr "Kaydetme başarısız oldu." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Kullanım: loadVariables dosya" + +#~ msgid "Loading failed." +#~ msgstr "Yükleme başarısız oldu." + +#~ msgid "Cantor Server for R" +#~ msgstr "R için Cantor sunucusu" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Görüntüleri dışa aktarmak ister misiniz?" diff --git a/po/ug/cantor.po b/po/ug/cantor.po new file mode 100644 index 0000000..a68829c --- /dev/null +++ b/po/ug/cantor.po @@ -0,0 +1,3111 @@ +# Uyghur translation for cantor. +# Copyright (C) YEAR This_file_is_part_of_KDE +# This file is distributed under the same license as the PACKAGE package. +# Sahran , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2013-09-08 07:05+0900\n" +"Last-Translator: Gheyret Kenji \n" +"Language-Team: Uyghur Computer Science Association \n" +"Language: ug\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "ئابدۇقادىر ئابلىز, غەيرەت كەنجى" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "sahran.ug@gmail.com, gheyret@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "ۋاقىتلىق توختا" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "باشلاش" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "توختا" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "سىزمىچىلىق" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "ئىپادە:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "قوشۇمچە تاللانمىلار:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "ھېسابلا(&C)" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "ھاسىلە" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "ئىنتېگرال" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "توۋەن چەك:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "يۇقىرى چەك:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "ماترىتسا قۇرۇش" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "ئىستون:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "قۇر:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "تەتۈر ماترىتسا" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "ئۆزگىرىشچان" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "ئاتى" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "ئەڭ كىچىك:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "ئەڭ چوڭ:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "قوليازما ئىجرا قىل" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "" + +#: backendchoosedialog.cpp:31 +#, fuzzy, kde-format +#| msgid "" +#| "

    %1

    %2

    See %3 for more " +#| "information
    " +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    %2

    تېخىمۇ كوپ ئۆچۈر ئۈچۈن%3 قاراڭ
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "ئىشلىتىدىغان ئارقا ئۇچنى تاللاڭ:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "بۇ كۆڭۈلدىكى ئارقا ئۇچ بولسۇن" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "خاتالىق: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "" + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "فۇنكسىيە" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "گرامماتىكىلىق خاتالىق" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "فۇنكسىيىلەر" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "ماۋزۇ" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "ئىپادە" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "قوش" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "چىقىرىۋەت" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "تىزىملىكنى تازىلا" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "ئۇسلۇب" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "سىزىقلار" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "نۇقتا" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "كۆزنەكچىلەر" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "سىتاتىسكا گرافىكى، چاسا دىئاگرامما" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "قەدەم" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "چېكىت" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "سىيلىق" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "يوق" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, fuzzy, kde-format +#| msgid "Steps" +msgid "Step si&ze" +msgstr "قەدەم" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "تاللانما" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "سول ئۈستى" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "ئوڭ ئۈستى" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "سول ئاستى" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "ئوڭ ئاستى" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "ئاستى" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "ھۆججەت تاللانمىلىرى" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "ھۆججەت تىپى" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ERROR" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ئاگاھلاندۇرۇش" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "تاللانما" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "قىممىتى" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "پۈتۈن سان" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "لوگىكىلىق قىممەت" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "نومۇر" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "ھۆججەت" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "ئادەتتىكى" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "ئونلۇق كەسىر" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "دەل" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "پەن-تېخنىكا" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "ئېنىقلىقى" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "ئىناۋەتلىك قىلىنغان" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "باھا" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "بۇلۇڭ بىرلىكى:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "رادىئان" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "گرادۇس" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "پىرسەنت" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "ئاددىيلاشتۇر" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "كۆپەيتكۈچىلەرگە ئايرىش" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "قەدەم" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "مىسالنى ئاچ(&O)" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "" + +#: cantor.cpp:196 +#, fuzzy, kde-format +#| msgid "&Open Example" +msgid "Open file" +msgstr "مىسالنى ئاچ(&O)" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "خاتالىق" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "ئەڭگىمە %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" + +#: cantor.cpp:424 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Close Cantor" +msgstr "Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "ئىشلىتىدىغان كۆۈلدىكى ئارقا ئۇچ" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "گرامماتىكىلىق يورۇتۇش" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "تاماملاش" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "قۇر نومۇرى" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "ئارقا ئۇچنى قايتا باشلاش" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Markdown Entry" +msgstr "ئالدىغا قىستۇر" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "سۈرەت قىستۇر" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "ئارقا ئۇچنى قايتا باشلاش" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "ئۈزۈلۈش" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "ھېسابلاۋاتىدۇ…" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "تەييار" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "ئاتسىز" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "تەھرىر(&E)" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "كۆرۈنۈش(&V)" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "ھۆججەت(&F)" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "يېڭى(&N)" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "تاختايلار" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "تەڭشەك(&S)" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "تەييار" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "تېكىست رېڭى(&C)…" + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "خەت نۇسخا(&F)" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "توم(&B)" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "يانتۇ(&I)" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "…" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "ئىزدە:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "كېيىنكى(&N)" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "ئالدىنقى(&P)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "ئالماشتۇر:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "ئالماشتۇر(&R)" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "ھەممىنى ئالماشتۇر" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "ئىزدەش:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "چوڭ-كىچىكلىكىگە قارا(&M)" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "سۈرەت تەڭشەك" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "ئاچ" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "كەڭلىك" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "ئېگىزلىك" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, fuzzy, kde-format +#| msgid "&Previous" +msgid "Preview" +msgstr "ئالدىنقى(&P)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "بېسىش چوڭلۇقى" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "ئاتى" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "قىممەت" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "ئەۋەتكۈچى:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "خەت تاپشۇرۇۋالغۇچى:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra ئارقا ئۇچى" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave ئارقا ئۇچى" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "ئارايۈز" + +#: main.cpp:97 main.cpp:98 +#, fuzzy, kde-format +#| msgid "Cantor" +msgid "Cantor icon" +msgstr "Cantor" + +#: main.cpp:106 +#, fuzzy, kde-format +#| msgid "Use this backend" +msgid "Use backend " +msgstr "مەزكۇر ئارقا ئۇچنى ئىشلەت" + +#: main.cpp:109 +#, fuzzy, kde-format +#| msgid "Document to open" +msgid "Documents to open." +msgstr "ئاچىدىغان پۈتۈك" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "ئاتى:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "قىممىتى:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, fuzzy, kde-format +#| msgid "file" +msgid "Load file" +msgstr "ھۆججەت" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"ك د ئې(KDE) تەھرىرلىگۈچ بۆلىكى تېپىلمىدى؛\n" +" ك د ئې(KDE) نىڭ ئورنىتىلىشىنى تەكشۈرۈڭ." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "تېپىلمىدى" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "بۇيرۇقلار" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "نەتىجە" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "خاتالىق" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "تېكىست" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "كۆڭۈلدىكى ئارقا ئۇچ" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "كۆڭۈلدىكى قىممەتلەر" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "گرامماتىكا يورۇق كۆرسىتىشنى قوزغىتىش" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "تېكىست كىرگۈ" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Markdown Entry" +msgstr "ئالدىغا قىستۇر" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "سۈرەت" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "بەت ئايرىش بەلگىسى" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "ئالدىغا قىستۇر" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "تېكىست رېڭى(&C)…" + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "رەڭ" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "تېكىستنى يورۇت(&H)…" + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "خەت نۇسخا(&F)" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "خەت نۇسخا چوڭلۇقى(&S)" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "توم(&B)" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "يانتۇ(&I)" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "ئاستى سىزىق(&U)" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "ئۆچۈرۈش سىزىقى(&S)" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "سولغا توغرىلا(&L)" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "سول" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "ئوتتۇرىغا توغرىلا(&C)" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "مەركەز" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "ئوڭغا توغرىلا(&R)" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "ئوڭ" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "ئوڭ-سول تەرىپى تەكشى(&J)" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "ئوڭ-سول تەرىپى تەكشى" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "تۈرنى چىقىرىۋەت" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "" + +#~ msgid "Insert" +#~ msgstr "قىستۇر" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "Other" +#~ msgstr "باشقا" + +#~ msgid "Main Toolbar" +#~ msgstr "ئاساسىي قورال بالداق" + +#~ msgid "Completion Style:" +#~ msgstr "تاماملاش ئۇسلۇبى:" + +#~ msgid "Popup" +#~ msgstr "سەكرىمە" diff --git a/po/uk/cantor.po b/po/uk/cantor.po new file mode 100644 index 0000000..ba1321e --- /dev/null +++ b/po/uk/cantor.po @@ -0,0 +1,3369 @@ +# Translation of cantor.po to Ukrainian +# Copyright (C) 2009-2018 This_file_is_part_of_KDE +# This file is distributed under the license LGPL version 2.1 or +# version 3 or later versions approved by the membership of KDE e.V. +# +# Yuri Chornoivan , 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018. +msgid "" +msgstr "" +"Project-Id-Version: cantor\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-08 07:02+0200\n" +"Last-Translator: Yuri Chornoivan \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 2.0\n" +"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" +"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Юрій Чорноіван" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "yurchor@ukr.net" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "Призупинити" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "Почати" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "Зупинити" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "Зберегти результат" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "Складне креслення" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "Креслення" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "Вираз:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "Додаткові параметри:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "&Креслення" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "Задіяний параметр" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "&Обчислення" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "Продиференціювати" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "Змінна:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "Порядок:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "&Пакунок" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "Імпортувати пакунок" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "Пакунок:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "Проінтегрувати" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "Нижня межа:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "Верхня межа:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "визначений інтеграл" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "&Лінійна алгебра" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "Створити матрицю" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "Стовпчиків:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "Рядків:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "Обчислити власні значення" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "Матриця:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "Обчислити власні вектори" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "Знайти обернену матрицю" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "Двовимірний графік" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "Змінна" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "Назва" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "Мінімум:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "Максимум:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "Тривимірний графік" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "Перша змінна" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "Друга змінна" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "Виконати скрипт" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "Розв’язати рівняння" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "Рівняння:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "Змінні:" + +# %3 — це сайт СКА +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    Рекомендована версія: %4

    %2

    Докладнішу інформацію можна знайти тут: %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "Оберіть модуль обробки програми:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "Зробити цей модуль типовим" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia — високорівнева високошвидкісна динамічна мова для виконання " +"інженерних обчислень. Синтаксис мови подібний до синтаксису інших середовищ " +"для виконання технічних обчислень. Передбачено гнучкий компілятор, виконання " +"паралельних обчислень, визначення точності представлення чисел та бібліотеку " +"із широким спектр математичних функцій.

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Шлях до програми інтерактивного керування Julia" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "Інтегрувати графіки до робочого аркуша" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "файл скрипту Julia (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Шлях до REPL Julia:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "" +"Інтегрувати графіки до робочого аркуша (стосуватиметься лише нових сеансів)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "Проміжний формат вбудованих креслень:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/uk/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "Список скриптів, які буде автоматично запущено на початку сеансу" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "Помилка: %1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "Скрипти автоматичного запуску" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua — проста і невибаглива до ресурсів скриптова мова програмування з " +"простим процедурним синтаксисом. Для Lua створено декілька бібліотек для " +"математичного і наукового програмування.

    У цьому модулі реалізовано " +"підтримку luajit 2.

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "Шлях до програми luajit" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "файл скрипту Lua (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "Шлях до інтерпретатора luajit:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima — це система для роботи з символічними і числовими виразами, зокрема " +"диференціювання, інтегрування, розкладу у ряди Тейлора, виконання " +"перетворення Лапласа, розв’язання звичайних диференціальних рівнянь, роботи " +"з поліномами, множинами, списками, векторами, матрицями і тензорами. За " +"допомогою Maxima можна отримувати результати з високою точністю, оскільки " +"програма використовує точні дроби і виконує обчислення з довільною " +"визначеною точністю. Maxima здатна креслити графіки функцій та графічно " +"відображати дані у двох та трьох вимірах." + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Шлях до виконуваного файла Maxima" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "Увімкнути керування змінними" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "Помилка: забагато */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "Помилка: забагато /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "Помилка: перед ; мало бути \"" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "Очікуємо на завершення побудови креслення" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "пакетний файл Maxima (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "Не вдалося запустити Maxima" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Аварійне завершення Maxima. Перезапуск..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "" +"Протягом нетривалого часу Maxima аварійно завершила роботу двічі. Спроби " +"запуску модуля припинено." + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "Помилка — Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "функція" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Шлях до Maxima:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "Інтегрувати графіки на робочому аркуші" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "Дозволити Cantor стежити за створенням і знищенням змінних" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave — високорівнева оболонка мови програмування, основним " +"призначенням якої є обчислення.
    У оболонці передбачено зручний " +"інтерфейс командного рядка для числового розв’язання лінійних і нелінійних " +"задач, проведення інших числових експериментів. Мова програмування має " +"високий рівень сумісності з мовою Matlab." + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Шлях до виконуваного файла Octave" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "файл скрипту Octave (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "Синтаксична помилка" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Шлях до Octave:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "файл скрипту Python (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python є доволі потужною мовою динамічного програмування, яка " +"використовується у багатьох комплектах програм. Існує декілька пакунків " +"Python для наукового програмування.

    У цьому модулі реалізовано " +"підтримку Python 2.

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python є доволі потужною мовою динамічного програмування, яка " +"використовується у багатьох комплектах програм. Існує декілька пакунків " +"Python для наукового програмування.

    У цьому модулі реалізовано " +"підтримку Python 3.

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor — діалогове вікно креслення" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "Функції" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "Заголовок" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "Вираз" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "Додати" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "Вилучити" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "Спорожнити список" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "Змінна X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "Стиль" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "лінії" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "точки" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "точки та лінії" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "стовпчики" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "гістограма" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "сходинки" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "японські свічки" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "крапки" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "Згладжування" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "не визначено" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "монотонне" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "природні кубічні сплайни" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "крива Безьє" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "крива Безьє (монотонна)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "Діапазон графіка" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "Діапазон за X" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "&Частота поділу" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "&Розмір кроку" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "Параметри" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "Заголовок графіка" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "Мітка вісі X" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Мітка вісі Y" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "Розташування умовних позначень" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "сховати умовні позначення" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "вгорі ліворуч" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "вгорі праворуч" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "внизу ліворуч" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "внизу праворуч" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "під графіком" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "ззовні" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "Показувати сітку" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "Показувати рамку" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "Використовувати кольори" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "Показувати вбудованим" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "Логарифмічна шкала за X" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Логарифмічна шкала за Y" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "Параметри файлів" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "Зберегти графік до файла" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "Тип файла" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "Визначати за назвою" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! — це не звичайна програмна реалізація найдешевшого з " +"калькуляторів. Qalculate! намагається повністю використати чудовий " +"інтерфейс, потужність та гнучкість сучасних комп’ютерів. Основну увагу у " +"Qalculate! приділено зручності введення даних. Замість введення кожного " +"числа у математичному виразі окремо ви можете безпосередньо вписати цілий " +"вираз і пізніше внести до нього зміни. Обробка виразів є доволі гнучкою і " +"поблажливою до помилок. Якщо ви введете щось неправильно, Qalculate! " +"повідомить вам про це. Якщо звести вираз до числового результату не " +"вдасться, програма не поверне повідомлення про помилку. Qalculate! " +"максимально спростить вираз і повідомить вам відповідь. Окрім чисел та " +"арифметичних операторів, у виразах можуть міститися будь-які комбінації " +"змінних, одиниць та функцій." + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"Визначає спосіб автоматичного перетворення одиниць. Якщо має значення true, " +"перетворювати на найближчі одиниці СІ (форму з найкоротшим записом)." + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "Типова одиниця кутів для тригонометричних функцій." + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "Основа для обробки та обчислень." + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "Визначає, чи слід спрощувати або розкладати на множники результат." + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "" +"Визначає спосіб показу раціональних чисел: десяткові дроби, звичайні дроби " +"чи проміжний варіант." + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"Позначати нескінченні послідовності цифр трьома точками замість округлення " +"(наприклад показувати для 2/3 0.666666... замість 0.666667)." + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"Використовувати всі десяткові префікси СІ. Якщо має значення false, " +"префікси, які утворюються множенням на степінь тисячі (санти-, деци-, дека-, " +"гекто-), не буде автоматично використано." + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "" +"Якщо має значення true, використовувати від’ємні степені замість ділення " +"(наприклад, показувати замість 5/x^2 5*x^-2)." + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "Формат показу чисел." + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "" +"Якщо має значення true, графіки буде показано всередині робочого аркуша. " +"Якщо має значення false, графіки буде показано у окремому вікні." + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "Визначає, чи слід використовувати кольори на графіках." + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "Визначає, чи слід показувати на графіках координатну сітку." + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "Визначає, чи слід малювати рамку з усіх боків від графіка." + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "Товщина ліній у пікселях." + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "Кількість кроків інтерполяції, які буде використано під час малювання." + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "Режим згладжування на графіках." + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "Стиль графіків." + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "Розташування умовних позначень на графіках." + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "" +"Qalculate повідомляє про неможливість виведення даних. Чи встановлено " +"gnuplot?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "не вистачає %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 має бути числом." + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 має бути цілим числом." + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 має бути булевим значенням." + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "некоректний параметр %1: %2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "виявлено декілька виразів у одній команді креслення (%1 і %2)." + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "ПОМИЛКА" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "ПОПЕРЕДЖЕННЯ" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "Функції, змінної або одиниці з вказаною назвою не існує." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "Функція: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "Інтерфейс креслення" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "" +"Креслить графіки однієї або декількох функцій на обчислювальному аркуші або " +"у окремому вікні." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "вираз" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "параметр" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "значення" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "ціле" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "булеве" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "число" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "типове значення: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "Назва функції" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "Мітка заголовка" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "Мітка вісі x" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Мітка вісі y" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"Файл зображення, до якого слід вивести дані. Порожнє значення призведе до " +"показу графіка у вікні на екрані. Якщо встановлено inline=true, зображення " +"буде показано незалежно від значення цього параметра." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "" +"Тип файла зображення, до якого слід зберегти дані. Можливі значення: auto, " +"png, ps, eps, latex, svg, fig." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "" +"Встановіть значення true для виведення даних у кольорі, false — чорно-біле " +"зображення." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "Мінімальне значення за віссю X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "Максимальне значення за віссю X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "Визначає, чи слід використовувати для вісі X логарифмічну шкалу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Визначає, чи слід використовувати для вісі Y логарифмічну шкалу." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "Основа логарифма для вісі X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Основа логарифма для вісі Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "Визначає, чи слід показувати на кресленні координатну сітку." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "" +"Визначає, чи слід малювати навколо креслення рамку з усіх боків (не лише з " +"боку осей)" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "Товщина ліній." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"Визначає розташування умовних позначень графіка. Можливі значення: none, " +"top_left, top_right, bottom_left, bottom_right, below, outside." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "" +"Режим згладжування графіка. Можливі значення: none, unique, csplines, " +"bezier, sbezier." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"Стиль графіка. Можливі значення: lines, points, points_lines, boxes, " +"histogram, steps, candlesticks, dots." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "Використовувати шкалу на другій вісі X." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "Використовувати шкалу на другій вісі Y." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "" +"Визначає, чи слід вбудовувати графік у поточне вікно замість малювання його " +"у новому вікні." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "Відстань між двома інтерполяційними точками. Також див. steps." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "Кількість точок інтерполяції. Також див. step." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "Назва змінної для вісі X. Це має бути ще не використана змінна." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "Зберегти змінні до файла" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "" +"Зберегти всі поточні визначені змінні до файла. Перезавантажити змінні можна " +"за допомогою %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "файл" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "файл: файл, до якого слід зберегти дані" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "Завантажити змінні з файла" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "" +"Завантажити змінні з файла %1, який раніше було створено за допомогою %1." + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "файл: файл, який слід завантажити" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "Загальне" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "Основа числення:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "Формат показу дробів:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "десятковий" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "точний" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "дробовий" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "комбінований" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "Формат показу чисел:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "простий" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "інженерний" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "точний" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "Позначати нескінченні послідовності:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "увімкнено" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "Використовувати всі префікси СІ:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "Використовувати від’ємні степені:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "Обчислення" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "Перетворити на найкращі одиниці СІ:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "Одиниця кутів:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "радіани" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "градуси" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "градіани" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "Режим структурування:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "спрощення" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "розкладання на множники" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "Креслення" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "Вбудовувати креслення:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "Кольорові графіки:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "Показувати сітку:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "Показувати всі межі:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "Товщина ліній:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "Ділянок розбиття:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "Режим згладжування:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "природні кубічні сплайни" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "Стиль графіка:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "сходинки" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "Розташування умовних позначень:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R — це мова і середовище для статистичних обчислень та побудови графіків, " +"подібна до мови і середовища S.
    У середовищі реалізовано широкий спектр " +"статистичних та графічних методик (лінійне і нелінійне моделювання, класичні " +"статистичні перевірки, аналіз часових послідовностей, класифікацію, " +"групування тощо). Можливості середовища досить просто розширити. Мова S " +"часто є основним рушієм у статистичних дослідженнях, R надає вам змогу " +"виконувати подібні дослідження за допомогою вільного програмного " +"забезпечення." + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "Помилка під час відкриття файла %1" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "файл скрипту R (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "Помилка під час обробки команди" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "" +"Двічі клацніть лівою кнопкою миші, щоб відкрити діалогове вікно вибору файла" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|файли кодів R (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage — це вільна система математичного програмного забезпечення з відкритим " +"кодом, випущена за умов дотримання GPL.
    У ній поєднується потужність " +"багатьох пакунків з відкритим програмним кодом та загальний заснований на " +"Python інтерфейс." + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Шлях до виконуваного файла Sage" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "Результат %1" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"Останніми виведеними даними були: \n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "файл скрипту Python (*.py);;файл скрипту Sage (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"Підтримки версії Sage %1.%2 не передбачено. Будь ласка, оновіть встановлені " +"пакунки до підтримуваних версій, щоб можна було працювати із Sage у Cantor." + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Під час спроби обчислення за виразом процес Sage аварійно завершився" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Процес Sage завершився аварійно" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Під час спроби обчислення за виразом процес Sage завершив роботу" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Процес Sage завершив роботу" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "Не вдалося запустити Sage" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Шлях до Sage:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab є вільним програмним забезпеченням, працює на багатьох платформах. " +"Це програмне забезпечення призначено для виконання обчислень і керується " +"високорівневою мовою програмування.

    Scilab поширюється за умов дотримання " +"ліцензії CeCILL (сумісної з GPL)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "" +"Шлях до виконуваного файла scilab-adv-cli. Попередження: слід встановити " +"версію Scilab не старішу за 5.4." + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;файл скрипту Scilab (*.sce);;файл функції Scilab (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "Шлях до програми scilab-adv-cli:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "Отримати приклади робочих аркушів" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "&Відкрити приклад" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "Перейти до попереднього робочого аркуша" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "Перейти до наступного робочого аркуша" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "робочий аркуш Cantor (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "Відкриття файла" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    Не знайдено модулів.

    \n" +"
    Можете спробувати:\n" +"
    • змінити параметри у діалоговому вікні налаштування
    • " +"
    • встановити однієї з таких програм:
    • %2
    " +msgstr[1] "" +"

    Не знайдено модулів.

    \n" +"
    Можете спробувати:\n" +"
    • змінити параметри у діалоговому вікні налаштування
    • " +"
    • встановити пакунки однієї з таких програм:
    • %2
    " +msgstr[2] "" +"

    Не знайдено модулів.

    \n" +"
    Можете спробувати:\n" +"
    • змінити параметри у діалоговому вікні налаштування
    • " +"
    • встановити пакунки однієї з таких програм:
    • %2
    " +msgstr[3] "" +"

    Не знайдено модулів.

    \n" +"
    Можете спробувати:\n" +"
    • змінити параметри у діалоговому вікні налаштування
    • " +"
    • встановити пакунки цієї програми:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "Помилка" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "Сеанс %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "Не вдалося знайти частини Cantor." + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "" +"Відкрито декілька робочих аркушів, зміни у яких не збережено. Хочете закрити " +"їх усі?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "Закрити Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "До поточного проекту було внесено зміни. Хочете зберегти їх?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "Зберегти проект" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "Модуль, який використовуватиметься типово" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "Типово виконувати верстання" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "Типово виконувати підсвічування синтаксису" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "Типово увімкнути доповнення" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "Типово, увімкнути нумерування виразів" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "Типово анімувати зміни на робочому аркуші" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "Автоматично переобчислювати записи під поточним" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "Підтверджувати перезапуск модуля" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "Модуль %1 не встановлено" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"З модулем %1 виникли певні проблеми. Будь ласка,\n" +"перевірте налаштування або встановіть потрібні пакунки.\n" +"Ви не зможете змінити вміст цього робочого аркуша." + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "Зберегти як простий текст" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "Експортувати до LaTeX" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "Виконати обчислення на аркуші" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "Показ з використанням LaTeX" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "Підсвічування синтаксису" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "Доповнення" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "Номери рядків" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "Анімувати робочий аркуш" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "Перезапустити модуль" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "Обчислити запис" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "Вставити запис команди" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "Вставити текстовий запис" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "Вставити запис Markdown" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "Вставити запис LaTeX" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "Вставити розрив сторінки" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "Вставити зображення" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "Вилучити поточний запис" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "Показати довідку з %1" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "Відкрити редактор скриптів" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "Показувати доповнення" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "CantorPart" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "© Alexander Rieder, 2009–2015" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "Зберегти як" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "Зберегти" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" +"Усі доступні результати обчислень буде втрачено. Ви справді хочете " +"перезапустити %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "Перезапустити %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "Перервати" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "Обчислення…" + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "Виконано" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "Помилка сеансу: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "Ініціалізацію завершено" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "Ініціалізація…" + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "Без назви" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[лише читання]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "Бажаєте вивантажити поточний робочий аркуш на відкритий вебсервер?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "Питання — Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "" +"Дані робочого аркуша не збережено. Вам слід зберегти дані, перш ніж їх " +"вивантажувати." + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "Попередження — Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "Цей модуль не підтримує скриптів." + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "З&міни" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "П&ерегляд" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "&Аркуш" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "&Файл" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "&Новий аркуш" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "Панелі" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "П&араметри" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "білий" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "чорний" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "темно-червоний" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "червоний" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "світло-червоний" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "темно-зелений" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "зелений" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "світло-зелений" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "темно-синій" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "синій" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "світло-синій" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "темно-жовтий" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "жовтий" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "світло-жовтий" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "темно-бірюзовий" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "блакитний" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "світло-бірюзовий" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "темно-бузковий" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "бузковий" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "світло-бузковий" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "темно-жовтогарячий" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "жовтогарячий" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "світло-жовтогарячий" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "темно-сірий" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "сірий" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "світло-сірий" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "Колір тла" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "Колір тексту" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "Шрифт" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "Напівжирний" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "Курсив" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "Збільшити розмір" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "Зменшити розмір" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "Вибрати" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "Перервано" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "Панель пошуку" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "…" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "Знайти:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "&Наступний" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "&Попередній" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "Замінити:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "З&амінити" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "Замінити &всі" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "Шукати у:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "&Враховувати регістр" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "Налаштувати зображення" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "Клацніть правою кнопкою миші, щоб вставити зображення" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "Не вдалося завантажити зображення %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "Параметри зображення" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "Відкрити" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "Розмір показу" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "Ширина" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "Висота" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "Попередній перегляд" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "Показ розмірів" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "Використовувати розмір показу" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(авто)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "точок" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "Відкриття файла зображення" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "Показати код LaTeX" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "Шлях до виконуваного файла latex" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "Шлях до виконуваного файла dvips" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "Назва" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "Значення" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "Від:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "До:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "Основний заголовок" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "Шкала абсцис" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "Шкала ординат" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "Заголовок креслення:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Графічна оболонка KDE для математичних програм" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "© Filipe Saraiva, 2016
    © Alexander Rieder, 2009–2015" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "Супровідник
    Портування на Qt5/KF5, модулі Scilab і Python" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "Автор початкової версії
    Супровідник (2009–2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "Модуль KAlgebra" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Модуль Octave" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "Інтерфейс" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Піктограма Cantor" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "Використовувати вказаний модуль" + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "Документ, який слід відкрити." + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "Не вдалося відкрити файл %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- Розрив сторінки ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    Інструмент виконання математичних завдань для KDE" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "Назва:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "Значення:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "Додати нову змінну" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "Завантажити змінні" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "Зберегти змінні" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "Спорожнити змінні" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "Ви справді бажаєте вилучити всі змінні?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "Підтвердження — Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "Завантаження файла" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "Вилучити результат" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"Не вдалося знайти компонент текстового редактора KDE.\n" +"Будь ласка, перевірте коректність встановлення KDE." + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "Редактор скриптів" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "Редактор скриптів — %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "Не знайдено" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "Досягнуто початку" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "Досягнуто кінця" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "Замінено %1 запис" +msgstr[1] "Замінено %1 записи" +msgstr[2] "Замінено %1 записів" +msgstr[3] "Замінено один запис" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "Команди" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "Результати" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "Помилки" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "Текст" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "Код LaTeX" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "Типовий модуль:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "" +"Якщо буде позначено цей пункт, Cantor автоматично переобчислюватиме всі " +"записи під поточним зміненим записом." + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "Автоматично переобчислювати записи" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "Типові параметри" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "Увімкнути верстання LaTeX" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "Увімкнути підсвічування синтаксису" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "Увімкнути доповнення" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "Увімкнути номери рядків" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "Увімкнути анімацію на робочому аркуші" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "Показати вигляд" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "Показати код" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "" +"Не вдалося показати файл Eps. Ймовірно, вам слід встановити додаткові " +"пакунки." + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "Не вдалося виконати запис до файла %1." + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "Не вдалося виконати запис до файла." + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "Помилка під час спроби зберегти файл %1" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" +"У режимі лише читання Cantor не може гарантувати коректних результатів " +"експортування %1" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "Помилка під час спроби завантаження таблиці стилів latex.xsl" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "Вибраний файл не є коректним файлом проекту Cantor." + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" +"Модуль %1 не знайдено. Ви не зможете редагувати аркуш та виконувати команди." + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "Запис команди" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "Текстовий запис" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Запис Markdown" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "Запис LaTeX" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "Зображення" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "Розрив сторінки" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "Вставити запис після" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "Вставити запис перед" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "Вставити запис LaTeX" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "&Колір тексту..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "Колір" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "П&ідсвічування тексту..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "&Шрифт" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "&Розмір шрифту" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "&Жирний" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "&Курсив" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "П&ідкреслений" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "&Закреслений" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "Вирівняти &ліворуч" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "Ліворуч" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "Вирівнювати по &центру" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "По центру" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "Вирівняти &праворуч" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "Праворуч" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "З&а обома краями" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "За шириною" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "Вилучити запис" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "Перетягнути запис" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "" +#~ "У вашій системі не встановлено модуля, за допомогою якого було створено " +#~ "цей файл. Потрібен модуль %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "Оприлюднити робочий аркуш" + +#~ msgid "Waiting for Image..." +#~ msgstr "Очікування на зображення…" + +#~ msgid "Insert" +#~ msgstr "Вставити" + +#~ msgid "Insert Before" +#~ msgstr "Вставити до" + +#~ msgid "%1: %2" +#~ msgstr "%1: %2" + +#~ msgid "cannot open file %1: Unknown MimeType" +#~ msgstr "Не вдалося відкрити файл %1: невідомий тип MIME" + +#~ msgid "*.tex|LaTeX Document" +#~ msgstr "*.tex|документ LaTeX" + +#~ msgid "*.cws|Cantor Worksheet" +#~ msgstr "*.cws|робочий аркуш Cantor" + +#~ msgid "Server for the Cantor R Backend" +#~ msgstr "Модуль для інструмента обробки R Cantor" + +#~ msgid "R Server" +#~ msgstr "Сервер R" + +#~ msgid "(C) 2009 Alexander Rieder" +#~ msgstr "© Alexander Rieder, 2009" + +#~ msgid "Usage: saveVariables file" +#~ msgstr "Використання: saveVariables файл" + +#~ msgid "Saving failed." +#~ msgstr "Спроба збереження зазнала невдачі." + +#~ msgid "Usage: loadVariables file" +#~ msgstr "Використання: loadVariables файл" + +#~ msgid "Loading failed." +#~ msgstr "Спроба завантаження завершилася невдало." + +#~ msgid "(C) 2009-2013 Alexander Rieder" +#~ msgstr "© Alexander Rieder, 2009–2013" + +#~ msgid "Path to python command" +#~ msgstr "Шлях до програми python" + +#~ msgid "Cantor Server for R" +#~ msgstr "Модуль Cantor для R" + +#~ msgid "Do you also want to export the images?" +#~ msgstr "Ви бажаєте, щоб програма експортувала і зображення?" + +#~ msgid "Path to python2 command:" +#~ msgstr "Шлях до інтерпретатора python2:" + +#~ msgid " Enable Variable Management" +#~ msgstr " Увімкнути керування змінними" + +#~ msgid "Could not start the server." +#~ msgstr "Не вдалося запустити сервер." + +#~ msgid "Pause Animation" +#~ msgstr "Призупинити анімацію" + +#~ msgid "Start Animation" +#~ msgstr "Почати анімацію" + +#~ msgid "Restart Animation" +#~ msgstr "Перезапустити анімацію" + +#~ msgid "Append Command Entry" +#~ msgstr "Долучити запис команди" + +#~ msgid "Append Text Entry" +#~ msgstr "Долучити текстовий запис" + +#~ msgid "Append Latex Entry" +#~ msgstr "Долучити запис LaTeX" + +#~ msgid "Append Image" +#~ msgstr "Долучити зображення" + +#~ msgid "Append Page Break" +#~ msgstr "Додати розрив сторінки" + +#~ msgid "Other" +#~ msgstr "Інше" + +#~ msgid "And %1 more..." +#~ msgstr "І ще %1..." + +#~ msgid "Main Toolbar" +#~ msgstr "Головна панель" + +#~ msgid "Completion Style:" +#~ msgstr "Режим доповнення:" + +#~ msgid "Popup" +#~ msgstr "Контекстне вікно" + +#~ msgid "The style used for Completion" +#~ msgstr "Режим, який буде використано для доповнення" + +#~ msgid "Path to the Scilab executable" +#~ msgstr "Шлях до виконуваного файла Scilab" + +#~ msgid "" +#~ "Scilab version of the master branch of the Scilab's repository is " +#~ "compatible" +#~ msgstr "" +#~ "Можна скористатися версією Scilab з основної гілки (master) сховища " +#~ "Scilab." + +#~ msgid "Insert Command Entry Before" +#~ msgstr "Вставити запис команди раніше" + +#~ msgid "Command Entry Before" +#~ msgstr "Запис команди вище" + +#~ msgid "GroupBox" +#~ msgstr "GroupBox" + +#~ msgid "This test requires a functioning %1 backend" +#~ msgstr "Для роботи цього тесту потрібен працездатний сервер %1" + +#~ msgid "Form" +#~ msgstr "Форма" + +#~ msgid "Help" +#~ msgstr "Довідка" + +#~ msgid "Show Help Panel" +#~ msgstr "Показати панель довідки" + +#~ msgid "Uploading successful" +#~ msgstr "Успішне вивантаження" + +#~ msgid "Error uploading File %1" +#~ msgstr "Помилка під час вивантаження файла %1" diff --git a/po/uk/docs/cantor/create-dlg.png b/po/uk/docs/cantor/create-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..258fa42ef3f53961dd0c6bc17d92009b57a0dbca GIT binary patch literal 8312 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 literal 0 HcmV?d00001 diff --git a/po/uk/docs/cantor/import-dlg.png b/po/uk/docs/cantor/import-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..ec36e49b63603312cb769e70c4d0cd6b05a03278 GIT binary patch literal 7155 zcmajkcTf{uqXuwVXrY(TqVxcQR6&qtD1!8kg(}iJB28)tRho!MuTrFgAkql|LY3YG zAyiQW5&}ri<$d4pyYt<-cji9x+h@=Iac0iU&Y9iWjWf{Gpr&M}Bp@K5eyFKtL_k0Y zy&jK|6JNK*jklZx1jGaeIwtDZm;Y}}P4WMD{1|^tITWuH_CLIez<(|ogN zp1!M-iL=kdUvtRBYiHr~a(?UP{MO6E{3U;1IUoHG(<02@_SK4hTr(=h8W#UHEZ)6t z-4fh2<5JAut_L{XQk+@og>l(|SvmGEWmvtBSf$EUgUSQ_O03R*(5u)ns>1%mr0T%* zFS!3^QgdKjjWw^w{o8?AJ=XMZk3Qq{TXr9};QpIs*OA44>O8VS{4YJnmdInv-apr@ z{%*iGJOTdyhW~f2uC6Z5&o3@6&d$zGuJh;5^>K7~cnyo$$6)^oW^WI(x4XCdd-wOw z-tV2?zkcrg{P9o!`uXGM*58$UMIH`iDHvbMUux^msCD@$wW<$s`;m#(cW zeY>{2IKRBO@crBT;{43NEX*t}%q}g=ew&?Mn3lzHU@^ zXMcCcbzkf2YVYsr=KiKQ?u=eg2gBsi&d7KCPznUiq?o z`Ep)aRat3CV(F)ng1p?U43)ID^uz>MXlTewUmX{}5ErL-b5lc8vj=LbD$0skveL5B zQeq;)0(`uD+*~}IH>Ek)^Eg1-te|WrTC>@U{p$_z%GXHG_&+xSF)=X_5y{^nA|@jv z1uy{sB#hKlbaZs&Fb4+CYEY8^!r$W(galkv z#NwjhIb{af&$V&zoZ$p$Bq=p}Z^89R!f71+9&zUhht8)cL?Z`{lFyEfx;G@As7?&C zAIi!DhX^^t1=$lQEaNC1l4>Qu9{Z}jK}3l@0A~f_M{}O4eYcR5T)an1_l5J%lGgb< z&osPFeBKE^a(U%)KyL`I`#No7fVETf1U(hxS*k9qM2A<8kEq`Lp6|Jdk6j`JTsZx4xSIY`w$+Pjmm1NH zUenVQuciDPuGO+nvVDH_ToU_Ws~6dxkwv~@S@J~1Dn%Kl-_4Z~;kgm$oR#tR&QUu( zog);(x1rB1ps6wbixxomjnkMjbdV>B_bmhJHA(cIt5X6phrOwo_cLhlOMr$^Zy@_{QqquRNeVU)FA1oy=f ziv!I-ft?aUfmUe?3h~CYa6+r+ePZ0gn!>UsJuh=?;;9qX#f1-En%*|wdj8mSr+uJD zwjZQNjPj0RpJecXji@fw6e!}PZ63Q-m|E`ZXj#@)=o-4HggG>84=AD(YkJQpC&SQi z51UNS%AmPB`H&K4zn4v;+O1KHXJXUuQ!2fa#p(@+$-;|C?$*tV?u6h1Pi&27@<%(Z zJb+6*&q-7q3rLLZ9@O2IxcQ9XaGTVlf;|*9yy>PV`kt3+$3?YyJd#Th<(}9^vdHlC z%pB6qJbk0)mm@_k0eT3MtRI>iyp~}$ zBo_myk4wS=;y^8eaHo)hltvYxAyzemHN|OtNPTx~%L2;c>yRg5s7?8GpEUYZ9+!~B zr!~E$D1o{+_N$~eW=4BQ;aSq?D+c}{C!vut{7=OzvbirhVHCD>p^xg2{akb9jZO%9 zW%_iob9gw5w_Oso$S}#h@p4{Sx{3C?Ql zHV>EF9+ICt6b z?cLXFeBg~x>9BB_gee+%-FrGPfTCUbbFMGRyBjMyM?ki^Py)Ce>%@95AdIf$2b}A> z7)J{8(hlnaYqr+e$6oxuGqnXNvF|D_MJi82M=w!+-eL(@UJ@jRq&P%sZoCCmd3bpK&egm0U75YVP5K&?A z1@1j{sG)15>%Mc6G_@Ef7Pr8a^(%hJ;85r!AVnVE+%v0jwM=m*xLULdFdG=XieT7H~X*ytid7O-`mnEKSQ3b=+<1FgZD8wH9Qu_|--? zPeawQ&U8*R-c#sp0W%XkVmwMF^5hlDi(J1!C#usiJXN#&w9u9PIUkL&Q&zenU-!or zPX8+2-0>fzQOGm10p@tq0Y1p$oaNc_>gv|p819CU+aZPe%WB|!P@Wq^9STh5onr7^{-salAvrwd1C<-gn=v2g&Ry z6*wG_J=VS2EuDCI**{o0&K54+T7dur9*bu%NZ#o2(%n+w<^ess=syI8@^*tLZzK9T z>Jp?a&C9!xi=wlQs#d#pNB3Kx_NFT8a?j73-}XU2y92rM6e0;S`tUx-i!RT{WxZ?dF-c8Xda5f? zBt7#KJjyzRDBiEM57_EFW6;p9FuB2g=hVv3kh^Yo9OZM_rw8=h!R*vcBS-B8q<0-u zR~z3pd{a0W4lWi<&aTi&m{M(Ie%*6kg#yy{88;%&*wXC{+_+!UOU>`wfgEdH`73% z@8TSi!!ph{ePy1h(#5{KKxG9OcX=*m4OJ`Un_aI$ssG=O;B10c_7vc~#SS=e( zFiSf*bU7Pd#n}s>5r1tx`<)Euja+-PbgA7m?>V3R!CZ=*-u@j!g%>;OQygdSAf=ah zCK>l;MA#^W4XJYGMry2LAm@q`nJuQkd8we}$-6K7lH~|kBeP$o`>R{Us!os#=T`c$ zfK>~oBzMs|M^sh*{@HAQJEsOKN!6%F^3}%~2Z{97u#fGc^PW91>T5-=>~QhisH*{> z1v-YJJYp|8~tM36~3etTN^FbSz7jD5nu+IhnG&%f<#caGqSVj_XZ|m3te4cH} zR6t@2bhnmcnyZv6ZKU|rIM!)ZJc4eS@IgxH`a7E(h>|=67&j@Xoh*HCp<^#qPvGP6 zY2heUgTB>`I|gR_bfm6n4$6y@aNCN-sud%+5)B`PaFv+TDj&jvt9lI*H=V3;BoW;S zE+a%QL4y=;+OS{MZQI9+1FVL*j@JbbJKnsm->K~=R%smgB?q*3Z_~SZd?|2 zlg@flRxFe4QvBV+fcdca4oB8Ew?-3P_i{-sV^a<)Q`cJ+;{s0pks^wquPSeWALbc_ zuJ+w;dyzZ%WS4`;Cye6FS*_=|cy{0-?GrgE_Ec=)5%~=YfoGR#8w-@nv!1R>oc3B8 zN}DrIj(l-O75O$O8`spy9*NsIdhW%c%yy5F3m^04wt-Y>ir}mdxz_NPJ zVKKrOsK^?+kLC7HCKlX2}nLK-AK-b-4IJq;iO{yF&9oi);L-Zw2vUS70apJDvZH0Q}bLX z|N0GSddVMOguyT#Oa%m{%)aD(zyMIOhYwzeE*T5HcK0)kIJrMdr*!-#WfVeAx=I!n z4k!#P9v7!Ok1t{gzTjpL$1;P(YzRng)w*$qwNbg8VHOzgis~9(W_|FQy!EXj)&#FR z2vLklEw+O*Sa)BoqsG!*_aQ7qrDK!JM3qOTPxEJihSHgLD8YpkL57g5UU{=fG>lwb zQ-vm|rz|w6Ydu^J7KBPS5L;knc#{4e9`3KUu8e!X)=W7`P10qxuaQQZ9Wvw18$zkDr2Vzj|q)Q z?waww%n{Iv=ed5Jv5Q4@4SV7fk7ut4J*4F=YPStNvSwNi)FVB~fd8Fa@~a{UHw zk6ZA? zg@OwR%!nZ5v#)2lb_`b;y=4*tn#lRArfQIhz5(8k+B5aLjFQ>Et5@nPi=H&@-5mr) z(!~|3lkoDfZG=0XqGL7*4L&!or11(y&#>lsQbm-7{(~YyZCH;h(IAky9UM^htPD9{U_#y#FC!NJCj~jJT9s$#{I_Q;48m zbL{e)G&s)hZt&YzhgiRmof{<0m2q}U>>nPlSLKIt63N}%IE-|c8FuyMDD#(ge+=UT zOOX@_K0x|T^R5)+6IGzK^SB(hshJI#2M6E@0TpGzv&qCGEQj!I@!!gzkK5deH;!6q zJCU9m1S9mp3(9R2B_rO|d*wgkGS+pg7joS#?E{GZEbOL=Zc{53Nj`}5>BR-Fhu%8L z64O+X=Hp@Rdy~@PFmL$R{R}^a)tZePSMW>xd`x*KMz~}=!OfQ=#_m;T0f{QqMEzb8 z6f_SVJJ{VgmxkTpE4r2XCas$8HMxeu3@_(p=sPZIMIJT^XQO*-fl52?#R4veMQ&8y zqEfX5hhgL`TA7(XgphM`NyIVqcA(Kf@=5*=k*Z|GmQ3qt0eS`g2pne*n{uccqt+81 zNc<$Rgih)AJKQZpV&zmHbwySM;oI&0RR_q4`wfGl^Ma~WN_^AQ=hB~OIN|Y;Xn!@w zoiK-)*>@~UUnwPuOP^lUyZ*HC^F|2CFxJpVUIKSP89 z*i>2d$8f=I(I|UlZpgX2JI5fg?A7e?J9kdFkAr7&F}zghi-fDs7HDd;v`x;mi6`Hv zA!WSxqzIt+NbYRCv7warY5Hv;wuF5Fp`n46loz$^xseA#PFD%PdRWRf27L#QY!|6j zn?pjj$Kz=WxSI1`A&%OBdhS2xUlxC4vsu1z(7uaxMikEN=tlqKz8q2leE`^@2z5s3 z*nc9F_Sdpu5fn|6NHQ}_;2t2qi&;|htg$^MMK~imk4*k1s5JFHk5_;Y1Mt^-bjS)q`-#XPxCRryyooz6CGEM`Y)X1sls1z*L_+8zPC~F>9 zi(H!S0jx3S+OpI^+U@p=Pdi{^RhJ?oKdcR$@ctV^&SD5R#m7zI`p2Vwpve3+-NM{# zz2x(~Mblq@cJo`7AIfXj)_6g^iY{FH1apsxMx+D<(;uGex3B~Yfz#qJl6cs;QReTi zp$>HAXA{Wo1<*{}tZt|PeJ*KhXdq$=mB7PlX_AIE!V&&;&jGG2EL9It_B@Ipiw>A_ zJKg}YA7*2K`Jl5r#|f;lK%5zt=_K6*)>t8S*QX@qmP19p_yF*JK4uUBYEnR(eNTZ+ z@ziKa*c_Eibea@3#8_NA_$IHtb4GAv_TEJ#TNxE)o=_UL-sm(h zQERifP;Dfr!>}OeyNTr2M=b4+&VjZonwvYiSds*BrM@!Z? z?6Z0_4Gxygmj8e}uZ`E;Q~$-JZYotONA$9&h&L;Zt1q>6ejHmDnT(VZG>QFueSyuN z98wE-z0@>FbNh6oUNm__|$~xM^s8T~T@;&DbiB3_MzHEFTBKIl4+9)4P zUHBfuTjktep1YU&JR@VVHbzuLG4Bt!)lYs=5RSVQXI-)i&OFlQ<*twt8W99$?6n7 zn#oUPOFMDV=8bBfxg>x#KDH>!YZI-Vy5;Rz#SgNsoD?=k61^o08rSk5qi|9g+ji%9 z^aNf;DfXy1MQWQv4_v3}|4{O9O<2CpZQ3PKyS0Yi#~C?Jv1Tsx#Gqgc*RnU}@JUW7 z@_L2k*p%gyddP%^082zeb7YOU;_#BHmt}xK6wA_(R}P|Jg|lEH(BUl~lF54!JQCO5 z#INr;YeN==>9xAJr4IZo7)E2Q82&Us>CcoUtpG1{lBtw1T|KkgslRQu*Kf6ozbGXy zVyEmzPEXpccC;Ue?@j_jb9nE~bMoI?^<*#B;);HZAJrX^>NYn&HD>D4nt<_0=b`G# zRR+9UU8BCZwiaosP0*N1^v0Bu;Z}RoEM@a_41ACEnd0v{qR-^|Cem6>z1{~R`iW2z z32$Zxcm{3MyBZKVXmQ__acP>KIGV*cQgxu#G$$^$a-EGTOjC#{B!iDWqctyWi6-@f z>Rs|1^F4$L2ZmuzVNqj|SAj+b(r=_h5+Ze)24E=$9Cd}z zZg|C0KU)z?Q_5SK91Ro3f=&11ds@+XRcR0X#s0wXg67c7;STg-D)Yt*v4Qth1u3tf ztMzDekehG`PxA{gL7`2aO)HG1(EH*gV5q^+rs^I*|DBKAXorot(0h+Pz`KUQ4jX-; z_qbZo6HlKVCv{WNB%%|>V1Fp%eQ?o;j^o6x`f^S(M1UJ{nc%aDaV4QN^R-1Q8ZT;7`-#_I5vs;-FmOQzZyyV7>`m4hal3lNWW>U&Sv1B^@ zYtnL$&P)Dee|>{<=$FZyMy}CZS%pF@^%TF%ZT9+L(swYQ{-p;LSO$nU7{q!|Q=xaS zq{1)5i@x6*W=_Z4*aG&>w;4;2`*i!PkRI-ww>#|9HYKpwu;dtci{Phue*@b-r*}SD zHkF@h*-Iyt)zkKk<3fzyU_*O12djWAuV+M60k~epz-m4Ag?AG4M9b4QqqGlyuS9by zWx3m&AYOGOaQa1DiH#=(+c_j*ZpVxHSDNV;E7VGO!XRY@z@7r?6rKX?0Z`@s(WO#P zWI$#6lZ65a2MC=AQf|rKH`ojK8YfPk-btn^@NoI)VX7JsD3zd zeDglM$Sf0<+=f|aRGqlbU_u|y{#EWpMETP%JCaH)fZqTUAk09NEjove&Hp8(V=rn| zfQ9OQiH$P1i)J*u+`3yMRIq@O4(6gVokEvLo^TJa;!4L!SxyQsNKK)N(2Q@j=Q|nD zr_h9Hsm773k1{+|`dJ1t;UJ +ATEX"> + + +]> + + + +Підручник з &cantor; + + + Alexander Rieder alexanderrieder@gmail.com +ЮрійЧорноіван
    yurchor@ukr.net
    Переклад українською
    +
    + + +2009 +Alexander Rieder + +&FDLNotice; + +25 серпня 2016 року +Програми 16.12 + + +&cantor; — програма-оболонка, за допомогою якої ви можете працювати на зручних робочих аркушах з математичними пакунками вільного програмного забезпечення. + + + +KDE +kdeedu +математика +математика +Cantor +Julia +Lua +Maxima +Octave +Python +Qalculate +R +Sage +Scilab + + +
    + + +Вступ + +&cantor; — це програма, за допомогою якої ви зможете користуватися вашими улюбленими математичними програмами, не полишаючи зручного інтегрованого з &kde; інтерфейсу робочого аркуша. У програмі передбачено допоміжні діалогові вікна, призначені для виконання типових завдань, та можливість оприлюднення ваших робочих аркушів. + + + +Користування &cantor; + +Знімок вікна: +Ось знімок вікна &cantor; + + + + + + Знімок вікна + + + + + + + +Можливості &cantor; + + Робочий аркуш для виконання обчислень. + Перегляд результатів креслення на робочому аркуші. + Проста заснована на додатках побудова, що спрощує додавання різних модулів обробки даних + Інтеграція з системою отримання нових матеріалів для вивантаження і отримання прикладів робочих аркушів + Показ математичних формул за допомогою &latex;. + Прив’язане до модуля обробки даних підсвічування синтаксису. + Засновані на додатках допоміжні діалогові вікна для виконання типових дій (зокрема інтегрування функції або введення матриці). + + + + +Модулі обробки &cantor; +У &cantor; передбачено декілька можливих модулів обробки даних, якими ви можете скористатися. Вибір модуля залежить від завдань, які ви бажаєте виконати. +У поточній версії програми підтримуються такі модулі: + + Sage: + + Sage — це вільна система математичного програмного забезпечення з відкритим кодом, випущена за умов дотримання GPL. У ній поєднується потужність багатьох пакунків з відкритим програмним кодом та загальний заснований на Python інтерфейс. Докладніше про систему можна дізнатися за адресою http://sagemath.org. + + + + Maxima: + + Maxima — це система для роботи з символічними і числовими виразами, зокрема диференціювання, інтегрування, розкладу у ряди Тейлора, виконання перетворення Лапласа, розв’язання звичайних диференціальних рівнянь, роботи з поліномами, множинами, списками, векторами, матрицями і тензорами. За допомогою Maxima можна отримувати результати з високою точністю, оскільки програма використовує точні дроби і виконує обчислення з довільною визначеною точністю. Maxima здатна креслити графіки функцій та графічно відображати дані у двох та трьох вимірах. Докладніше про програму можна дізнатися за адресою http://maxima.sourceforge.net. + + + + R: + + R — це мова і середовище для статистичних обчислень та побудови графіків, подібна до мови і середовища S. У середовищі реалізовано широкий спектр статистичних та графічних методик (лінійне і нелінійне моделювання, класичні статистичні перевірки, аналіз часових послідовностей, класифікацію, групування тощо). Можливості середовища досить просто розширити. Мова S часто є основним рушієм у статистичних дослідженнях, R надає вам змогу виконувати подібні дослідження за допомогою вільного програмного забезпечення. Докладніше про мову і середовище можна дізнатися за адресою http://www.r-project.org. + + + + Julia: + + Julia — високорівнева високошвидкісна динамічна мова для виконання інженерних обчислень. Синтаксис мови подібний до синтаксису інших середовищ для виконання технічних обчислень. Передбачено гнучкий компілятор, виконання паралельних обчислень, визначення точності представлення чисел та бібліотеку із широким спектр математичних функцій. Докладнішу інформацію можна знайти на сторінці документації з Julia. + + + + &kalgebra;: + + &kalgebra; — це заснований на MathML калькулятор-інструмент побудови графіків, який є частиною освітнього модуля &kde;. Докладніше про програму можна дізнатися за адресою http://edu.root.ua/index.php/KAlgebra/. + + + + Qalculate!: + + Qalculate! — це не звичайна програмна реалізація найдешевшого з калькуляторів. Qalculate! намагається повністю використати чудовий інтерфейс, потужність та гнучкість сучасних комп’ютерів. Основну увагу у Qalculate! приділено зручності введення даних. Замість введення кожного числа у математичному виразі окремо ви можете безпосередньо вписати цілий вираз і пізніше внести до нього зміни. Обробка виразів є доволі гнучкою і поблажливою до помилок. Якщо ви введете щось неправильно, Qalculate! повідомить вам про це. Якщо звести вираз до числового результату не вдасться, програма не поверне повідомлення про помилку. Qalculate! максимально спростить вираз і повідомить вам відповідь. Окрім чисел та арифметичних операторів, у виразах можуть міститися будь-які комбінації змінних, одиниць та функцій. Докладніше про програму можна дізнатися за адресою http://qalculate.sourceforge.net/. + + + + Python2 і Python3: + + Python є доволі потужною мовою динамічного програмування, яка використовується у багатьох комплектах програм. Існує декілька пакунків Python для наукового програмування. + Python поширюється за умов дотримання ліцензії Python Software Foundation (сумісної з GPL). Докладніше про мову програмування можна дізнатися з офіційного сайта. + + Цим модулем додається пункт основного меню &cantor; Пакунок. Єдиним пунктом цього меню є ПакунокІмпортувати пакунок. За допомогою цього пункту можна імпортувати до робочого простору вказаний вами пакунок Python. + + + + + Scilab: + + Scilab є вільним програмним забезпеченням, працює на багатьох платформах. Це програмне забезпечення призначено для виконання обчислень і керується високорівневою мовою програмування. + Scilab поширюється за умов дотримання ліцензії CeCILL (сумісної з GPL). Докладніше про програму можна дізнатися за адресою http://www.scilab.org/. + + У вашій системі має бути встановлено Scilab версії 5.5 або новішої, щоб цим модулем можна було користуватися. + + + + + Octave: + + &GNU; Octave — високорівнева оболонка мови програмування, основним призначенням якої є обчислення. У оболонці передбачено зручний інтерфейс командного рядка для числового розв’язання лінійних і нелінійних задач, проведення інших числових експериментів. Мова програмування має високий рівень сумісності з мовою MATLAB. Докладніше про цю мову програмування можна дізнатися з цієї сторінки. + + + + Lua: + + Lua — проста і невибаглива до ресурсів скриптова мова програмування з простим процедурним синтаксисом. Для Lua створено декілька бібліотек для математичного і наукового програмування. + Докладніші відомості можна знайти на цій сторінці. + У цьому модулі реалізовано підтримку luajit 2. + + + + + + + +Робочий простір &cantor; + + + Знімок робочого простору &cantor; + + + + + + Знімок робочого простору &cantor; + + + + +Інтерфейс робочого аркуша &cantor; складається з трьох частин: + Панелі вкладок, за допомогою якої ви зможете перемикатися між робочими аркушами. + Панелі довідки, де буде показано довідку з команди, у відповідь на команду «?команда»; + Панель керування змінними, на якій буде показано список всіх доступних змінних поточного робочого аркуша. Панелі довідки та керування змінними буде показано як вкладки на бічній панелі вікна &cantor;. Керуванням змінними можна скористатися, лише якщо використовується один з таких модулів: Maxima (якщо увімкнено на сторінці Maxima вікна ПараметриНалаштувати &cantor;...), &kalgebra;, Octave, Python2, Python3, Qalculate та Scilab. + Сам робочий аркуш. + + + +Робочий аркуш +Робочий аркуш — це основна область для роботи у &cantor;. Тут ви вводитимете вирази, тут виконуватиме обчислення модуль обробки даних, тут він показуватиме вам результати. Перелік команд, які можна буде використати на робочому аркуші, залежатиме від вибраного модуля, отже вам слід ознайомитися з відповідною документацією (натискання кнопки «Показати довідку» відкриє відповідну сторінку довідки). Якщо ви знаєте назву команди, але потребуєте додаткової інформації щодо неї, ви можете ввести команду «? команда», щоб переглянути у правій частині робочого аркуша контекстну довідку. Якщо ви бажаєте переглянути приклади робочих аркушів, ви можете скористатися пунктом Отримати приклади робочих аркушів з меню «Файл» і отримати створені іншими користувачами робочі аркуші. +Для керування записами команд на робочому аркуші ви можете скористатися кнопками, які буде показано у правій частині робочого аркуша після наведення вказівника миші на поле запису. Для кожного з записів передбачено три основні дії: Обчислити запис для оновлення результату обчислень для запису, Перетягнути запис для пересування запису до іншого місця поточного робочого аркуша та Вилучити запис для вилучення запису з поточного робочого аркуша. +Змінити параметри шрифту та вирівнювання записів робочого аркуша можна за допомогою панелі інструментів, розташованої над робочим аркушем. + + Параметри + За допомогою меню Параметри ви можете змінити деякі з параметрів вигляду вашого поточного робочого аркуша. + + + Показ за допомогою &latex; + + За допомогою цього пункту можна змінити спосіб, у який вам буде показано результати. Якщо пункт буде позначено, результат буде показано за допомогою системи &latex;, тобто формули набудуть приємнішого вигляду. Наприклад, вираз 3*x^2*sqrt(2)*x+2/3 буде показано як + + + + 3*x^2*sqrt(2)*x+2/3 + + + + + + Підсвічування синтаксису + + Підсвічування синтаксису спрощує роботу з кодом. Програма підсвічуватиме ключові слова або відповідні дужки вказаним вами кольорами. + + + + Доповнення + + Якщо буде позначено це пункт, &cantor; показуватиме можливі варіанти завершення команди, яку ви вводите після натискання клавіші Tab. Якщо можливим буде лише один варіант, програма просто завершить введення вашої команди. + + + + Номери рядків + + За допомогою цього пункту можна визначити, чи буде показано перед кожним з виразів його номер, отже, наприклад, у Maxima ви зможете вказувати попередні результати за допомогою команди %O1. + + + + Анімувати робочий аркуш + + За допомогою цього пункту можна вмикати або вимикати анімаційний супровід змін на робочому аркуші. + + + + + + + +Допоміжні діалогові вікна +У &cantor; передбачено декілька допоміжних діалогових вікон для полегшення виконання деяких простих операцій. +Доступ до цих діалогових вікон можна отримати за допомогою пунктів головного меню програми. У кожного із модулів обробки власний набір допоміжних діалогових вікон. + +Діалогове вікно створення матриці + + Знімок діалогового вікна створення матриці у &cantor; + + + + + + Знімок діалогового вікна створення матриці у &cantor; + + + +За допомогою цього діалогового вікна можна вводити матриці. Ви можете визначити розмірності матриці і ввести її елементи. +Під час введення даних можна швидко пересуватися між комірками за допомогою натискання клавіші . + + +Діалогове вікно дій з матрицею + + Знімок діалогового вікна введення матриці &cantor; + + + + + + Знімок діалогового вікна введення матриці &cantor; + + + +За допомогою цього діалогового вікна можна ввести назву матриці для обчислення її власних векторів, власних значень або оберненої матриці. Типове значення (%) використовується для позначення попереднього результату обчислень або введення. + + +Діалогове вікно диференціювання + + Знімок діалогового вікна диференціювання &cantor; + + + + + + Знімок діалогового вікна диференціювання &cantor; + + + +За допомогою цього діалогового вікна можна ввести вираз для функції, яку слід продиференціювати, її змінну та порядок похідної. + + +Діалогове вікно інтегрування + + Знімок діалогового вікна інтегрування &cantor; + + + + + + Знімок діалогового вікна інтегрування &cantor; + + + +За допомогою цього діалогового вікна можна ввести вираз для функції, яку слід проінтегрувати, її змінну та межі інтегрування (для визначеного інтеграла). + + +Діалогове вікно розв’язування рівнянь + + Знімок діалогового вікна розв’язування рівнянь &cantor; + + + + + + Знімок діалогового вікна розв’язування рівнянь &cantor; + + + +За допомогою цього діалогового вікна можна вводити рівняння для розв’язування (кожне з рівнянь у окремому рядку) та змінні, значення яких слід визначити (відокремлені комами). + + +Діалогове вікно імпортування пакунків + + Знімок діалогового вікна імпортування пакунків &cantor; + + + + + + Знімок діалогового вікна імпортування пакунків &cantor; + + + +За допомогою цього діалогового вікна можна ввести назву пакунка, який слід імпортувати (наприклад, numpy для Python). + + +Діалогове вікно креслення + + Знімок діалогового вікна креслення &cantor; (вкладка «Функції») + + + + + + Знімок діалогового вікна креслення &cantor; (вкладка «Функції») + + + +Параметри у цьому діалоговому вікні поділено на дві групи за вкладками. За допомогою вкладки Функції можна вводити функції, графіки яких слід накреслити. +Щоб ввести нову функцію, натисніть кнопку Додати. Двічі клацніть на комірці Заголовок і введіть заголовок, потім двічі клацніть на комірці Вираз і введіть вираз функціональної залежності. + + Знімок діалогового вікна креслення &cantor; (вкладка «Параметри») + + + + + + Знімок діалогового вікна креслення &cantor; (вкладка «Параметри») + + + +За допомогою вкладки Параметри можна визначити параметри креслення та умовних позначень. Ви можете налаштувати майже усі параметри креслення, щоб отримати потрібний вам вигляд. + + +Діалогове вікно двовимірного креслення + + Знімок діалогового вікна плоского креслення &cantor; + + + + + + Знімок діалогового вікна плоского креслення &cantor; + + + +За допомогою цього діалогового вікна можна ввести вираз для функції, її змінну та вказати межі зміни цієї змінної. + + +Діалогове вікно тривимірного креслення + + Знімок діалогового вікна просторового креслення &cantor; + + + + + + Знімок діалогового вікна просторового креслення &cantor; + + + +За допомогою цього діалогового вікна можна ввести вираз для функції, її змінні та межі зміни кожної зі змінних. + + + + + +Довідка щодо команд + + +Головне вікно &cantor; + +У &cantor; передбачено типові пункти меню &kde;. Ознайомитися з їхнім призначенням можна за допомогою розділу, присвяченого меню підручника з основ роботи у &kde;. + +Нижче наведено список додаткових або спеціальних пунктів меню &cantor;. Будь ласка, зауважте, що деякі меню буде показано лише для модулів, у яких реалізовано відповідні можливості. + + +Меню «Файл» + + + + &Ctrl;N Файл Новий аркуш +Створює робочий аркуш з типовим модулем обробки команд. + + +Файл Новий аркуш Модуль +Створює робочий аркуш з вказаним модулем обробки команд. + + +Файл Отримати приклади робочих аркушів +Відкриває діалогове вікно для отримання прикладів, вивантажених іншими користувачами &cantor; за допомогою можливості отримання нових даних. + + +Файл Відкрити приклад +Відкриває діалогове вікно вибору прикладу для завантаження. Цей приклад має бути попередньо отримано за допомогою пункту меню Файл Отримати приклади робочих аркушів. + + +Файл Зберегти як простий текст +Надає користувачеві змогу зберегти поточний робочий аркуш як простий текстовий документ. + + +Файл Експортувати до LaTeX +Надає користувачеві змогу зберегти поточний робочий аркуш як документ &latex;. + + +Файл Оприлюднити робочий аркуш +Відкриває діалогове вікно оприлюднення вашого поточного робочого аркуша. За допомогою цього пункту ви можете надати ваш аркуш іншими користувачам &cantor; з використанням можливості отримання нових даних. + + +Файл Виконати скрипт +Надає змогу завантажити і виконати пакетні скрипти для поточного сервера виконання команд. + + + + + + + +Меню «Перегляд» + + + + &Ctrl;+ Перегляд Збільшити +Збільшує масштаб поточного робочого аркуша на 10%. + + + &Ctrl;- Перегляд Зменшити +Зменшує масштаб поточного робочого аркуша на 10%. + + +Перегляд Відкрити редактор скриптів +Відкриває вікно редактора пакетних скриптів для поточного сервера обробки команд. + + +Перегляд Панелі Довідка +Вмикає або вимикає видимість вкладки бічної панелі Довідка. + + +Перегляд Панелі Керування змінними +Вмикає або вимикає видимість вкладки бічної панелі Керування змінними. + + + + + + +Меню «Аркуш» + + + +Аркуш Виконати обчислення на аркуші +Виконує обчислення за всіма командами робочого аркуша. + + + &Shift;&Enter; Аркуш Обчислити запис +Виконує обчислення за поточним записом команди. + + + &Ctrl;&Enter; Аркуш Вставити запис команди +Вставляє нову команду під поточним розташуванням курсора. + + +Аркуш Вставити текстовий запис +Вставляє новий текстовий запис під поточним розташуванням курсора. + + +Аркуш Вставити запис LaTeX +Вставляє новий запис LaTeX під поточним розташуванням курсора. + + +Аркуш Вставити розрив сторінки +Додає у документ розрив сторінки під поточним розташуванням курсора. + + + &Shift;Del Аркуш Вилучити поточний запис +Вилучає поточний запис з робочого аркуша. + + + + + + +Меню «Лінійна алгебра» + + + +Лінійна алгебра Створити матрицю +Відкриває допоміжне діалогове вікно створення матриці. + + +Лінійна алгебра Обчислити власні значення +Відкриває допоміжне діалогове вікно введення назви матриці для обчислення власних значень та кратностей власних значень у відповідному порядку. + + +Лінійна алгебра Обчислити власні вектори +Відкриває допоміжне діалогове вікно введення назви матриці для обчислення власних значень, кратностей власних значень та власних векторів у відповідному порядку. + + +Лінійна алгебра Знайти обернену матрицю +Відкриває допоміжне діалогове вікно введення назви матриці для знаходження оберненої до неї матриці. + + + + + + +Меню «Обчислення» + + + +Обчислення Продиференціювати +Відкриває діалогове вікно параметрів диференціювання. + + +Обчислення Інтегрувати +Відкриває діалогове вікно параметрів інтегрування. + + +Обчислення Розв’язати рівняння +Відкриває діалогове вікно введення параметрів для розв’язування лінійних і нелінійних рівнянь. + + + + + + +Меню «Пакунок» + + + +Пакунок Імпортувати пакунок +Відкриває діалогове вікно імпортування пакунків. + + + + + + +Меню «Креслення» + + + +Креслення Креслення +Відкриває діалогове вікно параметрів креслення. + + +Креслення Двовимірний графік +Відкриває діалогове вікно параметрів креслення. + + +Креслення Тривимірний графік +Відкриває діалогове вікно параметрів креслення. + + + + + + +Меню «Параметри» і «Довідка» +У &cantor; передбачено типові для &kde; пункти меню Параметри і Довідка. Щоб дізнатися більше, ознайомтеся з розділами щодо меню «Параметри» та меню «Довідка» підручника з основ роботи у &kde;. + + + + + + + +Запитання і відповіді + + + + У меню програми немає пункту Показ з використанням LaTeX + Не всі сервери підтримують подібний спосіб показу. У поточній версії передбачено підтримку виведення зображень &latex; для серверів Maxima, Qalculate! та Sage. + + + Мною було встановлено Sage/Maxima або іншу підтримувану комп’ютерну алгебру, але відповідного пункту у програмі так і не з’явилося. + + Можливо, &cantor; не вдалося правильно визначити адреси файлів програм. Відкрийте діалогове вікно ПараметриНалаштувати &cantor;... і належним чином змініть шлях до відповідної програми на сторінці модуля. + + + + Що за незрозуміла назва? Що спільного вона має з математикою? + &cantor; названо на честь німецького математика Георга Кантора, творця теорії множин. + + + + + + +Подяки і ліцензія + +&cantor; +Авторські права на програму належать Alexander Rieder alexanderrieder@gmail.com, 2009–2011. + +Авторські права на документацію належать Alexander Rieder alexanderrieder@gmail.com, 2009–2011. + +Переклад українською: Юрій Чорноіван yurchor@ukr.net +&underFDL; &underGPL; + +&documentation.index; +
    + + diff --git a/po/uk/docs/cantor/integrate-dlg.png b/po/uk/docs/cantor/integrate-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2e1912d4360578e5653c93dd1903ea846b5652 GIT binary patch literal 8957 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 literal 0 HcmV?d00001 diff --git a/po/uk/docs/cantor/matrix-dlg.png b/po/uk/docs/cantor/matrix-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa18c571e8953395fe1fff69895b6cbaa146f4a GIT binary patch literal 6900 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 literal 0 HcmV?d00001 diff --git a/po/uk/docs/cantor/plot-dlg1.png b/po/uk/docs/cantor/plot-dlg1.png new file mode 100644 index 0000000000000000000000000000000000000000..185570b782da5af7595d73bfff36d03e08c5152b GIT binary patch literal 14549 zcmZv@1z6MHA3sW`g5)S^kRBb1fHaI&Iz|i9Atfy(qiY}_AT0vYHAd$MX^`&j?mPYd z?*BgbKKDGYop_(~?(?bbvo9KI3QzH<@K8`to+>HIYN4Q@0g)eP9CRebW7Opx3JN-k zhRQoR5y!U4n$6ah(J>%gn4D#oV0VI?dX80146e zIVd(Z_V&{X4z>RWf(|+IPIcnWWll~@qAn$(ZY3{2c8Ysdzw~M4@Gn6L2teXh08ApF zY`t}3QZs;17Uq^--R%?f-)Xr`~KeqB;cpH<9Q()b5Z#yHBiZ>pI~s^2C- zSxfBSf4}{{sq%eA_4~5=_j$G41tc_b7u55nHHucXiZ->1mNkoKwMv$>OJ=oxF1;;V z(k@$gTQ;j*zNuZlpjWY~U9q5Dxv5jV3U6w}TsT5`eEbiO|L^kfuiX7B*Vk7!$bxJx zFV4@;&d<)y&(BX!j!%w{jt>tG_VZTV7gU zSz1|IKw@cO7K!DB`Ng?E3$rux|1dW*Jv%cwJ3WD{=Vqp6CdOta$EU_erpHGnMu*3L z4@`^C?k;6JEs?4 z&V=nm`u{V0PUP*K|E|0YP$@leDs50iWrA0IS1_&~DYk$>g_u>dB@0BMr!h4va&c9; zN*5bhhbi&*c=gp#q>*{}`}->wQ~4UFr181(eQZ|b!7@kX;K}z1#OkByGNqC;N)0l2 z23a!F*y(PN;%DnNC02O~Y)H{5kP9ShRw&LOu$E;lNQM-z%EjQza7T2Fd<@qTzJn=Z zb^S_YZ4pHI?+Wtxk@gP2PFx zbzt$@I$45|m->`%r}->uzGH2)rLXFt3oaJryEDcHoOu@wd;{EO-24wF5!M<}t6S2+ z#T%FnynXqr9km#3mc%}qg8AcIkuYa|T(oJ57N#~{jJJLGpS{frd9Zm>K0078IlYYT zNowpGE5{nERSiWN)PVbWr`rcM&l+S?T zFQ&?{UOQ&l@>M3N5@{?EB1%hySs*4CH~9F~YlbyBj$_wUz{pq}LYty1*PB0mUV}p< zo#j-MCR7(ke)mg9YtpB_jnFzFJJU-uV`l@$(e!n5rQ#WL+(m!_7I}daAy?^ORS^4S zu#uiH@M_WOSx5rHwWeU)p(e?+-8AsgtTM<9r(hg1(msVh1X`qS=j*STd%KeY2}%?^ zyAkER3bv(OH~9+QjL2$(wF-TWF*6?R!mGBYW!Ih!Or2m14W(3HW^8NCI4=J@&UL{! ztf_mr1oLu97;rY0LR^Gu)o@3&g{HA6?Jc*upOuL#%9%KuM3KA6)%n?`y@@zYC@49f zx4u0&QYrq^f$(svGs$NsP@zbjv})osn&fvjRc>C}?A;5$@=*fpep))YI}6vUDSVIO z)?$)(6^wgp?H|YC-L{DcEz>XfvS~wb>e}Qj%ahe~-$QuzFb_9qYHXg^I(%%Nu+gpa zt66Bdy$ZT$QpY&0ZwL)aTYbZ?3K|1GR2W>c;h~#R^bD_}+V3?7;*gU=go_2W>4W88 z2hz(%(S0Qh2aqyj1V`+Xe=76S&pfiE@eJ>J#KhQyLKO%o(1GVYzP5d*D+I44i9cZH z%Nh>IRsOOe-1lg5D2}#&T6%!_o7hkaekj>-m-&r7q~Xu0z)3kUn}uAe&?sPErV5#C<);_BEEud@CqlE2v@C6u2KVQI&aYQyH@*rWx5QOMHXN zF#g%!gv)!7GQm1ZEKVE%rd_dzB{n)I~^^Cxfp5qJXT8&8dT4h)SiMlFFt z7h3n>(AajwUAoSxt!Bo|%8^2I7K z7TvyQkM1u<1`P|fM!tKqGpf;cr;0@`9g1g=)Chp>rG+PUu+*5%29%nNtd}1@NhiZm zl))&=5c)zOp4oVMaR%Kwxz=t10=hw_59kAk-}PBI#{T+=?;<;sQwcoNog{rb+12lJ zZfymBR}R11CAx2j9D?doLj!INqG^wBTEjSNZWYKVWyF8t7Y0whjuIw$8LXjBPG7lROO_GE|RF z@^Mq6rQpTHL1&V8h>|Le{6o%X6gk3j+I6Hia3yff$hEQIEMVa`+Rm*kt3ETtYNI>(Gq)xqPvQt~ zcC05R6(^~#06lNHPA{eO%GcqxZ`t7I{c15+aZ%a!Z=#8%EpWS-19LxicOz!uX zHAn5FXE?^8nY&MX=ASayiJyh3#i>!u_6R?VUW%x@9{`-Q44{+9^O=+OD-JQMx@d7U z@m*;>MrdwpapaWy-5+Te8^sK>bY3qj^o_{1K19TQQek`y--}cxKX>kvG)8&bnSn9< ztjg)5=xa7=O~HpqT+YXqteesBlLMG+q8pBCMFUUgLOTRTGt^T%h`_woVltK&^?csc z<2y4wma~c#VsSXIoEn6+$6M`De)TFrkiR_@=C+Z>grDe=CAb6v?d4zjiV1+-LzW0= zZL{Uu)u`FllYC1xDN$#)zC174TICGV_Q>LpbW|)r`O(0*gsVR*xbYSdoLV;r=-86E zv3{+*f)#ppn|g}3-ciZt*r32R>slW3B|T$FF8B>J=p4;ACrWNfz-;c^XNMs3{2=VkNLUmICoWv@Cu2QTzNaL2UNoOL~PMve0BwUD@j_Q0OO<5+-% zAdjySZ8VMMs>cO^J^fTHG$cM`7ro>B(rkv9*WdBM9s*7Usw&bd?-lsv-z>ojMc?pt zUk&5u^0OB5R|;-#+8SRbS_X`qjHZA#9FIpA046b(qy4r zc!sW9Cnx5IUIXW1oiJ*O;AJ(nfC$W0DW2GfRo9FD3bu~ zDx2sh)v|>_ej*^tN_?L>pT!kt_yh3aLZLVV4ev}+F>j?s{!C`gUJP6Us9n1Z_G6nS ztZQB!EUE^(@O94>M@dsjwa_KArEy#$5)kC_g)$qLf`kB9L4)W4SCNcpMyAaB|s}plYpnaQd@viB*y-$v99s!bloOH z2Wp(}q7Qq1Xw=4?A8v@0tj%sg-YdS+Dq^sGp0;G!-ONeDn0*Klp^wRlS0I zICOxWHGsG!m7`R!lu@60$g%0+=}@Gw8{Dh~tn+%Z6Q+3`^O&eeC`GA+rJ@SPso~}@ z>gVXyr$|JT_fq==wP*KvNImtt=+gXb=K+lh8yiV6-@*XA_b$p#ETdsmo@)wyW74nh zy==PD<;-s*--u-~WzA@0KZ4goTpH?DaW38330aoG>IZ9mLis7k7lYC~ zEIY?BTajT7w@~_L(JyDD<3BbY?*HJI_AjjrJ`-N*E_#K=GKohzZm`!Zc+QwMx_37J zbCO}JcS(l#Jvt@Zvc}QOBrT*F+L#HH*fkgs(H7OwNv{wx7OFk?G2|AyC(lERm z$NoOBYZS3a+7RUwFA?@^vZQMdCgvaM2+Ku(Au$vJV$eC$t0(^iJQr@5mW4m5HJ z3wXGW^%MA@YV>90>U~R=X$~P`{lM^ZHY0Q!LkUu+>q&p55n>hEw1<$E8huyH{9(|N zRcwx==jHZfX?l%dSSFnn>!Zb2%B@(M%^c@1xtSir!_=ceFue3ExZbytD?KeXFc#i# zi}(k(hxv|kfg#^}V9LY@n?ebUQ#s|&HDhozc93X*-b&|i4N!(C^RX2`P1j0#B#I@j zdW`|pwWSL9V@+7qI*hq=L_c;V$;DRdNie~5mFv0c9OXm5Cj1H6k!a-6E_2Lr!mUI=?$NA#kF%hxFYu8y@8YNu17;;QoodRV{c*vK< zz_6^4EtQoXgJ(D|R~}fvMwsF;Rm_;ZN3MH~s{>XX0$7RT>MvULQmjxk?9DB@yY;`V zP+)iI|F+FwE`6UQe&!zc^)~p*C~yfL>P$=O+ZLPmwjEG$Bu~qWW&;doLd3?b4?}?P~M)v2CKf|Do+IfN?XtYd^1&>bYuDew7JlsNc9Mfrh0!#;`5SQ9;}CSHJlD730rgki zpIP)h&Tp82{X<*$Q-?vj9aG=5^V=%I$2+{{&%UV_86EDiJ?w20U(6B>uFZ>5FKdkf zV2STn z8{8rV40v%^$b+BGzRF`p$(wuSAI-rF@2v9(NdB$cVR%7!ExkR#FXkWpgZF-mBmc}U zqX4GPzP42UGv8?QlP?utMA0+$d#;q~i229eU%)etw*oz=Dg4H>KG-?E36y@gHS%&4 z;Eb+>QOljP$%-3JMoxdX4&5Z;fo!JVklSjC$7hg)X6a_|mGw7#8mZUzb)UUfWQ(^I zUhLurPCM>u9rzN_=92{RSm}-OU9zytN*X5}Dk$!(M(tt-3P=o)G(D%Ek4X1F>xR2W zVEHjbW`n-DHIRl}iDUNSplTy%q-mnESW?_E0_`;;5_;Cyr#X8OC=5dho2NdR*cybh z`++EV4Bn_U-G@>l^mu2XHZLb`qrrCEdHZZSYF(JBtdq%*`AnbliO zT&4l8$q4dZ6Iv9y4cun*J3-|>{30QawkzUK!iH|rmecp`H9$@YniI0)1eO#JA|TMZ zl0u0dI}hg~GRwPVjVkh*wdfG&gT33P&D{GxR+cocdge6~OYN$ly*Spt&e*X>UMASDSD1CC9C3RO?T;@ z77s|fj2Qe$4NHB7gZfz`f`a268)-o^Lq4yQDZlgCJLfPWN5_-SVb8?E^p4O)Y#(|P zujNqaV+7z>>yGvXncbypuHroeI{ybIex>T-qmc{kFuE;J1OVG$dGnF!7iKX4ha_kM zbjhTj?9`u%2A?r(dt!8XMXamPGu2mL8!d!^7I@|VhJQeBL!Iw2oo{|-74 zs6fNr^}zr71+2&kFU|RX3%q7tiT7ou$TfQ5Zm{g@Bo)4B=y?5iUSEIZp90s6Pln{% zD=ewdYC}!<>!E*KwG)UDmofy%3pl?zM+E%45;~~#pJt?U02A8MR?w>{ZqLy!5HHZS zE+6U<^Ph5g=D)&;fU&}Df18!{yu{t)SKE!tEJ@IGq=t)^4J7}q`0?UznIY2%|au>(^fivFdL3-b}_YjMD@U&W-!AxyI%Q=*6VZa{k~y(Q+d&@!|zg zVLJ5y_5U2;qjPt2_>X;Mz3&3Kv;*Sbjd=T)q_6p(!zX9eQ0k%ohvUMv@P8p4L?&)s z|JZ_rS_!5d{6`6~xQCmj7=Q&fIe4{%?!ObN&DG86v!h7`in1hBTbC2jmo& z&PBD2w-E}ho*gph?=5XboJRc5BxK;cmh*f5THhiCi*ow>X?fj)X8iB?-pp~E#kdW2 zl;B}E7ZWb_mt!Wv%eMPpdQDSb;U9)VtIW#i{&5dF|4*V-Qu>1MDA@o$G6~)L?n%_u ze}gUu+j@bls<9I1MnR3i-pefewP*Z&awmVc%8|_f(PZdz9k*(=f6PDR*Jzi=nF=r& zb&PIOU!D8WJkb7W*-CimsrNr|vJmLK)L)fih`|Heg8x>6fbSc$y(o`Q9#^fhpm;0m z(L`t;e>nnmq2;B|3Z|gCcBcuAFgW~6eAy#R+%O#)Q7i#Gl-w9Pr1g)=pz_?je4uJB zT0mHSHS|f7R|5gZX#SdhXMW88swFaE=zWd1x62};O9Tj5g_g2yuV1aCLm{>Ye#Rye z!(aDJlExi}B&OD_#0UMZch+yTZ;dm?y+7VhAfUDfGO8v+fKvawaf6KV9?(tnx?Jg+ zrLoDyqMWkb_2a)&a zTOR!F`~?|I?{sV;U?sNsZepGaxVr4<))M@+slx>mIC<-So^@pbOl&SacActfQ;)|- zwmFSJtc&!f5NWzy&lQ<&e=Z#_T`WcD`q4EA-3wjk-DgP-ph>pLJTJ~#M1fZ{GVVm% z>U2F`snjZPX^xgOmmZPN4amfL?d>qDHnY8W@fr;LPNbw5Zg1Oh6jTszM3oc%3VsiR^ zp|+(z$f%j%EkO5^pa*c65Gy7H?r{8|^QaDifvgUXkExCt7oOIPE)$MQ5w#)|MFX-MNY9uW$DboxR% zXi*{IPF#ph=TuTFX+E<49Sv!UR-!h#nliSayV4*2;)v$RisbGTdSMJN&m4EYQEuhW zOo&kn`;j@Qzgk6gKGS8J;D?V?+Ha0cC$1L#TyCdkpk&u})+v|`Rdyki6u9ck)3t9~ z+W=PP2v>FnR7Hm|3>CRpuCI~AmTVoZ{ct6ltdD!=i_Ez%Oj*QVT-@}l<&I>~^@l_hQe$CD8Pe|N7AU|97)gC|DRpis zxh0dV7|63ntws%rB%QR3*-GN`PZXlSvd(aVPNRm47=_w2mY3}YDt6k*Gq`npE1O3K zxBQnJ!fRtQpg*2q(zINT*s)je0A{b0m93S;*h(bhameneX8`knXLd*OnDs;fj14U0%OO# z|C&q}^8DFVNetOjP&(x?pB|9x7Z4FyvXAhn0FD_Bs8051L(di9-24!b`j@{9#u#Cako^8+gh zm&{h~=6lu$sWj0E{Buk;_9c82ILZ>}80CMR2Hpyx;%DT-ZBQD%{m;t{ydF>i)az(j0!2LS zxDPp-u69^6JynC=0Vs;d7Hz<}!ME6Z+Vz7cwhXJXv|+(s|q^2+07`qF((mK74vv+*M!y@j?2@ z!IR>7s-ygyfrAN-?$<{w3fAd0krlY`wO-koBJIehAJO1z;bydch719*JR}A*q^mN0C>zO|~&#n@v z6+gWT&}83<6~utAbrqQ`7E_$x;Q0383eNsX{$(%n!2Tj#;9U{WLo_xc@+O$>P&D$qIE_=_(eE1%IY1%es{5#qYTGs}n9Lsyb=o>)-3>O;36} znaxZq&NB(M$;tBy zCYWFY8d*bbR$AQcBEdZhuB&GQ!yYSb{l4B0hUGvwou|UPtM-i?V-xTn8cv%!{hPRX z;^P+(K4HK3GyIFtddW*n1^Kxe^kqnxy@3h%Wo8UzeI@~juF{aT_W6cA#4!inJFGAY z{T~)mX{gMV+aWU%F;T{yR{tQoCXXMZ001MhcX-QN3-JeQuO&oj zkdNNcx=%JOxo=-CZLO>QkcJt&_tq~3yC|G{9N^M2tbE%}uG;amcyR#)vXn8*!*OyJ zCA4;BVN6P>Q_`hn8{-B>!gNs2e|6n59$r%BeqlR2N{eZB&SQ~N%2Bu${LY#cL(|~g z$L&mEnCPQdYeVzB<^1)6dYCGNwMwU#deLU~UD*@X{j$wdM*+8Nl_pDGdPmLkU!k{* z2bb(OFA;OgZ)1c+zMhCi8x3C8Kb0M4=?eupR&;gvjCWMZkx;3cX!qat{j$Pz@uH4S z^zC7FWeI=rbr7d+El3w^LqYzI(C{bl#6Jt)bEA^lst4fSZ9P6w?GhrmsN{>g*8cH4 zze}mabo11k7~tlX9-eY|%1Zl|OE(60{aOcKVFrC2|9P!J`04i@Ge`^E%Z#J%JD$$M zvfI~2DIBY$xcbeloE*Myp6k*n^tm$LdjDLM&dqEOe-1g}{c^+jD3Wfi^M~#wofpg} zTP1zJmh!JfFyIU%^0`rSMKd@Y~Rmea6}(Y}c=A~hsTZvg`R*Zs5j{@FDah53c4Cc&ob z(Bm^o5BhuoBoyS^HsZ6V5KdET)2Jp&cx;Adp#&w0cV(nfSyQGNVhZo!#O`+=E*w83 zLt6F=sC#&+&ux-^jtA9_WMGwh18V}^ge?vrZIQbveOy5>u8 zlye>#;dn<`CJ@k!C>#^)h&$d93`C%|0#JPas~l0T zv}%c^P`2f6gRz>ZGQZX*p7|(}x{v@2Eb=}^!WWxwFI8CXD zUw3-f7;_SFXA`cgefTK~-E(#q<2Xhgh;>C0wr<`ilc4nL4bAVz?@lPf9KQ|_PRE`o zWFhQSY>FEXA!Z&b-9J^>7&2X&^#G zMcks=W+d4n=0oD;VaM_9<*G(O6@yYA(|5B3sz`tZ$qo$KSA%ttyW18t7t5;jv4z6A zM*&t78?%A8n7HBE6sgp~$P)7mG-EClpdlS&Nqmt@eCxUl0!ve$KO^ZFNX`9|M5v&k z@K;KU1zoZ5qJ8Hrbp4h{oe1a_ zQr>{gNrh*fk{bLHyJq_^oi-#LsA+Is=FCxB} zSq~7U4_#e((ezhK<#j51J!+YOZ}_Y&k5j(9P~DO4;(c}TbP)H}4;Zo7(krNtx27EP zM&X`M=;m4=`f<3R=UuG@jN!946o2lozs=uWL z8D>b|KU1eGo>*D9me(>Ks76X&BF{2Efig3x5$4C<2vo#BSlwk zpMiC90t@1IA21&+7GZqVE5ptFV2`rdSmkKz>||3LJLd!Bul%T1-z)#yJ7+=s$UB(3 zzc+dR?)31Fb_0QtKbVZQZ&+l;DRijtsdraEK)I1mK#`Ui-ZpZ&APsl0^47gmCxBbjhlHR)e%gBByU zE2(6NIM)#`_Z1==>c;Gadx#+2;t$ijV}9t!y%qT@#5_OiSkC|P6OGtCMv6)wX_}4j z{%)V32nUgj4a1*mCX*Xsc*Nlr;;ID=e&?JC+*xzUo%j<=VX^FAGU3Iqd5b2H0M8hL zUK7XM-n;ZRk?dSxs;K0%54E!T31wRQkq(|5%Z;P-c})cZU+|&tHd&XP2XJl3l$=i~ zOfJa=qA&0s3)&Lf_frtUlveJ}*4EsIdXnNuP(cNjk>#1QFO*+ezJL!?$JkgYz|IC! zc}n<5E0p0X>co>>(EXN!!#e41z3D%TPL2T=>+MkZl9c-w1bRTkjI*yRKdv_*E38&D z;<(u5N~~+d{;R&NoJ|98CEuxAxg59znU1x_F8{NC|E5>ks%74PBD47Zk;9T2+i|pp z@#FO^^ub;;ySvv}Q9SL&JKxae)OyCh6HK+xlC*RW;r|A=shbUWIJld4=jiC;9cHv2VCW-FeY=ZQxxIE`}*%R9O6 z`&Ty^fJHgJn)ZA&##WE>(PE4nx!x#=oIM!~$|;8eGf??oB!2mV^rWN*PSLpD~Nz+P61B+)eI7#oQC%Xz>{v-@c}d=DUSCK5!&(x0uIwG$=53eGS=ux#LT%X)3OxYC4So_>tylq3+>FEcp&n(_41)@eg-wWQJ6m&-b9#Eob?Vo`OWkk83f>&qn{(=jDF*FoNj z3`Cw=U0OsrK8Jq*nKaj(#p3SeO2J63uSP`TNxH{U%@$Y*Na{+Nn5kC!qO;g|4_>&Nq_UX&2@2%;An{=}lVHOv^bB{par!i^2G#D*&_Du3kHzn1b^>n$4Qk1h` z{U>X}77Xx%C^a+e89Xt@^e`3w*5=0?_;h(Ve;$OcUhzClYmpxxHk~WpM0%B`gy>{nTdXk-$Lh%ew4Jf z$S(*8@XxzMC;Ks+?MZh*>YOA}Ev8`7QWX^C3OKzskR&iN@(lTL{`&iDY*E z0ayo#p|(PmQIQu6$oZKRC$Kf$!7d-J!nzpDyPki#Z&|4fu4bscsI8@io?`n`k<)%C zIg=BqSWO{oZ7YClfd%I&hWqh&h20(U;m+>wbWqG7vVO_Az;*2ZJw2fu<)3W5_s;nY zoIuaa%-rmlp-jjUiB1l3KVlg!K@?WqUY;yT1X%ek=T$a0G}L^}Ds{kI-$#@HrvPvV z`?*IM+PTH0a&Gq#T8BqlD|^XN6OshQh=eyCvD_pL#QS*)q`y^Op>m5?&^;ub`>hb*vm z-HU1nT|mFbJLApGXxtTaVZBM-{^>FB-aTcSu~J@!a6aq}8%wi%?z;TAH)xf1pRZdQ z&Naw~df3_1qpDnn^h2FlSnP8CMRet(a`8I0VM(h# ztuJT!>yhMBtCW*V-u|nl5?}6(?IWOevh#-8>a`nxZgnZ&{kYPIurAhZvz%gs))A$H3#*lEAlhOSP zSo#2Q({s3kfP@u-CY;+~aWnd#$U_0IAb<>`fIy!t&hhSzU3d8B!xp-btey;G$O(C( zWwB)g5Z`%r=t`P~DD7Oh(}?bqv#6&xM(<_wm>aUl-jI3G?vqF-6HJ z=V5x-AyzlN2?>TyLe=*UK|qy_Ooj($!wni7R*!}|G`zjmPfB7&JS3BToI|4Nq#Lsz zLHt=A-$XGFXpB1*;>PE`a#Ze!7X$t|YX#d)^dc35EuJ#&bkA&Y4_A0cG}-c4k0j)A z_We!Ku+SMEF;`?77t6K?i+QY7W+-;UG492EU1zwrsdL)QIEYg^igRZ)qCdeXL$ zij2gFKWl$*Z0R?$okO1`B;?9yp>J#C2JO5h<-D21IK~teof*75z9S}_`^KhTunGs# zkA*)1ry8M~vC(Q165k9jPrm;G?62p41eX7Sw40b93AH1|yX&f-M()2~G{c<6RWBDB zp@q?n+ut5$A+KMq(wJDEqM1y_W>IH0`bm^6=cf)Yg`QT$-%|s_!*oC893^}khCtRo z_yrX5QVgyi_%|Dvke;5Bn%L}j2@nMASAJmN+-&EQLW6AM8&Q%+g%mroR+jGOQXJw=20~D&$XKdLgDU7re*?YxLd} z%x+6)Dl6(eH54Dmv<WhP0eFqJ~3ZmzJv)QFHmIW0~P9d-=gyE6p)DW)bkJ# z8sYKeIr$E2<^o`G&Zdo>wKO}EiSIHglE;?o$1T>hdMcFwn{x0NDp)T->l_=M_l4R= zv*}KC4*nkn=qa69zjhi$Uo2_eH}_6yRspIDPsUMaBCBL$g}h%o7V*Y|j;Mpr>bi5bz_4 z93%MGSRT&LO**MTaUBkGJ%E8hv4?SM*LAcw5T(kKS4>8Qr!!Ecl*Rgojwv7au(uNlUQt;KMX{z1qI%Nd~cgz}qde_|T7O!bTCHpE6Gynepcn0*yNf zA69RwGC)uATIiP)WEj(gf+B*_(!B5q#MaDcDKt1JRU}^m2e5-_y1*`P&>HG(W^VFc zUPlH0vc0QFx9g2FkeG>k4$`TJplj}p`soZ*?t>%%Sb)kVNia5V&A&}iz&3U|v!j8K T?$F-f|70o2smYc}n+E@1)Qqwu literal 0 HcmV?d00001 diff --git a/po/uk/docs/cantor/plot-dlg2.png b/po/uk/docs/cantor/plot-dlg2.png new file mode 100644 index 0000000000000000000000000000000000000000..bc88a859d8adf99db17c2bd76ea2e5dc7989dbd6 GIT binary patch literal 16581 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 vxD%q5>}~*^U(hS%7p2C literal 0 HcmV?d00001 diff --git a/po/uk/docs/cantor/screenshot.png b/po/uk/docs/cantor/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ad85ff2f0b015162cab766cae946d4d2ec66e577 GIT binary patch literal 65514 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 literal 0 HcmV?d00001 diff --git a/po/uk/docs/cantor/solve-equations-dlg.png b/po/uk/docs/cantor/solve-equations-dlg.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8d9717599d0c129bb1e469666ff3dbc56d50a3 GIT binary patch literal 7976 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, 2010. +# Lie Ex , 2010. +# Feng Chao , 2011, 2013, 2014. +# Berry Wang , 2012, 2014. +# Weng Xuetian , 2013. +msgid "" +msgstr "" +"Project-Id-Version: kdeorg\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-11-12 09:27\n" +"Last-Translator: guoyunhe \n" +"Language-Team: Chinese Simplified\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: crowdin.com\n" +"X-Crowdin-Project: kdeorg\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: /kf5-stable/messages/kdeedu/cantor.pot\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "KDE 中国" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "kde-china@kde.org" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "暂停" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "开始" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "停止" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "保存结果" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "高级绘图" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "绘图" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "表达式:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "其它选项:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "绘制(&P)" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "选项启用" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "计算(&C)" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "微分" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "变量:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "时间:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "包(&P)" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "导入包" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "包:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "积分" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "下限:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "上限:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "定积分" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "线性代数(&L)" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "创建矩阵" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "列:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "行:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "计算特征值" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "矩阵:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "计算特征向量" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "逆矩阵" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "二维图" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "变量" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "名称" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "最小值:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "最大值:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "三维图" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "第一个变量" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "第二个变量" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "运行脚本" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "求解方程式" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "等式:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "变量:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    推荐版本:%4

    %2

    查看 %3 了解更多信息
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "选择要使用的后端:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "将此设为默认后端" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia 是一种用于科学计算的高级,高性能动态编程语言,其语法类似于其" +"他科学计算环境。它提供了复杂的编译器,分布式并行执行,数值精度和广泛的数学函" +"数库。

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Julia 原生 REPL 路径" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "将绘图整合到工作表" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia 脚本文件 (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Julia REPL 的路径:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "在工作表中集成绘图 (更改后启动新会话)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "内联绘图中间格式:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "会话开始前自动运行的脚本" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "错误:%1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "自动运行的脚本" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua 是一种快速而轻量的脚本语言,拥有简单的过程语法。Lua 中有几个针对数学和" +"科学的库。

    此后端支持 luajit 2。

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "luajit 命令的路径" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua 脚本文件 (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "luajit 命令的路径:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima 是一套用于操作符号与算术的系统,囊括的功能包括微分、积分、泰勒表达式、" +"拉普拉斯转换、常微分方程式、线性方程式系统、多项式、集合、列表、向量、矩阵、" +"张量等等。Maxima 采用精确的分数、整数与浮点数来提供高精度的运算结果,并且可用" +"于绘制函数的二维或三维图形。" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima 可执行文件路径" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "开启变量管理" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "错误:太多 */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "错误:太多 /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "错误: ; 之前应该有 \";" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima 批处理文件 (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "启动 Maxima 失败" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima 已崩溃。正在重启..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima 在短时间内连续崩溃了两次。已停止启动尝试" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "错误 - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "函数" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima 的路径:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "在工作表中整合绘图" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "让 Cantor 跟踪变量的创建和销毁" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave 是一个高级语言,主要为数字计算而设计。
    提供了一个方便的命令行" +"界面,并使用几乎与Matlab兼容的语言,以求解线性或非线性问题的数值解与进行其他" +"数学实验" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave 可执行文件路径" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave 脚本文件 (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "语法错误" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave 的路径:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python 脚本文件 (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python 是一个非常强大的动态编程语言,适用领域非常广泛。科学计算方面也有多" +"个包支持。

    该后端支持 Python 2 。

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python 是一个非常强大的动态编程语言,适用领域非常广泛。科学计算方面也有多" +"个包支持。

    该后端支持 Python 3 。

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor - 绘图对话框" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "函数" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "标题" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "表达式" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "添加" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "删除" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "清除列表" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "变量 X" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "样式" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "线条" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "点" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "点线" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "立方体数" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "直方图" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "步" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "K线" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "点" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "平滑" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "无" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "单调性" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "三次自然曲线" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "贝塞尔" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "贝塞尔(单调的)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "函数范围" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X 范围" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "采样率(&M)" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "步长(&Z)" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "选项" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "绘图标题" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X-轴标签" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y-轴标签" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "图例位置" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "隐藏图例" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "左上" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "右上" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "左下" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "右下" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "下方" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "外部" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "显示网格" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "显示完整边界" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "使用颜色" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "显示内联" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "对数刻度 x 的比例" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "对数刻度 y 的比例" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "文件选项" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "保存绘图到文件" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "文件类型" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "根据文件名检测" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! 不是您通常意义上最廉价计算器的重复。Qalculate! 的目的是充分利用现" +"代计算机优秀的界 面、力量与灵活性。Qalculate! 关注的中心是表达 式条目,您可以" +"直接写出整个表达式而稍后再改动 它,而非分开地输入数学表达式中的每个数字。表达" +"式的解释是灵活的且容许错误,并且如果您做出 一些错事,Qalculate! 会告诉您。不" +"能完全解出的表达式毕竟不是错误。Qalculate! 会尽可能地简化 并以一个表达式回" +"答。不仅是数字与算术运算符,表达式会包含变量、单位与函数的任何组合。" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"是否与如何自动转换单位。若为真,转换为最适合的国际单位制(单位总数最少)。" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "三角函数的默认角度单位。" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "被解析且所求的数的底数。" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "是否简化或因式分解求出的结果。" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "如果有理数会以小数点显示,例如一个分数,或 两者兼有。" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"用三个点表示一列循环数字,而非舍入 (例如 2/3 显示为 0.666666... 而非 " +"0.666667)。" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"全部使用十进制的国际单位制词头。若为假,将不自动使用 不是千的倍数的词头 (厘、" +"分、十、百)。" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "若为真,将使用负指数而非分式 (例如 5/x^2 会变成 5*x^-2)。" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "数值显示。" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "若为真,绘图将在工作表中显示。否则他们出现在一个单独的窗口。" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "绘图中是否使用颜色。" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "是否绘制网格。" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "是否在绘图周围绘制完整边界。" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "线条宽度,用像素值表示。" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "绘图时使用的插值步数。" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "平滑绘图模式。" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "绘图风格。" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "绘图图例的位置。" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate! 报告它不能打印。gnuplot 安装了吗?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "缺少 %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 必须是一个数字。" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 必须是一个整数。" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 必须是一个布尔型。" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "%1 的 %2 选项无效" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "在一个绘图命令中找到多个表达式( %1 与 %2 )。" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "错误" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "警告" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "不存在指定名字的函数、变量或单位。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "函数:%1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "绘图界面" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "内嵌或在分别在窗口中绘制一个或更多函数。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "表达式" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "选项" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "值" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "整数" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "逻辑" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "数字" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "默认: %1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "函数名" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "标题标签" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "x-轴标签" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "y-轴标签" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"绘图要保存到的图像。若为空则在屏幕上的窗口显示。若 inline=true (内嵌为真)则" +"显示图像而无视这个选项。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "要保存的图像类型。自动(auto)、png、ps、eps、latex、svg、fig 之一。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "为彩色绘图设为真,为单色设为假。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "x 轴最小值。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "x 轴最大值。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "x 轴是否使用对数刻度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "y 轴是否使用对数刻度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "x 轴对数刻度的底数。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "y 轴对数刻度的底数。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "是否在绘图中显示网格。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "边界是否要在绘图的所有边(不只是轴)。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "线宽。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "" +"绘图图例所放的地方。none、top_left、top_right、bottom_left、bottom_right、" +"below、outside 中的一个" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "平滑绘图。none、unique、csplines、bezier、sbezier 中选一个" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"绘制样式。lines、points、points_lines、boxes、histogram、steps、" +"candlesticks、dots 中的一个" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "在第二个 x 轴上用刻度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "在第二个 y 轴上用刻度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "绘图是画在内部,而非一个新的窗口。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "两个插值点间的距离。另见步。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "插值点的数量。另见步。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "x 变量的名字。这必须是一个未知变量。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "保存变量为文件" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "保存所有当前定义了的变量为文件。它们可以用 %1 重载。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "文件" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "file:要保存到的文件" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "从一个文件载入变量" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "从之前由 %1 创建的文件中载入变量。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "file:要加载的文件" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "常规" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "数字基:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "分式格式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "十进制" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "精确" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "分数" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "结合" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "数值显示:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "纯数值" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "科学" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "精度" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "显示无穷数字列:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "启用" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "使用所有国际单位制词头:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "使用负指数:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "估值" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "转换成最佳的国际单位制单位:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "角度单位:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "弧度" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "角度" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "梯度" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "结构模式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "简化" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "因数分解" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "绘图" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "显示绘图内嵌:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "彩色绘图:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "显示网格:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "显示完整边界:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "线宽:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "采样率:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "平滑模式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "自然三次曲线样条" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "绘制样式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "步" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "图例位置:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R 是一种用于统计计算和图表绘制的语言环境,和 S 语言环境类似。
    它提供了多" +"种统计(如线性与非线性模型、传统统计测试、时间序列分析、分类和集群等)和绘图技" +"术,并且具备高扩展性。S 语言通常是一种用于研究统计方法的利器,而 R 语言则为人" +"们提供一个开放源码的学术选择。" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "打开文件 %1 出错" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R 脚本文件 (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "解析命令出错" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "双击这里打开文件选择对话框" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R 源文件(*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage 是一个在 GPL 自由软件授权协议下分发的数学软件。
    它整合了多种现有的同" +"类开源软件的杰出特色,并提供了通用的 Python 界面。" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage 可执行文件路径" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 的结果" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"最后的输出为:\n" +" %2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "" +"*.py|Python 脚本文件\n" +"*.sage|Sage 脚本文件" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "不支持 Sage %1.%2 版本。请更新您的安装到支持的版本,Cantor 才能工作。" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "计算此算式时 Sage 进程崩溃" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage 进程已崩溃" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "计算此算式时 Sage 进程退出" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage 进程已退出" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "启动 Sage 失败" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage 的路径:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    警告: 该后端只适用于 Scilab 5.5 或更新的版本

    Scilab 是免费软" +"件,跨平台数字计算包与一个高级的以数字为本的编程语言。

    Scilab 在 CeCILL 协" +"议下发布 (GPL 兼容)" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "scilab-adv-cli 命令的路径(警告:Scilab 版本必须不低于 5.4 版)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr "" +"*.sce|Scilab 脚本文件\n" +"*.sci|Scilab 函数文件" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "scilab-adv-cli 命令的路径:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "下载示例工作表" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "打开示例(&O)" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor 工作表 (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "打开文件" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    找不到后端

    \n" +"
    您可以尝试:\n" +"
    • 在配置对话框中更改设置;
    • 安装以下程序之一: %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "错误" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "会话 %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "找不到 Cantor 部件。" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "打开了多个未保存的工作表。是否要关闭它们?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "关闭 Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "当前项目已被修改。您想要保存它吗?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "保存项目" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "默认使用的后端" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "默认执行排版" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "默认执行语法加亮" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "默认启用补全" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "默认启用算式编号" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "工作表的更改默认用动画显示" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "自动重算现在列在下面的项目" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "后端 %1 未安装" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"%1 后端有些问题,\n" +"请检查您的配置,或安装所需的软件包。\n" +"目前您只能查看此工作表。" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "保存纯文本" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "导出到 LaTex 格式" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "计算工作表" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "使用 LaTeX 排版" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "语法加亮" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "自动补全" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "显示行号" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "动画的工作表" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "重启后端" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "计算条目" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "插入命令条目" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "插入文本条目" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, fuzzy, kde-format +#| msgid "Insert Command Entry" +msgid "Insert Markdown Entry" +msgstr "插入命令条目" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "插入 Latex 文本" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "插入分页" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "插入图像" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "删除当前项" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "显示 %1 帮助" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "显示脚本编辑器" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "显示补全" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantor 部件" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "另存为" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "保存" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "" + +#: cantor_part.cpp:562 +#, fuzzy, kde-format +#| msgid "Restart Backend" +msgid "Restart %1?" +msgstr "重启后端" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "中断" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "正在计算..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "就绪" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "会话错误:%1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "初始化完成" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "正在初始化..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "未命名" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "您想要将当前工作表上传到公共网页服务器上吗?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "问题 - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "此工作表尚未保存。您需要在上传前先保存它。" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "警告 - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "此后端不支持脚本" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "编辑(&E)" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "视图(&V)" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "工作表(&W)" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "文件(&F)" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "新建(&N)" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "面板" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "设置(&S)" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "" + +#: commandentry.cpp:115 +#, fuzzy, kde-format +#| msgid "Ready" +msgid "Red" +msgstr "就绪" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Dark Orange" +msgstr "X 范围" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Orange" +msgstr "X 范围" + +#: commandentry.cpp:121 +#, fuzzy, kde-format +#| msgid "X range" +msgid "Light Orange" +msgstr "X 范围" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "" + +#: commandentry.cpp:147 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "Text &Color..." +msgid "Text Color" +msgstr "文本颜色(&C)..." + +#: commandentry.cpp:158 +#, fuzzy, kde-format +#| msgctxt "@action" +#| msgid "&Font" +msgid "Font" +msgstr "字体(&F)" + +#: commandentry.cpp:161 +#, fuzzy, kde-format +#| msgctxt "@action boldify selected text" +#| msgid "&Bold" +msgid "Bold" +msgstr "粗体(&B)" + +#: commandentry.cpp:166 +#, fuzzy, kde-format +#| msgctxt "@action italicize selected text" +#| msgid "&Italic" +msgid "Italic" +msgstr "斜体(&I)" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "已中断" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "搜索栏" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "查找:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "下一个(&N)" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "上一个(&P)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "替换:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "替换(&R)" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "全部替换(&A)" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "搜索于:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "区分大小写(&M)" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "配置图像" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "右击这里插入图像" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "无法装入图片 %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "图像设置" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "打开" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "显示大小" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "宽度" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "高度" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "预览" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "打印大小" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "使用显示大小" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(自动)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "像素" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "打开图像文件" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "显示 LaTeX 代码" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "latex 可执行文件路径" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "dvips 可执行文件路径" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "名称" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "值" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "从:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "到:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "主标题" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "横坐标刻度" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "纵坐标刻度" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "绘图标题:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "数学应用程序的 KDE 前端" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "维护者
    Qt5/KF5 移植,Scilab 和 Python 后端" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "原作者
    维护者 (2009-2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra 后端" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave 后端" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "界面" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor 图标" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "使用后端 " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "要打开的文档。" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "无法打开文件 %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "---分页---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    KDE 的数学工作解决方案" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "名称:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "值:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "添加新变量" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "装入变量" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "保存变量" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "清除变量" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "您确认要删除全部变量吗?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "确认 - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "加载文件" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "删除结果" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"找不到 KDE 文本编辑器组件;\n" +"请检查您的 KDE 安装。" + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "脚本编辑器" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "脚本编辑器 - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "未找到" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "已到开头" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "已到末尾" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "替换 %1 个实例" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "命令" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "结果" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "错误" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "文本" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX 代码" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "默认后端:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "启用此项时,Cantor 会自动重新计算当前项下面的每个项目。" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "自动重新计算项" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "默认" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "启用 LaTex 排版" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "启用语法加亮" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "启用补全功能" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "启用行号" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "开启工作表动画" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "显示渲染图像" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "显示代码" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "无法渲染 Eps 文件。您可能还需要其它软件包" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "无法写入文件 %1。" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "无法写入文件。" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "保存文件 %1 出错" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "装载 latex.xsl 样式表时出错" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "所选的文件不是有效的 Cantor 项目文件。" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "命令条目" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "文本条目" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX 条目" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "图像" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "分页" + +#: worksheet.cpp:1251 +#, fuzzy, kde-format +#| msgid "Insert Text Entry" +msgid "Insert Entry After" +msgstr "插入文本条目" + +#: worksheet.cpp:1253 +#, fuzzy, kde-format +#| msgid "Insert Before" +msgid "Insert Entry Before" +msgstr "在其之前插入" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "插入 Latex 条目" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "文本颜色(&C)..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "颜色" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "文本加亮(&H)..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "字体(&F)" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "字体大小(&S)" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "粗体(&B)" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "斜体(&I)" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "下划线(&U)" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "删除线(&S)" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "左对齐(&L)" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "左对齐" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "居中对齐(&C)" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "居中对齐" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "右对齐(&R)" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "右对齐" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "两端对齐(&J)" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "两端对齐" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "删除条目" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "拖动项目" + +#~ msgid "Waiting for Image..." +#~ msgstr "等待图像..." + +#~ msgid "Publish Worksheet" +#~ msgstr "发布工作表" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "生成此文件的后端尚未安装,需要 %1" + +#~ msgid "Insert" +#~ msgstr "插入" diff --git a/po/zh_TW/cantor.po b/po/zh_TW/cantor.po new file mode 100644 index 0000000..0597de5 --- /dev/null +++ b/po/zh_TW/cantor.po @@ -0,0 +1,3139 @@ +# +# Franklin Weng , 2006-2015, 2017. +# Tsung-en Hsiao , 2015. +# Jeff Huang , 2016. +# pan93412 , 2018. +msgid "" +msgstr "" +"Project-Id-Version: mathematik\n" +"Report-Msgid-Bugs-To: http://bugs.kde.org\n" +"POT-Creation-Date: 2018-11-24 07:02+0100\n" +"PO-Revision-Date: 2018-12-02 23:45+0800\n" +"Last-Translator: pan93412 \n" +"Language-Team: Chinese \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Lokalize 2.0\n" + +#, kde-format +msgctxt "NAME OF TRANSLATORS" +msgid "Your names" +msgstr "Franklin Weng, Jeff Huang" + +#, kde-format +msgctxt "EMAIL OF TRANSLATORS" +msgid "Your emails" +msgstr "franklin@goodhorse.idv.tw, s8321414@gmail.com" + +#: animationresultitem.cpp:53 +#, kde-format +msgid "Pause" +msgstr "暫停" + +#: animationresultitem.cpp:56 +#, kde-format +msgid "Start" +msgstr "開始" + +#: animationresultitem.cpp:60 +#, kde-format +msgid "Stop" +msgstr "停止" + +#: animationresultitem.cpp:129 imageresultitem.cpp:85 resultitem.cpp:70 +#: textresultitem.cpp:150 +#, kde-format +msgid "Save result" +msgstr "儲存結果" + +#: assistants/advancedplot/advancedplotassistant.cpp:45 +#, kde-format +msgid "Advanced Plotting" +msgstr "進階繪製" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/advancedplot/advancedplotdialog.ui:24 +#: backends/qalculate/plotassistant/qalculateplotassistant.cpp:39 +#, kde-format +msgid "Plot" +msgstr "繪製" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/advancedplot/advancedplotdialog.ui:33 +#: assistants/differentiate/differentiatedlg.ui:19 +#: assistants/integrate/integratedlg.ui:19 assistants/plot2d/plot2ddlg.ui:19 +#: assistants/plot3d/plot3ddlg.ui:17 +#, kde-format +msgid "Expression:" +msgstr "表示式:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/advancedplot/advancedplotdialog.ui:45 +#, kde-format +msgid "Additional options:" +msgstr "額外選項:" + +#. i18n: ectx: Menu (Plot) +#: assistants/advancedplot/cantor_advancedplot_assistant.rc:4 +#: assistants/plot2d/cantor_plot2d_assistant.rc:4 +#: assistants/plot3d/cantor_plot3d_assistant.rc:4 +#: backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc:4 +#, kde-format +msgid "&Plot" +msgstr "繪製(&P)" + +#. i18n: ectx: property (title), widget (QGroupBox, directiveContainer) +#: assistants/advancedplot/directivecontainer.ui:14 +#, kde-format +msgid "Option active" +msgstr "選項啟動" + +#. i18n: ectx: Menu (calculate) +#: assistants/differentiate/cantor_differentiate_assistant.rc:4 +#: assistants/integrate/cantor_integrate_assistant.rc:4 +#: assistants/solve/cantor_solve_assistant.rc:4 +#, kde-format +msgid "&Calculate" +msgstr "計算(&C)" + +#: assistants/differentiate/differentiateassistant.cpp:44 +#, kde-format +msgid "Differentiate" +msgstr "微分" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/differentiate/differentiatedlg.ui:29 +#: assistants/integrate/integratedlg.ui:29 +#, kde-format +msgid "Variable:" +msgstr "變數:" + +#. i18n: ectx: property (text), widget (KLineEdit, xVarEdit) +#. i18n: ectx: property (text), widget (KLineEdit, variable) +#: assistants/differentiate/differentiatedlg.ui:36 +#: assistants/integrate/integratedlg.ui:36 +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:123 +#, kde-format +msgid "x" +msgstr "x" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/differentiate/differentiatedlg.ui:47 +#, kde-format +msgid "Times: " +msgstr "時間:" + +#. i18n: ectx: Menu (import_package) +#: assistants/importpackage/cantor_import_package_assistant.rc:4 +#, kde-format +msgid "&Package" +msgstr "套件(&P)" + +#: assistants/importpackage/importpackageassistant.cpp:44 +#, kde-format +msgid "Import Package" +msgstr "匯入套件" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/importpackage/importpackagedlg.ui:17 +#, kde-format +msgid "Package:" +msgstr "套件:" + +#: assistants/integrate/integrateassistant.cpp:44 +#, kde-format +msgid "Integrate" +msgstr "積分" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: assistants/integrate/integratedlg.ui:49 +#, kde-format +msgid "Lower limit:" +msgstr "下限:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: assistants/integrate/integratedlg.ui:63 +#, kde-format +msgid "Upper limit:" +msgstr "上限:" + +#. i18n: ectx: property (text), widget (QCheckBox, isDefinite) +#: assistants/integrate/integratedlg.ui:77 +#, kde-format +msgid "definite integral" +msgstr "定積分" + +#. i18n: ectx: Menu (linear_algebra) +#: assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc:4 +#: assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc:4 +#: assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc:4 +#: assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc:4 +#, kde-format +msgid "&Linear Algebra" +msgstr "線性代數(&L)" + +#: assistants/linearalgebra/creatematrix/creatematrixassistant.cpp:41 +#, kde-format +msgid "Create Matrix" +msgstr "建立矩陣" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:19 +#, kde-format +msgid "Columns:" +msgstr "欄:" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/creatematrix/creatematrixdlg.ui:37 +#, kde-format +msgid "Rows:" +msgstr "列:" + +#: assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvalues" +msgstr "計算特徵值" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui:17 +#: assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui:17 +#: assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui:17 +#, kde-format +msgid "Matrix:" +msgstr "矩陣:" + +#: assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp:43 +#, kde-format +msgid "Compute Eigenvectors" +msgstr "計算特徵向量" + +#: assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp:43 +#, kde-format +msgid "Invert Matrix" +msgstr "逆矩陣" + +#: assistants/plot2d/plot2dassistant.cpp:43 +#, kde-format +msgid "Plot 2D" +msgstr "繪製平面圖" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot2d/plot2ddlg.ui:31 +#, kde-format +msgid "Variable" +msgstr "變數" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: assistants/plot2d/plot2ddlg.ui:43 assistants/plot3d/plot3ddlg.ui:41 +#: assistants/plot3d/plot3ddlg.ui:86 +#, kde-format +msgid "Name" +msgstr "名稱" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: assistants/plot2d/plot2ddlg.ui:53 assistants/plot3d/plot3ddlg.ui:51 +#: assistants/plot3d/plot3ddlg.ui:96 +#, kde-format +msgid "Minimum:" +msgstr "最小值:" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: assistants/plot2d/plot2ddlg.ui:63 assistants/plot3d/plot3ddlg.ui:61 +#: assistants/plot3d/plot3ddlg.ui:106 +#, kde-format +msgid "Maximum:" +msgstr "最大值:" + +#: assistants/plot3d/plot3dassistant.cpp:43 +#, kde-format +msgid "Plot 3D" +msgstr "繪製立體圖" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: assistants/plot3d/plot3ddlg.ui:29 +#, kde-format +msgid "1st Variable" +msgstr "第 1 個變數" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: assistants/plot3d/plot3ddlg.ui:74 +#, kde-format +msgid "2nd Variable" +msgstr "第 2 個變數" + +#: assistants/runscript/runscriptassistant.cpp:43 +#: scripteditor/scripteditorwidget.cpp:54 +#, kde-format +msgid "Run Script" +msgstr "執行文稿" + +#: assistants/solve/solveassistant.cpp:43 +#, kde-format +msgid "Solve equations" +msgstr "解決方程式" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: assistants/solve/solvedlg.ui:19 +#, kde-format +msgid "Equations:" +msgstr "方程式:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: assistants/solve/solvedlg.ui:33 +#, kde-format +msgid "Variables:" +msgstr "變數:" + +#: backendchoosedialog.cpp:31 +#, kde-format +msgid "" +"

    %1

    Recommended version: %4

    %2

    See %3 for more information
    " +msgstr "" +"

    %1

    建議版本: %4

    %2

    詳情請" +"參考 %3
    " + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backendchooser.ui:29 +#, kde-format +msgid "Choose the Backend to use:" +msgstr "選擇要使用的後端介面:" + +#. i18n: ectx: property (text), widget (QCheckBox, makeDefault) +#: backendchooser.ui:59 +#, kde-format +msgid "Make this the default backend" +msgstr "將此後端程式設為預設" + +#: backends/julia/juliabackend.cpp:66 +#, kde-format +msgid "" +"

    Julia is a high-level, high-performance dynamic programming " +"language for technical computing, with syntax that is familiar to users of " +"other technical computing environments. It provides a sophisticated " +"compiler, distributed parallel execution, numerical accuracy, and an " +"extensive mathematical function library.

    " +msgstr "" +"

    Julia 是一個高階、高效能的動態程式, 其可用於科學計算,而語法則對其" +"他科學計算 環境的使用者來說相當友善。它提供了一個精密的 編譯器、分散且平行的" +"執行、精準的數據以及一份 可擴充的數學函數的函式庫。

    " + +#: backends/julia/juliabackend.cpp:79 +#, kde-format +msgctxt "" +"The url to the documentation of Julia, please check if there is a translated " +"version and use the correct url" +msgid "http://docs.julialang.org/en/latest/" +msgstr "http://docs.julialang.org/en/latest/" + +#. i18n: ectx: label, entry (replPath), group (JuliaBackend) +#: backends/julia/juliabackend.kcfg:10 +#, kde-format +msgid "Path to the Julia native REPL" +msgstr "Julia 原生 REPL 的路徑" + +#. i18n: ectx: label, entry (integratePlots), group (RBackend) +#. i18n: ectx: label, entry (integratePlots), group (MaximaBackend) +#. i18n: ectx: label, entry (integratePlots), group (ScilabBackend) +#. i18n: ectx: label, entry (integratePlots), group (JuliaBackend) +#. i18n: ectx: label, entry (integratePlots), group (OctaveBackend) +#. i18n: ectx: label, entry (integratePlots), group (Python2Backend) +#. i18n: ectx: label, entry (integratePlots), group (Python3Backend) +#: backends/julia/juliabackend.kcfg:16 backends/maxima/maximabackend.kcfg:14 +#: backends/octave/octavebackend.kcfg:14 backends/python2/python2backend.kcfg:9 +#: backends/python3/python3backend.kcfg:9 backends/R/rserver/rserver.kcfg:9 +#: backends/scilab/scilabbackend.kcfg:14 +#, kde-format +msgid "Integrate Plots into the Worksheet" +msgstr "將 Plots 整合進工作表" + +#: backends/julia/juliaextensions.cpp:213 +#, kde-format +msgid "Julia script file (*.jl)" +msgstr "Julia 指令碼檔案 (*.jl)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/julia/settings.ui:24 +#, kde-format +msgid "Path to Julia REPL:" +msgstr "Julia REPL 的路徑:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/julia/settings.ui:36 +#, kde-format +msgid "Integrate Plots in Worksheet (start a new session when changed)" +msgstr "在工作表中整合 Plots(當變更時啟動一個新的工作階段)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/julia/settings.ui:45 +#, kde-format +msgid "Inline Plots Intermediate Format:" +msgstr "內聯 Plots 中間格式:" + +#: backends/kalgebra/kalgebrabackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of KAlgebra, please check if there is a " +"translated version and use the correct url" +msgid "http://docs.kde.org/stable/en/kdeedu/kalgebra/" +msgstr "http://docs.kde.org/stable/en/kdeedu/kalgebra/" + +#. i18n: ectx: label, entry (autorunScripts), group (QalculateBackend) +#. i18n: ectx: label, entry (autorunScripts), group (RBackend) +#. i18n: ectx: label, entry (autorunScripts), group (MaximaBackend) +#. i18n: ectx: label, entry (autorunScripts), group (SageBackend) +#. i18n: ectx: label, entry (autorunScripts), group (ScilabBackend) +#. i18n: ectx: label, entry (autorunScripts), group (KAlgebraBackend) +#. i18n: ectx: label, entry (autorunScripts), group (OctaveBackend) +#. i18n: ectx: label, entry (autorunScripts), group (Python2Backend) +#. i18n: ectx: label, entry (autorunScripts), group (Python3Backend) +#. i18n: ectx: label, entry (autorunScripts), group (LuaBackend) +#: backends/kalgebra/kalgebrabackend.kcfg:9 backends/lua/luabackend.kcfg:14 +#: backends/maxima/maximabackend.kcfg:22 backends/octave/octavebackend.kcfg:18 +#: backends/python2/python2backend.kcfg:13 +#: backends/python3/python3backend.kcfg:13 +#: backends/qalculate/qalculatebackend.kcfg:130 +#: backends/R/rserver/rserver.kcfg:13 backends/sage/sagebackend.kcfg:14 +#: backends/scilab/scilabbackend.kcfg:18 +#, kde-format +msgid "List of scripts to autorun at the beginning of session" +msgstr "在工作階段開始時要自動執行的文稿" + +#: backends/kalgebra/kalgebraexpression.cpp:56 +#, kde-format +msgid "Error: %1" +msgstr "錯誤:%1" + +#: backends/kalgebra/kalgebrasyntaxhelpobject.cpp:39 +#, kde-format +msgid "

    %1: %2

    " +msgstr "

    %1: %2

    " + +#. i18n: ectx: property (title), widget (QGroupBox, kcfg_scriptGroup) +#: backends/kalgebra/settings.ui:17 backends/lua/settings.ui:31 +#: backends/maxima/settings.ui:48 backends/octave/settings.ui:38 +#: backends/python/settings.ui:24 backends/qalculate/settings.ui:183 +#: backends/R/settings.ui:24 backends/sage/settings.ui:31 +#: backends/scilab/settings.ui:38 +#, kde-format +msgid "Scripts to autorun" +msgstr "要自動執行的文稿" + +#: backends/lua/luabackend.cpp:68 +#, kde-format +msgctxt "Lua official documentation" +msgid "http://www.lua.org/docs.html" +msgstr "http://www.lua.org/docs.html" + +#: backends/lua/luabackend.cpp:73 +#, kde-format +msgid "" +"

    Lua is a fast and lightweight scripting language, with a simple " +"procedural syntax. There are several libraries in Lua aimed at math and " +"science.

    This backend supports luajit 2.

    " +msgstr "" +"

    Lua 是一套快且輕量的文稿語言,程序的語法較簡單。在 Lua 中有一些關於數學與" +"科學的函式庫。

    這個後端介面支援 luajit 2。

    " + +#. i18n: ectx: label, entry (Path), group (LuaBackend) +#: backends/lua/luabackend.kcfg:10 +#, kde-format +msgid "Path to luajit command" +msgstr "luajit 指令位置" + +#: backends/lua/luaextensions.cpp:36 +#, kde-format +msgid "Lua script file (*.lua)" +msgstr "Lua 文稿檔 (*.lua)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/lua/settings.ui:19 +#, kde-format +msgid "Path to luajit command:" +msgstr "luajit 指令位置:" + +#: backends/maxima/maximabackend.cpp:94 +#, kde-format +msgctxt "" +"the url to the documentation of Maxima, please check if there is a " +"translated version and use the correct url" +msgid "http://maxima.sourceforge.net/docs/manual/en/maxima.html" +msgstr "http://maxima.sourceforge.net/docs/manual/en/maxima.html" + +#: backends/maxima/maximabackend.cpp:112 +#, kde-format +msgid "" +"Maxima is a system for the manipulation of symbolic and numerical " +"expressions, including differentiation, integration, Taylor series, Laplace " +"transforms, ordinary differential equations, systems of linear equations, " +"polynomials, and sets, lists, vectors, matrices, and tensors. Maxima yields " +"high precision numeric results by using exact fractions, arbitrary precision " +"integers, and variable precision floating point numbers. Maxima can plot " +"functions and data in two and three dimensions. " +msgstr "" +"Maxima 是一套操作符號與數字表示式的系統,包括微分、積分、泰勒表示式、拉普拉斯" +"轉換(Laplace transform)、常微分方程式(ordinary differential equations)、" +"線性方程式系統、多項式與集合、列表、向量、矩陣、張量等等。Maxima 用精確的分" +"數、整數與浮點數提供高精確度的數字結果。Maxima 可以繪製二維或三維的圖形。" + +#. i18n: ectx: label, entry (Path), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:10 +#, kde-format +msgid "Path to the Maxima executable" +msgstr "Maxima 執行檔路徑" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_variableManagement) +#. i18n: ectx: label, entry (variableManagement), group (MaximaBackend) +#: backends/maxima/maximabackend.kcfg:18 backends/maxima/settings.ui:41 +#, kde-format +msgid "Enable Variable Management" +msgstr "開啟變數管理" + +#: backends/maxima/maximaexpression.cpp:116 +#, kde-format +msgid "Error: Too many */" +msgstr "錯誤:太多的 */" + +#: backends/maxima/maximaexpression.cpp:129 +#, kde-format +msgid "Error: Too many /*" +msgstr "錯誤:太多的 /*" + +#: backends/maxima/maximaexpression.cpp:135 +#, kde-format +msgid "Error: expected \" before ;" +msgstr "錯誤:在 ; 之前應有 \"" + +#: backends/maxima/maximaexpression.cpp:356 +#, kde-format +msgid "Waiting for the plot result" +msgstr "等待策劃結果" + +#: backends/maxima/maximaextensions.cpp:46 +#, kde-format +msgid "Maxima batch file (*.mac)" +msgstr "Maxima 批次檔 (*.mac)" + +#: backends/maxima/maximasession.cpp:189 +#, kde-format +msgid "Failed to start Maxima" +msgstr "啟動 Maxima 失敗。" + +#: backends/maxima/maximasession.cpp:292 +#, kde-format +msgid "Maxima crashed. restarting..." +msgstr "Maxima 發生錯誤。重新啟動中..." + +#: backends/maxima/maximasession.cpp:306 +#, kde-format +msgid "Maxima crashed twice within a short time. Stopping to try starting" +msgstr "Maxima 在短時間內發生錯誤兩次。將停止再次嘗試啟動" + +#: backends/maxima/maximasession.cpp:306 cantor_part.cpp:141 +#: cantor_part.cpp:939 worksheet.cpp:896 worksheet.cpp:921 worksheet.cpp:938 +#: worksheet.cpp:979 worksheet.cpp:991 +#, kde-format +msgid "Error - Cantor" +msgstr "錯誤 - Cantor" + +#: backends/maxima/maximavariablemodel.cpp:225 +#, kde-format +msgid "function" +msgstr "函數" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/maxima/settings.ui:19 +#, kde-format +msgid "Path to Maxima:" +msgstr "Maxima 的路徑:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_integratePlots) +#: backends/maxima/settings.ui:31 backends/octave/settings.ui:31 +#: backends/python/settings.ui:17 backends/R/settings.ui:17 +#: backends/scilab/settings.ui:31 +#, kde-format +msgid "Integrate Plots in Worksheet" +msgstr "在工作表中整合 Plots" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_variableManagement) +#: backends/maxima/settings.ui:38 +#, kde-format +msgid "Let Cantor follow the creation/destruction of variables" +msgstr "讓 Cantor 跟隨變數的建構/解構" + +#: backends/octave/octavebackend.cpp:71 +#, kde-format +msgctxt "" +"the url to the documentation of Octave, please check if there is a " +"translated version (currently Czech and Japanese) and use the correct url" +msgid "http://www.gnu.org/software/octave/doc/interpreter/" +msgstr "http://www.gnu.org/software/octave/doc/interpreter/" + +#: backends/octave/octavebackend.cpp:76 +#, kde-format +msgid "" +"GNU Octave is a high-level language, primarily intended for numerical " +"computations.
    It provides a convenient command line interface for " +"solving linear and nonlinear problems numerically, and for performing other " +"numerical experiments using a language that is mostly compatible with Matlab." +msgstr "" +"GNU Octave 是一種高階語言,主要是用於數學運算。
    它提供一個簡便的命令列介" +"面,可以解線性與非線性的問題,並且可以用一種與 Matlab 相容的語言執行一些數學" +"運算實驗。" + +#. i18n: ectx: label, entry (Path), group (OctaveBackend) +#: backends/octave/octavebackend.kcfg:10 +#, kde-format +msgid "Path to the Octave executable" +msgstr "Octave 執行檔路徑" + +#: backends/octave/octaveextensions.cpp:47 +#, kde-format +msgid "Octave script file (*.m)" +msgstr "Octave 文稿檔 (*.m)" + +#: backends/octave/octavesession.cpp:251 backends/sage/sageexpression.cpp:73 +#, kde-format +msgid "Syntax Error" +msgstr "語法錯誤" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/octave/settings.ui:19 +#, kde-format +msgid "Path to Octave:" +msgstr "Octave 的路徑:" + +#: backends/python/pythonextensions.cpp:184 +#, kde-format +msgid "Python script file (*.py)" +msgstr "Python 文稿檔 (*.py)" + +#: backends/python2/python2backend.cpp:58 +#, kde-format +msgctxt "the url to the documentation Python 2" +msgid "http://docs.python.org/2/" +msgstr "http://docs.python.org/2/" + +#: backends/python2/python2backend.cpp:63 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 2.

    " +msgstr "" +"

    Python 是一種強大的動態程式語言,用途非常廣泛。有一些科學程式使用的 " +"Python 套件。

    此後端介面支援 Python 2。

    " + +#: backends/python3/python3backend.cpp:51 +#, kde-format +msgctxt "the url to the documentation Python 3" +msgid "http://docs.python.org/3/" +msgstr "http://docs.python.org/3/" + +#: backends/python3/python3backend.cpp:56 +#, kde-format +msgid "" +"

    Python is a remarkably powerful dynamic programming language that is used " +"in a wide variety of application domains. There are several Python packages " +"to scientific programming.

    This backend supports Python 3.

    " +msgstr "" +"

    Python 是一種強大的動態程式語言,用途非常廣泛。有一些科學程式使用的 " +"Python 套件。

    此後端介面支援 Python 3。

    " + +#. i18n: ectx: property (windowTitle), widget (QWidget, QalculatePlotAssistantBase) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:14 +#, kde-format +msgid "Cantor - Plot Dialog" +msgstr "Cantor ─ 繪圖對話框" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:24 +#, kde-format +msgid "Functions" +msgstr "函數" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:40 +#, kde-format +msgid "Title" +msgstr "標題" + +#. i18n: ectx: property (text), widget (QTableWidget, functionTable) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:45 +#, kde-format +msgid "Expression" +msgstr "表示式" + +#. i18n: ectx: property (text), widget (QPushButton, addButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:72 +#, kde-format +msgid "Add" +msgstr "新增" + +#. i18n: ectx: property (text), widget (QPushButton, removeButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:82 +#, kde-format +msgid "Remove" +msgstr "移除" + +#. i18n: ectx: property (text), widget (QPushButton, clearButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:92 +#, kde-format +msgid "Clear List" +msgstr "清除清單" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:107 +#, kde-format +msgid "X variable" +msgstr "X 變數" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:134 +#, kde-format +msgid "Style" +msgstr "樣式" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:145 +#: backends/qalculate/settings.ui:509 +#, kde-format +msgid "Lines" +msgstr "線條" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:150 +#: backends/qalculate/settings.ui:514 +#, kde-format +msgid "Points" +msgstr "點" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:155 +#: backends/qalculate/settings.ui:519 +#, kde-format +msgid "Points and Lines" +msgstr "點與線" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:160 +#: backends/qalculate/settings.ui:524 +#, kde-format +msgid "Boxes" +msgstr "盒狀" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:165 +#: backends/qalculate/settings.ui:529 +#, kde-format +msgid "Histogram" +msgstr "直方圖" + +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:170 +#, kde-format +msgid "Steps" +msgstr "Steps" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:175 +#: backends/qalculate/settings.ui:539 +#, kde-format +msgid "Candlesticks" +msgstr "燭柱圖" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#. i18n: ectx: property (text), item, widget (KComboBox, styleBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:180 +#: backends/qalculate/settings.ui:544 +#, kde-format +msgid "Dots" +msgstr "圓點圖" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:192 +#, kde-format +msgid "Smoothing" +msgstr "平滑度" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:203 +#: backends/qalculate/settings.ui:95 backends/qalculate/settings.ui:249 +#: backends/qalculate/settings.ui:287 backends/qalculate/settings.ui:466 +#, kde-format +msgid "None" +msgstr "無" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:208 +#: backends/qalculate/settings.ui:471 +#, kde-format +msgid "Monotonic" +msgstr "單調" + +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:213 +#, kde-format +msgid "Natural Cubic Splines" +msgstr "自然曲線樣條" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:218 +#: backends/qalculate/settings.ui:481 +#, kde-format +msgid "Bezier" +msgstr "貝茲曲線" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#. i18n: ectx: property (text), item, widget (KComboBox, smoothingBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:223 +#: backends/qalculate/settings.ui:486 +#, kde-format +msgid "Bezier (monotonic)" +msgstr "貝茲曲線(單調)" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:233 +#, kde-format +msgid "Function Range" +msgstr "函數範圍" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:239 +#, kde-format +msgid "X range" +msgstr "X 範圍" + +#. i18n: ectx: property (text), widget (KLineEdit, xMinEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:254 +#, kde-format +msgid "0" +msgstr "0" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:261 +#, kde-format +msgid "-" +msgstr "-" + +#. i18n: ectx: property (text), widget (KLineEdit, xMaxEdit) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:274 +#, kde-format +msgid "10" +msgstr "10" + +#. i18n: ectx: property (text), widget (QRadioButton, stepsButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:283 +#, kde-format +msgid "Sa&mpling rate" +msgstr "取樣頻率(&M)" + +#. i18n: ectx: property (text), widget (QRadioButton, stepButton) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:293 +#, kde-format +msgid "Step si&ze" +msgstr "梯度大小(&Z)" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_4) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:324 +#, kde-format +msgid "Options" +msgstr "選項" + +#. i18n: ectx: property (text), widget (QLabel, label_19) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:332 +#, kde-format +msgid "Plot title" +msgstr "繪製標題" + +#. i18n: ectx: property (text), widget (QLabel, label_20) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:353 +#, kde-format +msgid "X-axis label" +msgstr "X 軸標籤" + +#. i18n: ectx: property (text), widget (QLabel, label_21) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:374 +#, kde-format +msgid "Y-axis label" +msgstr "Y 軸標籤" + +#. i18n: ectx: property (text), widget (QLabel, label_22) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:395 +#, kde-format +msgid "Legend position" +msgstr "圖例位置" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:403 +#: backends/qalculate/settings.ui:567 +#, kde-format +msgid "Hide legend" +msgstr "隱藏圖例" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:408 +#: backends/qalculate/settings.ui:572 +#, kde-format +msgid "Top-left" +msgstr "左上" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:413 +#: backends/qalculate/settings.ui:577 +#, kde-format +msgid "Top-right" +msgstr "右上" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:418 +#: backends/qalculate/settings.ui:582 +#, kde-format +msgid "Bottom-left" +msgstr "左下方" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:423 +#: backends/qalculate/settings.ui:587 +#, kde-format +msgid "Bottom-right" +msgstr "右下" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:428 +#: backends/qalculate/settings.ui:592 +#, kde-format +msgid "Below" +msgstr "下方" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotLegend) +#. i18n: ectx: property (text), item, widget (KComboBox, legendBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:433 +#: backends/qalculate/settings.ui:597 +#, kde-format +msgid "Outside" +msgstr "外側" + +#. i18n: ectx: property (text), widget (QCheckBox, gridCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:445 +#, kde-format +msgid "Display Grid" +msgstr "顯示格線" + +#. i18n: ectx: property (text), widget (QCheckBox, borderCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:452 +#, kde-format +msgid "Display full border" +msgstr "顯示完整邊框" + +#. i18n: ectx: property (text), widget (QCheckBox, colorCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:463 +#, kde-format +msgid "Use Colors" +msgstr "使用顏色" + +#. i18n: ectx: property (text), widget (QCheckBox, inlineCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:470 +#, kde-format +msgid "Display inline" +msgstr "內含顯示" + +#. i18n: ectx: property (text), widget (QCheckBox, xLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:481 +#, kde-format +msgid "Logarithmic x scale" +msgstr "X 刻度為對數" + +#. i18n: ectx: property (text), widget (QCheckBox, yLogCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:502 +#, kde-format +msgid "Logarithmic y scale" +msgstr "Y 刻度為對數" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_3) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:521 +#, kde-format +msgid "File Options" +msgstr "檔案選項" + +#. i18n: ectx: property (text), widget (QCheckBox, saveCheckBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:527 +#, kde-format +msgid "Save plot to file" +msgstr "將圖形存到檔案" + +#. i18n: ectx: property (text), widget (QLabel, label_23) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:547 +#, kde-format +msgid "File type" +msgstr "檔案型態" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:555 +#, kde-format +msgid "Detect from filename" +msgstr "從檔名偵測" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:560 +#, kde-format +msgid "PNG" +msgstr "PNG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:565 +#, kde-format +msgid "PS" +msgstr "PS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:570 +#, kde-format +msgid "EPS" +msgstr "EPS" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:575 +#, kde-format +msgid "LaTeX" +msgstr "LaTeX" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:580 +#, kde-format +msgid "SVG" +msgstr "SVG" + +#. i18n: ectx: property (text), item, widget (KComboBox, saveFileBox) +#: backends/qalculate/plotassistant/qalculateplotdialog.ui:585 +#, kde-format +msgid "FIG" +msgstr "FIG" + +#: backends/qalculate/qalculatebackend.cpp:69 +#, kde-format +msgid "" +"Qalculate! is not your regular software replication of the cheapest " +"available calculator. Qalculate! aims to make full use of the superior " +"interface, power and flexibility of modern computers. The center of " +"attention in Qalculate! is the expression entry. Instead of entering each " +"number in a mathematical expression separately, you can directly write the " +"whole expression and later modify it. The interpretation of expressions is " +"flexible and fault tolerant, and if you nevertheless do something wrong, " +"Qalculate! will tell you so. Not fully solvable expressions are however not " +"errors. Qalculate! will simplify as far as it can and answer with an " +"expression. In addition to numbers and arithmetic operators, an expression " +"may contain any combination of variables, units, and functions." +msgstr "" +"Qalculate! 不像您常用的那種最簡易的計算機軟體。它可以徹底利用現在最新、最強" +"大、最彈性化的電腦計算能力。Qalculate! 的表示式是重點。您可以直接寫入整個表示" +"式,稍後再修改,而不需要分開輸入每個數學表示式。表示式的解譯是有彈性並且有強" +"大的容錯能力。若是您做錯了某些事情,Qalculate! 會告訴您。不過,無解的表示式不" +"見得代表錯誤。Qalculate! 會盡可能簡化它並解答。除了數字與計算操作元外,表示式" +"中可以包含任何變數、單位與函數的組合。" + +#. i18n: ectx: label, entry (postConversion), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:9 +#, kde-format +msgid "" +"If and how units will be automatically converted. If true, convert to the " +"best suited SI units (the least amount of units)." +msgstr "" +"單位是否要轉換,以及如何轉換。若此選項為真,則會轉換為最適合的 SI 單位(數量" +"最小的單位)。" + +#. i18n: ectx: label, entry (angleUnit), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:13 +#, kde-format +msgid "Default angle unit for trigonometric functions." +msgstr "三角函數中的預設角度單位。" + +#. i18n: ectx: label, entry (base), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:23 +#, kde-format +msgid "Base of parsed and evaluated numbers." +msgstr "剖析與估計數字時的基底。" + +#. i18n: ectx: label, entry (structuring), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:32 +#, kde-format +msgid "If the evaluation result will be simplified or factorized." +msgstr "計算結果是否要簡化或分解。" + +#. i18n: ectx: label, entry (fractionFormat), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:42 +#, kde-format +msgid "" +"If rational numbers will be displayed with decimals, as a fraction, or " +"something in between." +msgstr "要用數字還是分數,或是混合方式來表示實數。" + +#. i18n: ectx: label, entry (indicateInfiniteSeries), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:46 +#, kde-format +msgid "" +"Show that the digit series of a number continues forever with three dots, " +"instead of rounding (ex. 2/3 displays as 0.666666... instead of 0.666667)." +msgstr "" +"循環數是否要進位,還是用三個點表示(如,2/3 是要表示為 0.666666... 還是 " +"0.666667)。" + +#. i18n: ectx: label, entry (useAllPrefixes), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:50 +#, kde-format +msgid "" +"Use all decimal SI prefixes. If false, prefixes which is not a multiple of " +"thousand (centi, deci, deca, hecto) will not be used automatically." +msgstr "" +"使用所有數值 SI 前置。若為假,就不會自動使育不是一千倍數的單位(百分之一,十" +"分之一,十倍,百倍等等)。" + +#. i18n: ectx: label, entry (negativeExponents), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:54 +#, kde-format +msgid "" +"If true, negative exponents will be used instead of division (ex. 5/x^2 " +"becomes 5*x^-2)." +msgstr "若此選項為真,會用負指數表示法(如 5/x^2 會表示成 5*x^-2)。" + +#. i18n: ectx: label, entry (minExp), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:64 +#, kde-format +msgid "Numerical display." +msgstr "數值顯示。" + +#. i18n: ectx: label, entry (inlinePlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:68 +#, kde-format +msgid "" +"If true, plots will be displayed inside the worksheet. If not they appear in " +"a separate window." +msgstr "若此選項為真,圖形會在工作表內顯示。反之會在分開的視窗中顯示。" + +#. i18n: ectx: label, entry (coloredPlot), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:72 +#, kde-format +msgid "Whether colors should be used in plots." +msgstr "圖形中是否要使用顏色。" + +#. i18n: ectx: label, entry (plotGrid), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:76 +#, kde-format +msgid "Whether a grid should be plotted." +msgstr "是否要繪製格線。" + +#. i18n: ectx: label, entry (plotBorder), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:80 +#, kde-format +msgid "Whether full borders should be drawn around the plot." +msgstr "是否要在圖形週圍畫上完整的邊框。" + +#. i18n: ectx: label, entry (plotLineWidth), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:84 +#, kde-format +msgid "Width of lines, in pixels." +msgstr "線條寬度,單位為像素。" + +#. i18n: ectx: label, entry (plotSteps), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:88 +#, kde-format +msgid "Number of interpolation steps to be used in plotting." +msgstr "繪圖中要使用的內插補點數量。" + +#. i18n: ectx: label, entry (plotSmoothing), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:99 +#, kde-format +msgid "Smoothing mode in plots." +msgstr "圖形中的平滑模式。" + +#. i18n: ectx: label, entry (plotStyle), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:113 +#, kde-format +msgid "Style of plots." +msgstr "圖形樣式。" + +#. i18n: ectx: label, entry (plotLegend), group (QalculateBackend) +#: backends/qalculate/qalculatebackend.kcfg:126 +#, kde-format +msgid "Legend position in plots." +msgstr "圖形中的圖例。" + +#: backends/qalculate/qalculateexpression.cpp:158 +#, kde-format +msgid "Qalculate reports it cannot print. Is gnuplot installed?" +msgstr "Qalculate 回報它無法列印。您安裝了 gnuplot 了嗎?" + +#: backends/qalculate/qalculateexpression.cpp:179 +#, kde-format +msgid "missing %1" +msgstr "缺少 %1" + +#: backends/qalculate/qalculateexpression.cpp:269 +#, kde-format +msgid "%1 must be a number." +msgstr "%1 必須是數字。" + +#: backends/qalculate/qalculateexpression.cpp:270 +#, kde-format +msgid "%1 must be a integer." +msgstr "%1 必須是整數。" + +#: backends/qalculate/qalculateexpression.cpp:271 +#, kde-format +msgid "%1 must be a boolean." +msgstr "%1 必須是布林值。" + +#: backends/qalculate/qalculateexpression.cpp:272 +#, kde-format +msgid "invalid option for %1: %2" +msgstr "%1 的選項不合法:%2" + +#: backends/qalculate/qalculateexpression.cpp:599 +#, kde-format +msgid "found multiple expressions in one plot command (%1 and %2)." +msgstr "在一個繪製指令中找到多個表示式(%1 與 %2)。" + +#: backends/qalculate/qalculateexpression.cpp:699 +#: backends/qalculate/qalculateexpression.cpp:807 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "ERROR" +msgstr "錯誤" + +#: backends/qalculate/qalculateexpression.cpp:701 +#: backends/qalculate/qalculateexpression.cpp:809 +#: backends/qalculate/qalculatehighlighter.cpp:40 +#, kde-format +msgid "WARNING" +msgstr "警告" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:58 +#, kde-format +msgid "No function, variable or unit with specified name exist." +msgstr "沒有此名稱的變數、函數或單位存在。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:65 +#, kde-format +msgid "Function: %1" +msgstr "函數:%1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:150 +#, kde-format +msgid "Plotting interface" +msgstr "繪製介面" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:151 +#, kde-format +msgid "Plots one or more functions either inline or in a separate window." +msgstr "在一個或多個視窗中繪製一個或多個函數。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:152 +#, kde-format +msgid "expression" +msgstr "表示式" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:153 +#, kde-format +msgid "option" +msgstr "選項" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:154 +#, kde-format +msgid "value" +msgstr "數值" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:158 +#, kde-format +msgid "integer" +msgstr "整數" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:159 +#, kde-format +msgid "boolean" +msgstr "布林值" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:160 +#, kde-format +msgid "number" +msgstr "數字" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:161 +#, kde-format +msgid "default: %1" +msgstr "預設:%1" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:221 +#, kde-format +msgid "The function's name" +msgstr "函數名稱" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:223 +#, kde-format +msgid "Title label" +msgstr "標題標籤" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:224 +#, kde-format +msgid "x-axis label" +msgstr "X 軸標籤" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:225 +#, kde-format +msgid "y-axis label" +msgstr "Y 軸標籤" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:226 +#, kde-format +msgid "" +"Image to save plot to. If empty shows plot in a window on the screen. If " +"inline=true the image is shown regardless of this option." +msgstr "" +"將圖形存成影像。如果是空的,那就會將圖形顯示在螢幕上的視窗。如果設為內含顯" +"示,則會忽略此選項。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:227 +#, kde-format +msgid "The image type to save as. One of auto, png, ps, eps, latex, svg, fig." +msgstr "要存成的影像格式。選項包括自動,png,ps,eps,latex,svg 與 fig。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:228 +#, kde-format +msgid "Set to true for colored plot, false for monochrome." +msgstr "若為彩色圖形則設為真,反之設為假。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:229 +#, kde-format +msgid "Minimum x-axis value." +msgstr "X 軸最小值。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:230 +#, kde-format +msgid "Maximum x-axis value." +msgstr "X 軸最大值。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:231 +#, kde-format +msgid "If a logarithmic scale shall be used for the x-axis." +msgstr "X 軸的刻度是否為對數。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:232 +#, kde-format +msgid "If a logarithmic scale shall be used for the y-axis." +msgstr "Y 軸的刻度是否為對數。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:233 +#, kde-format +msgid "Logarithmic base for the x-axis." +msgstr "X 軸刻度的對數基底。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:234 +#, kde-format +msgid "Logarithmic base for the y-axis." +msgstr "Y 軸刻度的對數基底。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:235 +#, kde-format +msgid "If a grid shall be shown in the plot." +msgstr "是否要繪製格線。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:236 +#, kde-format +msgid "" +"If the plot shall be surrounded by borders on all sides (not just axis)." +msgstr "是否要將圖形的所有邊緣加框(而不是只顯示軸線)。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:237 +#, kde-format +msgid "Width of lines." +msgstr "線條寬度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:238 +#, kde-format +msgid "" +"Where the plot legend shall be placed. One of none, top_left, top_right, " +"bottom_left, bottom_right, below, outside" +msgstr "選項包括無,左上,右上,左下,右下,下方,外側。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:239 +#, kde-format +msgid "Plot smoothing. One of none, unique, csplines, bezier, sbezier" +msgstr "圖形平滑度。選項包括無,unique,csplines,bezier,sbezier" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:240 +#, kde-format +msgid "" +"Plot style. One of lines, points, points_lines, boxes, histogram, steps, " +"candlesticks, dots" +msgstr "" +"圖形樣式。選項包括線條,點,點與線,盒狀,直方圖,階梯圖,燭柱圖,圓點圖" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:241 +#, kde-format +msgid "Use scale on second x-axis." +msgstr "第二 X 軸線上顯示刻度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:242 +#, kde-format +msgid "Use scale on second y-axis." +msgstr "第二 Y 軸線上顯示刻度。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:243 +#, kde-format +msgid "If the plot is to be drawn inline, instead of in a new window." +msgstr "是否要將圖形內含,而非畫在新視窗。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:244 +#, kde-format +msgid "Distance between two interpolation points. See also steps." +msgstr "兩個內插補點間的距離。請參考 steps 的說明。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:245 +#, kde-format +msgid "Number of interpolation points. See also step." +msgstr "內插點數量。請參考階梯圖的說明。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:246 +#, kde-format +msgid "The name of the x variable. This must be an unknown variable" +msgstr "X 變數名稱。必須是一個未知的變數" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:255 +#, kde-format +msgid "Save variables to a file" +msgstr "將變數存到檔案" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:256 +#, kde-format +msgid "" +"Save all currently defined variables to a file. They can be reloaded with %1." +msgstr "將所有目前定義的變數存到檔案。它可以用 %1 重新載入。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:257 +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:266 +#, kde-format +msgid "file" +msgstr "檔案" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:258 +#, kde-format +msgid "file: the file to save to" +msgstr "file: 要儲存的檔案" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:264 +#, kde-format +msgid "Load variables from a file" +msgstr "從檔案中載入變數" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:265 +#, kde-format +msgid "Load variables from a file that has previously been created by %1." +msgstr "從先前由 %1 儲存的檔案中載入變數。" + +#: backends/qalculate/qalculatesyntaxhelpobject.cpp:267 +#, kde-format +msgid "file: the file to load" +msgstr "file: 要載入的檔案" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_3) +#: backends/qalculate/settings.ui:21 cantor.cpp:470 +#, kde-format +msgid "General" +msgstr "一般" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/qalculate/settings.ui:29 +#, kde-format +msgid "Number base:" +msgstr "基數:" + +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: backends/qalculate/settings.ui:46 +#, kde-format +msgid "Fraction format:" +msgstr "分數格式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:57 +#, kde-format +msgid "Decimal" +msgstr "十進制" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:62 +#, kde-format +msgid "Exact" +msgstr "精準" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:67 +#, kde-format +msgid "Fractional" +msgstr "分數" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_fractionFormat) +#: backends/qalculate/settings.ui:72 +#, kde-format +msgid "Combined" +msgstr "組合" + +#. i18n: ectx: property (text), widget (QLabel, label_9) +#: backends/qalculate/settings.ui:84 +#, kde-format +msgid "Numerical display:" +msgstr "數值顯示:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:100 +#, kde-format +msgid "Pure" +msgstr "純" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:105 +#, kde-format +msgid "Scientific" +msgstr "科學表示法" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_minExp) +#: backends/qalculate/settings.ui:110 +#, kde-format +msgid "Precision" +msgstr "精確度" + +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: backends/qalculate/settings.ui:122 +#, kde-format +msgid "Indicate infinite series:" +msgstr "指示無限序列:" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_indicateInfiniteSeries) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_useAllPrefixes) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_negativeExponents) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_postConversion) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_inlinePlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_coloredPlot) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotGrid) +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_plotBorder) +#: backends/qalculate/settings.ui:132 backends/qalculate/settings.ui:153 +#: backends/qalculate/settings.ui:174 backends/qalculate/settings.ui:227 +#: backends/qalculate/settings.ui:339 backends/qalculate/settings.ui:360 +#: backends/qalculate/settings.ui:381 backends/qalculate/settings.ui:402 +#, kde-format +msgid "Enabled" +msgstr "已開啟" + +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: backends/qalculate/settings.ui:143 +#, kde-format +msgid "Use all SI prefixes:" +msgstr "使用所有 SI 前置:" + +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: backends/qalculate/settings.ui:164 +#, kde-format +msgid "Use negative exponents:" +msgstr "使用負指數:" + +#. i18n: ectx: attribute (title), widget (QWidget, tab_2) +#: backends/qalculate/settings.ui:209 +#, kde-format +msgid "Evaluate" +msgstr "估算" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: backends/qalculate/settings.ui:217 +#, kde-format +msgid "Convert to best SI units:" +msgstr "轉換為最好的 SI 單位:" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: backends/qalculate/settings.ui:238 +#, kde-format +msgid "Angle unit:" +msgstr "角度單位:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:254 +#, kde-format +msgid "Radians" +msgstr "弧度" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:259 +#, kde-format +msgid "Degrees" +msgstr "度" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_angleUnit) +#: backends/qalculate/settings.ui:264 +#, kde-format +msgid "Gradians" +msgstr "Gradians" + +#. i18n: ectx: property (text), widget (QLabel, label_4) +#: backends/qalculate/settings.ui:276 +#, kde-format +msgid "Structuring Mode:" +msgstr "結構模式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:292 +#, kde-format +msgid "Simplify" +msgstr "簡化" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_structuring) +#: backends/qalculate/settings.ui:297 +#, kde-format +msgid "Factorize" +msgstr "因數分解" + +#. i18n: ectx: attribute (title), widget (QWidget, tab) +#: backends/qalculate/settings.ui:321 +#, kde-format +msgid "Plotting" +msgstr "繪製" + +#. i18n: ectx: property (text), widget (QLabel, label_10) +#: backends/qalculate/settings.ui:329 +#, kde-format +msgid "Display plots inline:" +msgstr "圖形用內含顯示:" + +#. i18n: ectx: property (text), widget (QLabel, label_15) +#: backends/qalculate/settings.ui:350 +#, kde-format +msgid "Colored Plots:" +msgstr "彩色圖形:" + +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: backends/qalculate/settings.ui:371 +#, kde-format +msgid "Show grid:" +msgstr "顯示格線:" + +#. i18n: ectx: property (text), widget (QLabel, label_12) +#: backends/qalculate/settings.ui:392 +#, kde-format +msgid "Show full borders:" +msgstr "顯示完整邊框:" + +#. i18n: ectx: property (text), widget (QLabel, label_17) +#: backends/qalculate/settings.ui:413 +#, kde-format +msgid "Width of lines:" +msgstr "線條寬度:" + +#. i18n: ectx: property (text), widget (QLabel, label_18) +#: backends/qalculate/settings.ui:434 +#, kde-format +msgid "Sampling rate:" +msgstr "取樣頻率:" + +#. i18n: ectx: property (text), widget (QLabel, label_13) +#: backends/qalculate/settings.ui:455 +#, kde-format +msgid "Smoothing Mode:" +msgstr "平滑模式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotSmoothing) +#: backends/qalculate/settings.ui:476 +#, kde-format +msgid "Natural cubic Splines" +msgstr "自然曲線樣條(Spline)" + +#. i18n: ectx: property (text), widget (QLabel, label_14) +#: backends/qalculate/settings.ui:498 +#, kde-format +msgid "Plot Style:" +msgstr "繪圖樣式:" + +#. i18n: ectx: property (text), item, widget (KComboBox, kcfg_plotStyle) +#: backends/qalculate/settings.ui:534 +#, kde-format +msgctxt "Plot Style" +msgid "Steps" +msgstr "Steps" + +#. i18n: ectx: property (text), widget (QLabel, label_16) +#: backends/qalculate/settings.ui:556 +#, kde-format +msgid "Legend Position:" +msgstr "圖例位置:" + +#: backends/R/rbackend.cpp:93 +#, kde-format +msgctxt "" +"the url to the documentation of R, please check if there is a translated " +"version and use the correct url" +msgid "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" +msgstr "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc" + +#: backends/R/rbackend.cpp:98 +#, kde-format +msgid "" +"R is a language and environment for statistical computing and graphics, " +"similar to the S language and environment.
    It provides a wide variety " +"of statistical (linear and nonlinear modelling, classical statistical tests, " +"time-series analysis, classification, clustering, ...) and graphical " +"techniques, and is highly extensible. The S language is often the vehicle of " +"choice for research in statistical methodology, and R provides an Open " +"Source route to participation in that activity." +msgstr "" +"R 是一種程式語言與環境,用於統計計算與圖表製作,類似 S 的語言與環境。
    它" +"提供多種統計(包含線性與非線性模組(linear and nonlinear modelling),傳統統計" +"測試(classical statistical tests),時間序列分析(time-series analysis),分類" +"(classification),叢集(clustering)等)與繪圖技術,並且有很高的延伸性。S 語言" +"通常用於研究統計方法,R 則提供一個開放源碼的選擇。" + +#: backends/R/rexpression.cpp:113 backends/R/rexpression.cpp:114 +#, kde-format +msgid "Error opening file %1" +msgstr "開啟檔案 %1 時發生錯誤" + +#: backends/R/rextensions.cpp:37 +#, kde-format +msgid "R script file (*.R)" +msgstr "R 文稿檔 (*.R)" + +#: backends/R/rserver/rserver.cpp:348 +#, kde-format +msgid "Error Parsing Command" +msgstr "剖析指令時發生錯誤" + +#: backends/R/rsettingswidget.cpp:33 +#, kde-format +msgid "Double click to open file selection dialog" +msgstr "雙擊以開啟檔案選擇對話框" + +#: backends/R/rsettingswidget.cpp:53 +#, kde-format +msgid "*.R *.r|R source files (*.R, *.r)" +msgstr "*.R *.r|R 語言源碼檔 (*.R, *.r)" + +#: backends/sage/sagebackend.cpp:100 +#, kde-format +msgctxt "" +"the url to the documentation of Sage, please check if there is a translated " +"version and use the correct url" +msgid "http://www.sagemath.org/doc/reference/index.html" +msgstr "http://www.sagemath.org/doc/reference/index.html" + +#: backends/sage/sagebackend.cpp:105 +#, kde-format +msgid "" +"Sage is a free open-source mathematics software system licensed under the " +"GPL.
    It combines the power of many existing open-source packages into a " +"common Python-based interface." +msgstr "" +"Sage 是一個 GPL 授權,自由、開放源碼的數學軟體系統。
    它結合了許多現有的開" +"放源碼軟體的力量,並提供一個 Python 的介面。" + +#. i18n: ectx: label, entry (Path), group (SageBackend) +#: backends/sage/sagebackend.kcfg:10 +#, kde-format +msgid "Path to the Sage executable" +msgstr "Sage 執行檔路徑" + +#: backends/sage/sageexpression.cpp:227 backends/sage/sageexpression.cpp:229 +#, kde-format +msgid "Result of %1" +msgstr "%1 的結果" + +#: backends/sage/sageexpression.cpp:236 +#, kde-format +msgid "" +"%1\n" +"The last output was: \n" +" %2" +msgstr "" +"%1\n" +"最後的輸出為:\n" +"%2" + +#: backends/sage/sageextensions.cpp:47 +#, kde-format +msgid "Python script file (*.py);;Sage script file (*.sage)" +msgstr "Python 文稿檔 (*.py);; Sage 文稿檔 (*.sage)" + +#: backends/sage/sagesession.cpp:213 +#, kde-format +msgid "" +"Sage version %1.%2 is unsupported. Please update your installation to the " +"supported versions to make it work with Cantor." +msgstr "" +"已不支援 Sage 版本 %1.%2。請更新您的 Sage 安裝至支援的版本,以讓其能與 " +"Cantor 搭配使用。" + +#: backends/sage/sagesession.cpp:215 backends/sage/sagesession.cpp:324 +#: backends/sage/sagesession.cpp:335 cantor.cpp:185 cantor.cpp:187 +#: cantor_part.cpp:150 main.cpp:77 main.cpp:144 worksheet.cpp:958 +#: worksheet.cpp:1009 worksheet.cpp:1032 worksheet.cpp:1041 worksheet.cpp:1060 +#: worksheet.cpp:1071 +#, kde-format +msgid "Cantor" +msgstr "Cantor" + +#: backends/sage/sagesession.cpp:320 +#, kde-format +msgid "The Sage process crashed while evaluating this expression" +msgstr "Sage 行程在計算此表示式時發生錯誤。" + +#: backends/sage/sagesession.cpp:324 +#, kde-format +msgid "The Sage process crashed" +msgstr "Sage 行程發生錯誤" + +#: backends/sage/sagesession.cpp:331 +#, kde-format +msgid "The Sage process exited while evaluating this expression" +msgstr "Sage 行程在計算此表示式時結束" + +#: backends/sage/sagesession.cpp:335 +#, kde-format +msgid "The Sage process exited" +msgstr "Sage 行程已結束" + +#: backends/sage/sagesession.cpp:345 +#, kde-format +msgid "Failed to start Sage" +msgstr "啟動 Sage 失敗" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/sage/settings.ui:19 +#, kde-format +msgid "Path to Sage:" +msgstr "Sage 的路徑:" + +#: backends/scilab/scilabbackend.cpp:96 +#, kde-format +msgctxt "" +"the url to the documentation of Scilab, please check if there is a " +"translated version and use the correct url" +msgid "http://www.scilab.org/support/documentation" +msgstr "http://www.scilab.org/support/documentation" + +#: backends/scilab/scilabbackend.cpp:101 +#, kde-format +msgid "" +"

    Scilab is a free software, cross-platform numerical computational package " +"and a high-level, numerically oriented programming language.

    Scilab is " +"distributed under CeCILL license (GPL compatible)" +msgstr "" +"

    Scilab 是一套自由軟體,它提供跨平台的數值計算套件與一套高階、數值導向程式" +"語言。

    Scilab 是以 CeCILL 授權(與 GPL 相容)發布。" + +#. i18n: ectx: label, entry (Path), group (ScilabBackend) +#: backends/scilab/scilabbackend.kcfg:10 +#, kde-format +msgid "" +"Path to scilab-adv-cli command (Warning: Scilab version must better or equal " +"than 5.4 version)" +msgstr "scilab-adv-cli 執行檔路徑(警告:Scilab 版本必須大於或等於 5.4 版)" + +#: backends/scilab/scilabextensions.cpp:38 +#, kde-format +msgid ";;Scilab script file (*.sce);;Scilab function file (*.sci)" +msgstr ";;Scilab 文稿檔 (*.sce);; Scilab 函式檔 (*.sci)" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: backends/scilab/settings.ui:19 +#, kde-format +msgid "Path to scilab-adv-cli command:" +msgstr "scilab-adv-cli 指令位置:" + +#: cantor.cpp:117 +#, kde-format +msgid "Download Example Worksheets" +msgstr "下載範例工作表" + +#: cantor.cpp:122 +#, kde-format +msgid "&Open Example" +msgstr "開啟範例(&O)" + +#: cantor.cpp:127 +#, kde-format +msgid "Go to previous worksheet" +msgstr "前往上個工作表格" + +#: cantor.cpp:139 +#, kde-format +msgid "Go to next worksheet" +msgstr "前往下個工作表格" + +#: cantor.cpp:196 cantor_part.cpp:475 +#, kde-format +msgid "Cantor Worksheet (*.cws)" +msgstr "Cantor 工作表 (*.cws)" + +#: cantor.cpp:196 +#, kde-format +msgid "Open file" +msgstr "開啟檔案" + +#: cantor.cpp:254 +#, kde-format +msgid "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for the following program:
    • %2
    " +msgid_plural "" +"

    No Backend Found

    \n" +"
    You could try:\n" +"
    • Changing the settings in the config dialog;
    • " +"
    • Installing packages for one of the following programs:
    • %2
    " +msgstr[0] "" +"

    找不到後端介面

    \n" +"
    您可以嘗試:\n" +"
    • 變更設定對話框中的設定;
    • 安裝以下程式軟體包之一:
    • %2
    " + +#: cantor.cpp:274 +#, kde-format +msgid "Error" +msgstr "錯誤" + +#: cantor.cpp:302 +#, kde-format +msgid "Session %1" +msgstr "作業階段 %1" + +#: cantor.cpp:318 +#, kde-format +msgid "Could not find the Cantor Part." +msgstr "找不到 Cantor 部件。" + +#: cantor.cpp:423 +#, kde-format +msgid "Multiple unsaved Worksheets are opened. Do you want to close them?" +msgstr "有多個未儲存的工作表開啟中。是否要將它們關閉?" + +#: cantor.cpp:424 +#, kde-format +msgid "Close Cantor" +msgstr "關閉 Cantor" + +#: cantor.cpp:434 +#, kde-format +msgid "The current project has been modified. Do you want to save it?" +msgstr "專案已修改,您是否要儲存?" + +#: cantor.cpp:435 +#, kde-format +msgid "Save Project" +msgstr "儲存專案" + +#. i18n: ectx: label, entry (DefaultBackend), group (Cantor) +#: cantor.kcfg:10 +#, kde-format +msgid "The Backend that is used by default" +msgstr "預設使用的後端介面" + +#. i18n: ectx: label, entry (TypesetDefault), group (Cantor) +#: cantor.kcfg:14 +#, kde-format +msgid "Do Typesetting by default" +msgstr "預設執行排版" + +#. i18n: ectx: label, entry (HighlightDefault), group (Cantor) +#: cantor.kcfg:18 +#, kde-format +msgid "Do Syntax Highlighting by default" +msgstr "預設執行語法突顯功能" + +#. i18n: ectx: label, entry (CompletionDefault), group (Cantor) +#: cantor.kcfg:22 +#, kde-format +msgid "Enable Completions by default" +msgstr "預設開啟補完功能" + +#. i18n: ectx: label, entry (ExpressionNumberingDefault), group (Cantor) +#: cantor.kcfg:26 +#, kde-format +msgid "Enable Numbering of Expressions by default" +msgstr "預設開啟表示式編號" + +#. i18n: ectx: label, entry (AnimationDefault), group (Cantor) +#: cantor.kcfg:30 +#, kde-format +msgid "Animate changes in the Worksheet by default" +msgstr "預設動畫顯示工作表中的變更" + +#. i18n: ectx: label, entry (AutoEval), group (Cantor) +#: cantor.kcfg:34 +#, kde-format +msgid "Automatically reevaluate the entries below the current" +msgstr "自動重新計算目前底下的項目" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_WarnAboutSessionRestart) +#. i18n: ectx: label, entry (WarnAboutSessionRestart), group (Cantor) +#: cantor.kcfg:38 settings.ui:88 +#, kde-format +msgid "Ask for confirmation when restarting the backend" +msgstr "當重新啟動後端時詢問確認" + +#: cantor_part.cpp:141 +#, kde-format +msgid "Backend %1 is not installed" +msgstr "後端介面 %1 未安裝" + +#: cantor_part.cpp:148 worksheet.cpp:1069 +#, kde-format +msgid "" +"There are some problems with the %1 backend,\n" +"please check your configuration or install the needed packages.\n" +"You will only be able to view this worksheet." +msgstr "" +"後端介面 %1 發生一些問題。\n" +"請檢查您的設定,或看看是否安裝了必須的套件。\n" +"您將只能檢視此工作表。" + +#: cantor_part.cpp:184 +#, kde-format +msgid "Save Plain Text" +msgstr "存成純文字檔" + +#: cantor_part.cpp:226 cantor_part.cpp:516 +#, kde-format +msgid "Export to LaTeX" +msgstr "匯出到 Latex" + +#: cantor_part.cpp:241 cantor_part.cpp:607 worksheet.cpp:1218 +#, kde-format +msgid "Evaluate Worksheet" +msgstr "計算工作表" + +#: cantor_part.cpp:248 +#, kde-format +msgid "Typeset using LaTeX" +msgstr "使用 LaTex 排版" + +#: cantor_part.cpp:255 +#, kde-format +msgid "Syntax Highlighting" +msgstr "語法突顯" + +#: cantor_part.cpp:260 +#, kde-format +msgid "Completion" +msgstr "補齊" + +#: cantor_part.cpp:265 +#, kde-format +msgid "Line Numbers" +msgstr "行號" + +#: cantor_part.cpp:270 +#, kde-format +msgid "Animate Worksheet" +msgstr "動畫化工作表" + +#: cantor_part.cpp:275 +#, kde-format +msgid "Restart Backend" +msgstr "重新啟動後端介面" + +#: cantor_part.cpp:282 worksheetentry.cpp:321 worksheetentry.cpp:711 +#, kde-format +msgid "Evaluate Entry" +msgstr "計算項目" + +#: cantor_part.cpp:288 worksheet.cpp:1258 +#, kde-format +msgid "Insert Command Entry" +msgstr "插入指令項目" + +#: cantor_part.cpp:294 worksheet.cpp:1259 +#, kde-format +msgid "Insert Text Entry" +msgstr "插入文字項目" + +#: cantor_part.cpp:300 worksheet.cpp:1261 +#, kde-format +msgid "Insert Markdown Entry" +msgstr "插入 Markdown 項目" + +#: cantor_part.cpp:307 +#, kde-format +msgid "Insert Latex Entry" +msgstr "插入 Latex 項目" + +#: cantor_part.cpp:313 worksheet.cpp:1267 +#, kde-format +msgid "Insert Page Break" +msgstr "插入頁面中斷標記" + +#: cantor_part.cpp:318 worksheet.cpp:1266 +#, kde-format +msgid "Insert Image" +msgstr "插入影像" + +#: cantor_part.cpp:323 +#, kde-format +msgid "Remove current Entry" +msgstr "移除目前的項目" + +#: cantor_part.cpp:329 cantor_part.cpp:851 +#, kde-format +msgid "Show %1 Help" +msgstr "顯示 %1 說明" + +#. i18n("Publish Worksheet"), collection); +#. publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); +#. collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); +#. connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); +#. +#: cantor_part.cpp:344 +#, kde-format +msgid "Show Script Editor" +msgstr "顯示文稿編輯器" + +#: cantor_part.cpp:350 +#, kde-format +msgid "Show Completion" +msgstr "顯示補完" + +#: cantor_part.cpp:421 +#, kde-format +msgid "CantorPart" +msgstr "Cantor 部件" + +#: cantor_part.cpp:423 +#, kde-format +msgid "(C) 2009-2015 Alexander Rieder" +msgstr "(C) 2009-2015 Alexander Rieder" + +#: cantor_part.cpp:427 main.cpp:91 +#, kde-format +msgid "Alexander Rieder" +msgstr "Alexander Rieder" + +#: cantor_part.cpp:490 +#, kde-format +msgid "Save as" +msgstr "另存新檔" + +#: cantor_part.cpp:509 panelplugins/variablemgr/variablemanagerwidget.cpp:131 +#, kde-format +msgid "Save" +msgstr "儲存" + +#: cantor_part.cpp:561 +#, kde-format +msgid "" +"All the available calculation results will be lost. Do you really want to " +"restart %1?" +msgstr "所有可用的計算結果將會遺失。仍然重新啟動 %1?" + +#: cantor_part.cpp:562 +#, kde-format +msgid "Restart %1?" +msgstr "是否重新啟動 %1?" + +#: cantor_part.cpp:599 worksheet.cpp:1221 +#, kde-format +msgid "Interrupt" +msgstr "中斷" + +#: cantor_part.cpp:602 +#, kde-format +msgid "Calculating..." +msgstr "計算中..." + +#: cantor_part.cpp:611 cantor_part.cpp:670 +#, kde-format +msgid "Ready" +msgstr "已就緒" + +#: cantor_part.cpp:619 +#, kde-format +msgid "Session Error: %1" +msgstr "工作階段錯誤: %1" + +#: cantor_part.cpp:660 +#, kde-format +msgid "Initialization complete" +msgstr "初始化完成" + +#: cantor_part.cpp:665 +#, kde-format +msgid "Initializing..." +msgstr "初始化中..." + +#: cantor_part.cpp:704 +#, kde-format +msgid "Unnamed" +msgstr "未命名" + +#: cantor_part.cpp:709 +#, kde-format +msgid "[read-only]" +msgstr "[唯讀]" + +#: cantor_part.cpp:857 +#, kde-format +msgid "Do you want to upload current Worksheet to public web server?" +msgstr "您要上傳目前的工作表到公開的網頁伺服器上嗎?" + +#: cantor_part.cpp:858 +#, kde-format +msgid "Question - Cantor" +msgstr "問題 - Cantor" + +#: cantor_part.cpp:864 +#, kde-format +msgid "The Worksheet is not saved. You should save it before uploading." +msgstr "工作表未儲存。請在上傳前先儲存。" + +#: cantor_part.cpp:865 +#, kde-format +msgid "Warning - Cantor" +msgstr "警告 - Cantor" + +#: cantor_part.cpp:939 +#, kde-format +msgid "This backend does not support scripts." +msgstr "後端介面未支援文稿。" + +#. i18n: ectx: Menu (edit) +#: cantor_part.rc:14 cantor_shell.rc:18 +#, kde-format +msgid "&Edit" +msgstr "編輯(&E)" + +#. i18n: ectx: Menu (view) +#: cantor_part.rc:27 cantor_shell.rc:21 +#, kde-format +msgid "&View" +msgstr "檢視(&V)" + +#. i18n: ectx: Menu (worksheet) +#: cantor_part.rc:33 +#, kde-format +msgid "&Worksheet" +msgstr "工作表(&W)" + +#. i18n: ectx: Menu (file) +#: cantor_shell.rc:4 +#, kde-format +msgid "&File" +msgstr "檔案(&F)" + +#. i18n: ectx: Menu (file_new_menu) +#: cantor_shell.rc:6 +#, kde-format +msgid "&New" +msgstr "新增(&N)" + +#. i18n: ectx: Menu (panels) +#: cantor_shell.rc:23 +#, kde-format +msgid "Panels" +msgstr "面板" + +#. i18n: ectx: Menu (settings) +#: cantor_shell.rc:28 +#, kde-format +msgid "&Settings" +msgstr "設定(&S)" + +#: commandentry.cpp:114 +#, kde-format +msgid "White" +msgstr "白色" + +#: commandentry.cpp:114 +#, kde-format +msgid "Black" +msgstr "黑色" + +#: commandentry.cpp:115 +#, kde-format +msgid "Dark Red" +msgstr "暗紅色" + +#: commandentry.cpp:115 +#, kde-format +msgid "Red" +msgstr "紅色" + +#: commandentry.cpp:115 +#, kde-format +msgid "Light Red" +msgstr "亮紅色" + +#: commandentry.cpp:116 +#, kde-format +msgid "Dark Green" +msgstr "暗綠色" + +#: commandentry.cpp:116 +#, kde-format +msgid "Green" +msgstr "綠色" + +#: commandentry.cpp:116 +#, kde-format +msgid "Light Green" +msgstr "亮綠色" + +#: commandentry.cpp:117 +#, kde-format +msgid "Dark Blue" +msgstr "暗藍色" + +#: commandentry.cpp:117 +#, kde-format +msgid "Blue" +msgstr "藍色" + +#: commandentry.cpp:117 +#, kde-format +msgid "Light Blue" +msgstr "亮藍色" + +#: commandentry.cpp:118 +#, kde-format +msgid "Dark Yellow" +msgstr "暗黃色" + +#: commandentry.cpp:118 +#, kde-format +msgid "Yellow" +msgstr "黃色" + +#: commandentry.cpp:118 +#, kde-format +msgid "Light Yellow" +msgstr "亮黃色" + +#: commandentry.cpp:119 +#, kde-format +msgid "Dark Cyan" +msgstr "暗青色" + +#: commandentry.cpp:119 +#, kde-format +msgid "Cyan" +msgstr "青色" + +#: commandentry.cpp:119 +#, kde-format +msgid "Light Cyan" +msgstr "亮青色" + +#: commandentry.cpp:120 +#, kde-format +msgid "Dark Magenta" +msgstr "暗洋紅" + +#: commandentry.cpp:120 +#, kde-format +msgid "Magenta" +msgstr "洋紅色" + +#: commandentry.cpp:120 +#, kde-format +msgid "Light Magenta" +msgstr "亮洋紅" + +#: commandentry.cpp:121 +#, kde-format +msgid "Dark Orange" +msgstr "深橘色" + +#: commandentry.cpp:121 +#, kde-format +msgid "Orange" +msgstr "橘色" + +#: commandentry.cpp:121 +#, kde-format +msgid "Light Orange" +msgstr "亮橘色" + +#: commandentry.cpp:122 +#, kde-format +msgid "Dark Grey" +msgstr "暗灰色" + +#: commandentry.cpp:122 +#, kde-format +msgid "Grey" +msgstr "灰色" + +#: commandentry.cpp:122 +#, kde-format +msgid "Light Grey" +msgstr "亮灰色" + +#: commandentry.cpp:130 +#, kde-format +msgid "Background Color" +msgstr "背景顏色" + +#: commandentry.cpp:147 +#, kde-format +msgid "Text Color" +msgstr "文字顏色" + +#: commandentry.cpp:158 +#, kde-format +msgid "Font" +msgstr "字型" + +#: commandentry.cpp:161 +#, kde-format +msgid "Bold" +msgstr "粗體" + +#: commandentry.cpp:166 +#, kde-format +msgid "Italic" +msgstr "斜體" + +#: commandentry.cpp:172 +#, kde-format +msgid "Increase Size" +msgstr "增加尺寸" + +#: commandentry.cpp:176 +#, kde-format +msgid "Decrease Size" +msgstr "減少尺寸" + +#: commandentry.cpp:181 +#, kde-format +msgid "Select" +msgstr "選擇" + +#: commandentry.cpp:656 +#, kde-format +msgid "Interrupted" +msgstr "已中斷" + +#. i18n: ectx: property (windowTitle), widget (QWidget, StandardSearchBar) +#. i18n: ectx: property (windowTitle), widget (QWidget, ExtendedSearchBar) +#: extendedsearchbar.ui:14 standardsearchbar.ui:14 +#, kde-format +msgid "SearchBar" +msgstr "搜尋列" + +#. i18n: ectx: property (text), widget (QToolButton, close) +#. i18n: ectx: property (text), widget (QToolButton, openExtended) +#. i18n: ectx: property (text), widget (QToolButton, openStandard) +#. i18n: ectx: property (text), widget (QToolButton, addFlag) +#. i18n: ectx: property (text), widget (QToolButton, removeFlag) +#: extendedsearchbar.ui:22 extendedsearchbar.ui:77 extendedsearchbar.ui:159 +#: extendedsearchbar.ui:166 standardsearchbar.ui:22 standardsearchbar.ui:86 +#, kde-format +msgid "..." +msgstr "..." + +#. i18n: ectx: property (text), widget (QLabel, label) +#: extendedsearchbar.ui:47 standardsearchbar.ui:32 +#, kde-format +msgid "Find:" +msgstr "尋找:" + +#. i18n: ectx: property (text), widget (QPushButton, next) +#: extendedsearchbar.ui:61 standardsearchbar.ui:42 +#, kde-format +msgid "&Next" +msgstr "下一個(&N)" + +#. i18n: ectx: property (text), widget (QPushButton, previous) +#: extendedsearchbar.ui:68 standardsearchbar.ui:49 +#, kde-format +msgid "&Previous" +msgstr "前一個(&P)" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: extendedsearchbar.ui:102 +#, kde-format +msgid "Replace:" +msgstr "取代:" + +#. i18n: ectx: property (text), widget (QPushButton, replace) +#: extendedsearchbar.ui:116 +#, kde-format +msgid "&Replace" +msgstr "取代(&R)" + +#. i18n: ectx: property (text), widget (QPushButton, replaceAll) +#: extendedsearchbar.ui:123 +#, kde-format +msgid "Replace &All" +msgstr "全部取代(&A)" + +#. i18n: ectx: property (text), widget (QLabel, label_3) +#: extendedsearchbar.ui:139 +#, kde-format +msgid "Search in:" +msgstr "搜尋於:" + +#. i18n: ectx: property (text), widget (QCheckBox, matchCase) +#: extendedsearchbar.ui:173 standardsearchbar.ui:72 +#, kde-format +msgid "&Match case" +msgstr "符合大小寫(&M)" + +#: imageentry.cpp:53 imageentry.cpp:307 +#, kde-format +msgid "Configure Image" +msgstr "設定影像" + +#: imageentry.cpp:204 +#, kde-format +msgid "Right click here to insert image" +msgstr "點擊右鍵以插入影像" + +#: imageentry.cpp:222 +#, kde-format +msgid "Cannot load image %1" +msgstr "無法載入影像 %1" + +#. i18n: ectx: property (windowTitle), widget (QWidget, ImageSettingsBase) +#: imagesettings.ui:14 +#, kde-format +msgid "Image Settings" +msgstr "影像設定" + +#. i18n: ectx: property (text), widget (QPushButton, openDialogButton) +#: imagesettings.ui:25 +#, kde-format +msgid "Open" +msgstr "開啟" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: imagesettings.ui:34 +#, kde-format +msgid "Display Size" +msgstr "顯示大小" + +#. i18n: ectx: property (text), widget (QLabel, label) +#. i18n: ectx: property (text), widget (QLabel, label_5) +#: imagesettings.ui:43 imagesettings.ui:97 +#, kde-format +msgid "Width" +msgstr "寬度" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#. i18n: ectx: property (text), widget (QLabel, label_6) +#: imagesettings.ui:56 imagesettings.ui:110 +#, kde-format +msgid "Height" +msgstr "高度" + +#. i18n: ectx: property (title), widget (QGroupBox, gbPreview) +#: imagesettings.ui:72 +#, kde-format +msgid "Preview" +msgstr "預覽" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) +#: imagesettings.ui:84 +#, kde-format +msgid "Print Size" +msgstr "列印大小" + +#. i18n: ectx: property (text), widget (QCheckBox, useDisplaySize) +#: imagesettings.ui:90 +#, kde-format +msgid "Use Display Size" +msgstr "使用顯示大小" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "(auto)" +msgstr "(自動)" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "px" +msgstr "px" + +#: imagesettingsdialog.cpp:45 +#, kde-format +msgid "%" +msgstr "%" + +#: imagesettingsdialog.cpp:138 +#, kde-format +msgid "Open image file" +msgstr "開啟影像檔" + +#: latexentry.cpp:67 textentry.cpp:65 +#, kde-format +msgid "Show LaTeX code" +msgstr "顯示 LaTeX 程式碼" + +#. i18n: ectx: label, entry (latexCommand), group (Cantor) +#: lib/cantor_libs.kcfg:10 +#, kde-format +msgid "Path to the latex executable" +msgstr "latex 執行檔路徑" + +#. i18n: ectx: label, entry (dvipsCommand), group (Cantor) +#: lib/cantor_libs.kcfg:14 +#, kde-format +msgid "Path to the dvips executable" +msgstr "dvips 執行檔路徑" + +#: lib/defaultvariablemodel.cpp:75 +#, kde-format +msgctxt "@title:column" +msgid "Name" +msgstr "名稱" + +#: lib/defaultvariablemodel.cpp:78 +#, kde-format +msgctxt "@title:column" +msgid "Value" +msgstr "數值" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/axisrange.ui:19 +#, kde-format +msgid "From:" +msgstr "從:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: lib/directives/axisrange.ui:40 +#, kde-format +msgid "To:" +msgstr "到:" + +#: lib/directives/plotdirectives.cpp:34 +#, kde-format +msgid "Main title" +msgstr "主標題" + +#: lib/directives/plotdirectives.cpp:45 +#, kde-format +msgid "Abscissa scale" +msgstr "橫座標調整大小" + +#: lib/directives/plotdirectives.cpp:56 +#, kde-format +msgid "Ordinate scale" +msgstr "縱座標調整大小" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: lib/directives/plottitle.ui:19 +#, kde-format +msgid "Plot title:" +msgstr "繪製標題:" + +#: main.cpp:36 +#, kde-format +msgid "KDE Frontend to mathematical applications" +msgstr "Mathematical 應用程式的 KDE 前端介面" + +#: main.cpp:85 +#, kde-format +msgid "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" +msgstr "(C) 2016 Filipe Saraiva
    (C) 2009-2015 Alexander Rieder" + +#: main.cpp:89 +#, kde-format +msgid "Filipe Saraiva" +msgstr "Filipe Saraiva" + +#: main.cpp:89 +#, kde-format +msgid "Maintainer
    Qt5/KF5 port, Scilab and Python backends" +msgstr "維護者
    Qt5/KF5 移植,Scilab 與 Python 後端介面" + +#: main.cpp:91 +#, kde-format +msgid "Original author
    Maintainer (2009 - 2015)" +msgstr "原始作者
    維護者 (2009 - 2015)" + +#: main.cpp:92 +#, kde-format +msgid "Aleix Pol Gonzalez" +msgstr "Aleix Pol Gonzalez" + +#: main.cpp:92 +#, kde-format +msgid "KAlgebra backend" +msgstr "KAlgebra 的後端介面" + +#: main.cpp:93 +#, kde-format +msgid "Miha Čančula" +msgstr "Miha Čančula" + +#: main.cpp:93 +#, kde-format +msgid "Octave backend" +msgstr "Octave 後端介面" + +#: main.cpp:95 +#, kde-format +msgid "Martin Küttler" +msgstr "Martin Küttler" + +#: main.cpp:95 +#, kde-format +msgid "Interface" +msgstr "介面" + +#: main.cpp:97 main.cpp:98 +#, kde-format +msgid "Cantor icon" +msgstr "Cantor 圖示" + +#: main.cpp:106 +#, kde-format +msgid "Use backend " +msgstr "使用後端介面 " + +#: main.cpp:109 +#, kde-format +msgid "Documents to open." +msgstr "要開啟的文件。" + +#: main.cpp:144 worksheet.cpp:1009 +#, kde-format +msgid "Couldn't open the file %1" +msgstr "無法開啟檔案 %1" + +#: pagebreakentry.cpp:39 +#, kde-format +msgid "--- Page Break ---" +msgstr "--- 頁面中斷 ---" + +#: panelplugins/helppanel/helppanelplugin.cpp:44 +#, kde-format +msgid "

    Cantor

    The KDE way to do Mathematics" +msgstr "

    Cantor

    在 KDE 上跑 Mathematics" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: panelplugins/variablemgr/newvardlg.ui:17 +#, kde-format +msgid "Name:" +msgstr "名稱:" + +#. i18n: ectx: property (text), widget (QLabel, label_2) +#: panelplugins/variablemgr/newvardlg.ui:27 +#, kde-format +msgid "Value:" +msgstr "值:" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:53 +#, kde-format +msgid "Add new variable" +msgstr "新增變數" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:60 +#, kde-format +msgid "Load Variables" +msgstr "載入變數" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:67 +#, kde-format +msgid "Store Variables" +msgstr "儲存變數" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:74 +#, kde-format +msgid "Clear Variables" +msgstr "清除變數" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Are you sure you want to remove all variables?" +msgstr "您確定要移除所有的變數嗎?" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:109 +#, kde-format +msgid "Confirmation - Cantor" +msgstr "確認 - Cantor" + +#: panelplugins/variablemgr/variablemanagerwidget.cpp:144 +#, kde-format +msgid "Load file" +msgstr "載入檔案" + +#: resultitem.cpp:71 +#, kde-format +msgid "Remove result" +msgstr "移除結果" + +#: scripteditor/scripteditorwidget.cpp:59 +#, kde-format +msgid "" +"A KDE text-editor component could not be found;\n" +"please check your KDE installation." +msgstr "" +"找不到 KDE 文字編輯器元件;\n" +"請檢查您的 KDE 安裝。" + +#: scripteditor/scripteditorwidget.cpp:146 +#, kde-format +msgid "Script Editor" +msgstr "文稿編輯器" + +#: scripteditor/scripteditorwidget.cpp:149 +#, kde-format +msgid "Script Editor - %1" +msgstr "文稿編輯器 - %1" + +#: searchbar.cpp:150 searchbar.cpp:199 +#, kde-format +msgid "Not found" +msgstr "找不到" + +#: searchbar.cpp:153 +#, kde-format +msgid "Reached beginning" +msgstr "到達頂端" + +#: searchbar.cpp:202 +#, kde-format +msgid "Reached end" +msgstr "到達底端" + +#: searchbar.cpp:259 +#, kde-format +msgid "Replaced %1 instance" +msgid_plural "Replaced %1 instances" +msgstr[0] "取代了 %1 個項目" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Commands" +msgstr "指令" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Results" +msgstr "結果" + +#: searchbar.cpp:354 searchbar.cpp:383 +#, kde-format +msgid "Errors" +msgstr "錯誤" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "Text" +msgstr "文字" + +#: searchbar.cpp:355 searchbar.cpp:384 +#, kde-format +msgid "LaTeX Code" +msgstr "LaTeX 碼" + +#. i18n: ectx: property (text), widget (QLabel, label) +#: settings.ui:19 +#, kde-format +msgid "Default Backend:" +msgstr "預設後端介面:" + +#. i18n: ectx: property (toolTip), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:35 +#, kde-format +msgid "" +"When enabled, Cantor will automatically evaluate every entry below the " +"current one." +msgstr "開啟時,Cantor 會自動重新計算在目前項目下的每個項目。" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AutoEval) +#: settings.ui:38 +#, kde-format +msgid "Reevaluate Entries automatically" +msgstr "自動重新計算項目" + +#. i18n: ectx: property (title), widget (QGroupBox, groupBox) +#: settings.ui:47 +#, kde-format +msgid "Defaults" +msgstr "預設值" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_TypesetDefault) +#: settings.ui:53 +#, kde-format +msgid "Enable LaTeX Typesetting" +msgstr "開啟 LaTeX 排版功能" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_HighlightDefault) +#: settings.ui:60 +#, kde-format +msgid "Enable Syntax Highlighting" +msgstr "開啟語法突顯功能" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_CompletionDefault) +#: settings.ui:67 +#, kde-format +msgid "Enable Completion" +msgstr "開啟補完功能" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_ExpressionNumberingDefault) +#: settings.ui:74 +#, kde-format +msgid "Enable Line Numbers" +msgstr "開啟行號功能" + +#. i18n: ectx: property (text), widget (QCheckBox, kcfg_AnimationDefault) +#: settings.ui:81 +#, kde-format +msgid "Enable Worksheet Animations" +msgstr "開啟工作表動畫" + +#: textresultitem.cpp:59 +#, kde-format +msgid "Show Rendered" +msgstr "顯示成像" + +#: textresultitem.cpp:61 +#, kde-format +msgid "Show Code" +msgstr "顯示程式碼" + +#: textresultitem.cpp:122 +#, kde-format +msgid "Cannot render Eps file. You may need additional packages" +msgstr "無法繪製 Eps 檔。您可能需要額外的套件" + +#: worksheet.cpp:895 +#, kde-format +msgid "Cannot write file %1." +msgstr "無法寫入檔案 %1。" + +#: worksheet.cpp:920 +#, kde-format +msgid "Cannot write file." +msgstr "無法寫入檔案。" + +#: worksheet.cpp:938 worksheet.cpp:979 +#, kde-format +msgid "Error saving file %1" +msgstr "儲存檔案 %1 時發生錯誤" + +#: worksheet.cpp:958 +#, kde-format +msgid "" +"In read-only mode Cantor couldn't guarantee, that the export will be valid " +"for %1" +msgstr "在唯讀模式中 Cantor 不能確保輸出對 %1 合法。" + +#: worksheet.cpp:991 +#, kde-format +msgid "Error loading latex.xsl stylesheet" +msgstr "載入 latex.xsl 樣式表時發生錯誤" + +#: worksheet.cpp:1032 worksheet.cpp:1041 +#, kde-format +msgid "The selected file is not a valid Cantor project file." +msgstr "選擇的檔案不是有效的 Cantor 專案檔案。" + +#: worksheet.cpp:1060 +#, kde-format +msgid "%1 backend was not found. Editing and executing entries is not possible" +msgstr "找不到 %1 後端,將無法編輯和執行項目" + +#: worksheet.cpp:1229 worksheet.cpp:1240 +#, kde-format +msgid "Command Entry" +msgstr "指令項目" + +#: worksheet.cpp:1230 worksheet.cpp:1241 +#, kde-format +msgid "Text Entry" +msgstr "文字項目" + +#: worksheet.cpp:1232 worksheet.cpp:1243 +#, kde-format +msgid "Markdown Entry" +msgstr "Markdown 項目" + +#: worksheet.cpp:1235 worksheet.cpp:1246 +#, kde-format +msgid "LaTeX Entry" +msgstr "LaTeX 項目" + +#: worksheet.cpp:1237 worksheet.cpp:1248 +#, kde-format +msgid "Image" +msgstr "影像" + +#: worksheet.cpp:1238 worksheet.cpp:1249 +#, kde-format +msgid "Page Break" +msgstr "頁面中斷" + +#: worksheet.cpp:1251 +#, kde-format +msgid "Insert Entry After" +msgstr "插入項目於以下項目之後" + +#: worksheet.cpp:1253 +#, kde-format +msgid "Insert Entry Before" +msgstr "插入項目於以下項目之前" + +#: worksheet.cpp:1264 +#, kde-format +msgid "Insert LaTeX Entry" +msgstr "插入 Latex 項目" + +#: worksheet.cpp:1321 +#, kde-format +msgctxt "@action" +msgid "Text &Color..." +msgstr "文字顏色(&C)..." + +#: worksheet.cpp:1322 +#, kde-format +msgctxt "@label text color" +msgid "Color" +msgstr "顏色" + +#: worksheet.cpp:1330 +#, kde-format +msgctxt "@action" +msgid "Text &Highlight..." +msgstr "文字突顯(&H)..." + +#: worksheet.cpp:1337 +#, kde-format +msgctxt "@action" +msgid "&Font" +msgstr "字型(&F)" + +#: worksheet.cpp:1344 +#, kde-format +msgctxt "@action" +msgid "Font &Size" +msgstr "字型大小(&S)" + +#: worksheet.cpp:1353 +#, kde-format +msgctxt "@action boldify selected text" +msgid "&Bold" +msgstr "粗體(&B)" + +#: worksheet.cpp:1367 +#, kde-format +msgctxt "@action italicize selected text" +msgid "&Italic" +msgstr "斜體(&I)" + +#: worksheet.cpp:1381 +#, kde-format +msgctxt "@action underline selected text" +msgid "&Underline" +msgstr "底線(&U)" + +#: worksheet.cpp:1394 +#, kde-format +msgctxt "@action" +msgid "&Strike Out" +msgstr "刪除線(&S)" + +#: worksheet.cpp:1407 +#, kde-format +msgctxt "@action" +msgid "Align &Left" +msgstr "置左(&L)" + +#: worksheet.cpp:1410 +#, kde-format +msgctxt "@label left justify" +msgid "Left" +msgstr "置左" + +#: worksheet.cpp:1419 +#, kde-format +msgctxt "@action" +msgid "Align &Center" +msgstr "置中(&C)" + +#: worksheet.cpp:1422 +#, kde-format +msgctxt "@label center justify" +msgid "Center" +msgstr "置中" + +#: worksheet.cpp:1431 +#, kde-format +msgctxt "@action" +msgid "Align &Right" +msgstr "置右(&R)" + +#: worksheet.cpp:1434 +#, kde-format +msgctxt "@label right justify" +msgid "Right" +msgstr "置右" + +#: worksheet.cpp:1443 +#, kde-format +msgctxt "@action" +msgid "&Justify" +msgstr "兩邊對齊(&J)" + +#: worksheet.cpp:1446 +#, kde-format +msgctxt "@label justify fill" +msgid "Justify" +msgstr "兩邊對齊" + +#: worksheetentry.cpp:323 worksheetentry.cpp:702 +#, kde-format +msgid "Remove Entry" +msgstr "移除項目" + +#: worksheetentry.cpp:707 +#, kde-format +msgid "Drag Entry" +msgstr "拖曳項目" + +#~ msgid "" +#~ "The backend with which this file was generated is not installed. It needs " +#~ "%1" +#~ msgstr "產生此檔案的後端介面並未安裝在此系統上。需要 %1" + +#~ msgid "Publish Worksheet" +#~ msgstr "發布工作表" + +#~ msgid "Waiting for Image..." +#~ msgstr "等待影像中..." + +#~ msgid "Insert" +#~ msgstr "插入" + +#~ msgid "%1: %2" +#~ msgstr "%1:%2" diff --git a/src/.emacs-dirvars b/src/.emacs-dirvars new file mode 100644 index 0000000..c8b2d09 --- /dev/null +++ b/src/.emacs-dirvars @@ -0,0 +1,74 @@ +;; -*- emacs-lisp -*- +;; +;; This file is processed by the dirvars emacs package. Each variable +;; setting below is performed when this dirvars file is loaded. +;; +kde-emacs-after-parent-string: "" +;evaluate: (c-set-offset 'access-label '0) +;evaluate: (c-set-offset 'topmost-intro '+) +;evaluate: (c-set-offset 'inline-open '+) +;evaluate: (setq 'innamespace '--) +evaluate: (setq c-offsets-alist '((string . c-lineup-dont-change) + (c . c-lineup-C-comments) + (defun-open . 0) + (defun-close . 0) + (defun-block-intro . +) + (class-open . 0) + (class-close . 0) + (inline-close . 0) + (func-decl-cont . +) + (knr-argdecl . 0) + (topmost-intro . 0) + (topmost-intro-cont . 0) + (member-init-intro . +) + (member-init-cont . c-lineup-multi-inher) + (inher-intro . +) + (inher-cont . c-lineup-multi-inher) + (block-open . 0) + (block-close . 0) + (brace-list-close . 0) + (brace-list-intro . +) + (brace-list-entry . 0) + (brace-entry-open . 0) + (statement . 0) + (statement-case-intro . +) + (substatement . +) + (case-label . +) + (access-label . -) + (do-while-closure . 0) + (else-clause . 0) + (catch-clause . 0) + (comment-intro . c-lineup-comment) + (arglist-cont . 0) + (arglist-cont-nonempty . c-lineup-arglist) + (stream-op . c-lineup-streamop) + (inclass . ++) + (cpp-macro . + [0]) + (cpp-macro-cont . c-lineup-dont-change) + (friend . 0) + (objc-method-intro . + [0]) + (objc-method-args-cont . c-lineup-ObjC-method-args) + (objc-method-call-cont . c-lineup-ObjC-method-call) + (extern-lang-open . 0) + (extern-lang-close . 0) + (inextern-lang . +) + (namespace-open . 0) + (namespace-close . 0) + (innamespace . 0) + (template-args-cont c-lineup-template-args +) + (inlambda . c-lineup-inexpr-block) + (lambda-intro-cont . +) + (inexpr-statement . 0) + (inexpr-class . +) + (statement-block-intro . +) + (knr-argdecl-intro . +) + (substatement-open . 0) + (label . 2) + (statement-case-open . 0) + (statement-cont . +) + (arglist-intro . +) + (arglist-close . +) + (inline-open . 0) + (brace-list-open . 0))) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..2dbfb0b --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,112 @@ +######################################################################### +# Subdirectories +######################################################################### +add_subdirectory(lib) +add_subdirectory(scripteditor) + +include_directories( lib ${CMAKE_CURRENT_BINARY_DIR}/lib) +if(BUILD_TESTING) + include(ECMMarkAsTest) + include_directories( lib/test ) +endif(BUILD_TESTING) + +if(LIBSPECTRE_FOUND) + include_directories(${LIBSPECTRE_INCLUDE_DIR}) +endif(LIBSPECTRE_FOUND) +add_subdirectory(backends) +add_subdirectory(assistants) +add_subdirectory(xslt) +add_subdirectory(panelplugins) + + +#build the config object in a separate library, shared between shell and part +kconfig_add_kcfg_files(config_SRCS settings.kcfgc) +add_library( cantor_config SHARED ${config_SRCS} ) +target_link_libraries( cantor_config KF5::Parts KF5::NewStuff ) +install( TARGETS cantor_config ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) + +set(cantor_SRCS + main.cpp + cantor.cpp + backendchoosedialog.cpp + ) + +install(FILES cantor.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(cantor_SRCS settings.ui) +ki18n_wrap_ui(cantor_SRCS backendchooser.ui) + +file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../icons/*-apps-cantor.png") +ecm_add_app_icon(cantor_SRCS ICONS ${ICONS_SRCS}) +add_executable(cantor ${cantor_SRCS}) + +target_link_libraries(cantor KF5::Parts KF5::NewStuff KF5::ConfigCore KF5::CoreAddons KF5::ConfigGui + KF5::Crash KF5::XmlGui cantorlibs cantor_config) + +########### install files ############### +install(TARGETS cantor ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) +install( PROGRAMS org.kde.cantor.desktop DESTINATION ${KDE_INSTALL_APPDIR} ) +install( FILES cantor_shell.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/cantor ) +install( FILES cantor.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) + +######################################################################### +# KPART SECTION +######################################################################### + +set(cantor_PART_SRCS + cantor_part.cpp + worksheet.cpp + worksheetview.cpp + worksheetentry.cpp + worksheettextitem.cpp + worksheetimageitem.cpp + commandentry.cpp + textentry.cpp + markdownentry.cpp + pagebreakentry.cpp + imageentry.cpp + latexentry.cpp + placeholderentry.cpp + worksheetcursor.cpp + searchbar.cpp + actionbar.cpp + worksheettoolbutton.cpp + imagesettingsdialog.cpp + scripteditor/scripteditorwidget.cpp + resultitem.cpp + textresultitem.cpp + imageresultitem.cpp + animationresultitem.cpp + loadedexpression.cpp + animation.cpp + epsrenderer.cpp + ) + +ki18n_wrap_ui(cantor_PART_SRCS imagesettings.ui) +ki18n_wrap_ui(cantor_PART_SRCS standardsearchbar.ui) +ki18n_wrap_ui(cantor_PART_SRCS extendedsearchbar.ui) + +string(CONCAT PATH_TO_CANTOR_BACKENDS ${CMAKE_INSTALL_PREFIX} "/${PLUGIN_INSTALL_DIR}") + +configure_file (config-cantor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-cantor.h ) + +kcoreaddons_add_plugin(cantorpart + SOURCES ${cantor_PART_SRCS} + JSON "cantor_part.json" + INSTALL_NAMESPACE ".") + +set_target_properties(cantorpart PROPERTIES PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}") + +target_link_libraries(cantorpart KF5::Parts KF5::NewStuff + KF5::TextEditor ${Qt5XmlPatterns_LIBRARIES} + KF5::KIOCore KF5::KIOFileWidgets KF5::KIOWidgets + Qt5::PrintSupport cantorlibs cantor_config ) +if(LIBSPECTRE_FOUND) + target_link_libraries(cantorpart ${LIBSPECTRE_LIBRARY}) +endif(LIBSPECTRE_FOUND) +if(Discount_FOUND) + target_link_libraries(cantorpart Discount::Lib) +endif(Discount_FOUND) + +install( FILES cantor_part.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/cantor ) +install( FILES cantor_scripteditor.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/cantor ) diff --git a/src/Messages.sh b/src/Messages.sh new file mode 100644 index 0000000..f66e3d3 --- /dev/null +++ b/src/Messages.sh @@ -0,0 +1,6 @@ +#! /usr/bin/env bash +$EXTRACTRC `find . -name \*.rc` >> rc.cpp || exit 11 +$EXTRACTRC `find . -name \*.ui` >> rc.cpp || exit 12 +$EXTRACTRC `find . -name \*.kcfg` >> rc.cpp || exit 13 +$XGETTEXT `find . -name \*.cpp | grep -v '/test/'` -o $podir/cantor.pot +rm -f rc.cpp diff --git a/src/actionbar.cpp b/src/actionbar.cpp new file mode 100644 index 0000000..8ec22ee --- /dev/null +++ b/src/actionbar.cpp @@ -0,0 +1,93 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "actionbar.h" +#include "worksheet.h" +#include "worksheetentry.h" +#include "worksheettoolbutton.h" + +#include + +ActionBar::ActionBar(WorksheetEntry* parent) + : QGraphicsObject(parent) +{ + m_pos = 0; + m_height = 0; + QPointF p = worksheet()->worksheetView()->viewRect().topRight(); + qreal w = qMin(parent->size().width(), + parent->mapFromScene(p).x()); + setPos(w, 0); + connect(worksheet()->worksheetView(), SIGNAL(viewRectChanged(QRectF)), + this, SLOT(updatePosition())); +} + +WorksheetToolButton* ActionBar::addButton(const QIcon& icon, const QString& toolTip, + QObject* receiver, const char* method ) +{ + WorksheetToolButton* button = new WorksheetToolButton(this); + button->setIcon(icon); + button->setIconScale(worksheet()->epsRenderer()->scale()); + button->setToolTip(toolTip); + if (receiver && method) + connect(button, SIGNAL(clicked()), receiver, method); + m_pos -= button->width() + 2; + m_height = (m_height > button->height()) ? m_height : button->height(); + button->setPos(m_pos, 4); + m_buttons.append(button); + return button; +} + +void ActionBar::addSpace() +{ + m_pos -= 8; +} + +void ActionBar::updatePosition() +{ + if (!parentEntry()) + return; + QPointF p = worksheet()->worksheetView()->viewRect().topRight(); + qreal w = qMin(parentEntry()->size().width(), + parentEntry()->mapFromScene(p).x()); + setPos(w, 0); + const qreal scale = worksheet()->epsRenderer()->scale(); + foreach(WorksheetToolButton* button, m_buttons) { + button->setIconScale(scale); + } +} + +WorksheetEntry* ActionBar::parentEntry() +{ + return qobject_cast(parentObject()); +} + +QRectF ActionBar::boundingRect() const +{ + return QRectF(m_pos, 0, -m_pos, m_height); +} + +void ActionBar::paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) +{ +} + +Worksheet* ActionBar::worksheet() +{ + return qobject_cast(scene()); +} diff --git a/src/actionbar.h b/src/actionbar.h new file mode 100644 index 0000000..50c1eee --- /dev/null +++ b/src/actionbar.h @@ -0,0 +1,62 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef ACTIONBAR_H +#define ACTIONBAR_H + +#include + +#include + +class Worksheet; +class WorksheetEntry; +class WorksheetToolButton; + +class ActionBar : public QGraphicsObject +{ + Q_OBJECT + public: + explicit ActionBar(WorksheetEntry* parent); + ~ActionBar() override = default; + + WorksheetToolButton* addButton(const QIcon& icon, const QString& toolTip, + QObject* receiver = nullptr, + const char* method = nullptr); + void addSpace(); + + WorksheetEntry* parentEntry(); + + QRectF boundingRect() const override; + void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*) override; + + public Q_SLOTS: + void updatePosition(); + + private: + Worksheet* worksheet(); + + private: + Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity) + QList m_buttons; + qreal m_pos; + qreal m_height; +}; + +#endif // ACTIONBAR_H diff --git a/src/animation.cpp b/src/animation.cpp new file mode 100644 index 0000000..5e6679b --- /dev/null +++ b/src/animation.cpp @@ -0,0 +1,109 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "animation.h" + +#include +#include + +Animation::Animation(QObject* parent) : QObject(parent) +{ + +} + +Animation::~Animation() +{ + if(m_movie) + m_movie->stop(); +} + +void Animation::setMovie(QMovie* movie) +{ + disconnect(nullptr, nullptr, this, SLOT(movieFrameChanged())); + m_movie=movie; + connect(movie, SIGNAL(frameChanged(int)), this, SLOT(movieFrameChanged())); +} + +QMovie* Animation::movie() +{ + return m_movie; +} + +void Animation::setPosition(const QTextCursor& cursor) +{ + m_position=cursor; +} + +QTextCursor Animation::position() +{ + return m_position; +} + +void Animation::movieFrameChanged() +{ + QTextCursor cursor = m_position; + cursor.setPosition(m_position.position()+1, QTextCursor::KeepAnchor); + + const QString& text=cursor.selectedText(); + + if (text==QString(QChar::ObjectReplacementCharacter)) { + // update a bogus property, which will trigger a paint + QTextCharFormat format2; + format2.setProperty(QTextFormat::UserFormat + 2, m_movie->currentFrameNumber()); + cursor.mergeCharFormat(format2); + } else { + // we got removed from the document + qDebug()<<"animation got removed"; + disconnect(m_movie.data(), &QMovie::frameChanged, this, &Animation::movieFrameChanged); + } +} + + + +AnimationHelperItem::AnimationHelperItem( ) : m_animation(new Animation()) +{ +} + +AnimationHelperItem::AnimationHelperItem(const AnimationHelperItem& other) +{ + m_animation=other.m_animation; +} + +void AnimationHelperItem::setPosition(const QTextCursor& cursor) +{ + m_animation->setPosition(cursor); +} + +QTextCursor AnimationHelperItem::position() const +{ + return m_animation->position(); +} + +void AnimationHelperItem::setMovie(QMovie* movie) +{ + m_animation->setMovie(movie); +} + +QMovie* AnimationHelperItem::movie() const +{ + return m_animation->movie(); +} + + diff --git a/src/animation.h b/src/animation.h new file mode 100644 index 0000000..aa43b9a --- /dev/null +++ b/src/animation.h @@ -0,0 +1,75 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _ANIMATION_H +#define _ANIMATION_H + +#include +#include +#include +#include + +class QMovie; + +//Represents an animation placed in a QTextDocument +class Animation : public QObject +{ + Q_OBJECT + public: + explicit Animation( QObject* parent=nullptr); + ~Animation() override; + + void setMovie(QMovie* movie); + QMovie* movie(); + + void setPosition(const QTextCursor& cursor); + QTextCursor position(); + + public Q_SLOTS: + void movieFrameChanged(); + + private: + QPointer m_movie; + QTextCursor m_position; +}; + + +//Helper Object used for storing Animations in the TextCharFormat +class AnimationHelperItem +{ + public: + AnimationHelperItem( ); + AnimationHelperItem( const AnimationHelperItem& other); + ~AnimationHelperItem() = default; + + QTextCursor position() const; + void setPosition(const QTextCursor& cursor); + + void setMovie(QMovie* movie); + QMovie* movie() const; + + private: + QSharedPointer m_animation; +}; + + +Q_DECLARE_METATYPE(AnimationHelperItem) + +#endif /* _ANIMATION_H */ diff --git a/src/animationresultitem.cpp b/src/animationresultitem.cpp new file mode 100644 index 0000000..58909d0 --- /dev/null +++ b/src/animationresultitem.cpp @@ -0,0 +1,152 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "animationresultitem.h" +#include "commandentry.h" +#include "lib/result.h" +#include "lib/animationresult.h" + +#include +#include +#include + +#include + +AnimationResultItem::AnimationResultItem(QGraphicsObject* parent, Cantor::Result* result) + : WorksheetImageItem(parent), ResultItem(result), m_height(0), m_movie(nullptr) +{ + update(); +} + +double AnimationResultItem::setGeometry(double x, double y, double w) +{ + Q_UNUSED(w); + setPos(x,y); + + return m_height; +} + +void AnimationResultItem::populateMenu(QMenu* menu, QPointF pos) +{ + ResultItem::addCommonActions(this, menu); + + menu->addSeparator(); + if (m_movie) { + if (m_movie->state() == QMovie::Running) + menu->addAction(QIcon::fromTheme(QLatin1String("media-playback-pause")), i18n("Pause"), + this, SLOT(pauseMovie())); + else + menu->addAction(QIcon::fromTheme(QLatin1String("media-playback-start")), i18n("Start"), + m_movie, SLOT(start())); + if (m_movie->state() == QMovie::Running || + m_movie->state() == QMovie::Paused) + menu->addAction(QIcon::fromTheme(QLatin1String("media-playback-stop")), i18n("Stop"), + this, SLOT(stopMovie())); + } + qDebug() << "populate Menu"; + emit menuCreated(menu, mapToParent(pos)); +} + +void AnimationResultItem::update() +{ + Q_ASSERT(m_result->type() == Cantor::AnimationResult::Type); + QMovie* mov; + switch(m_result->type()) { + case Cantor::AnimationResult::Type: + mov = static_cast(m_result->data().value()); + setMovie(mov); + break; + default: + break; + } +} + +QRectF AnimationResultItem::boundingRect() const +{ + return QRectF(0, 0, width(), height()); +} + +double AnimationResultItem::width() const +{ + return WorksheetImageItem::width(); +} + +double AnimationResultItem::height() const +{ + return WorksheetImageItem::height(); +} + + +void AnimationResultItem::setMovie(QMovie* movie) +{ + if (m_movie) { + m_movie->disconnect(this, SLOT(updateFrame())); + m_movie->disconnect(this, SLOT(updateSize())); + } + m_movie = movie; + m_height = 0; + if (m_movie) { + connect(m_movie, &QMovie::frameChanged, this, &AnimationResultItem::updateFrame); + connect(m_movie, &QMovie::resized, this, &AnimationResultItem::updateSize); + m_movie->start(); + } +} + +void AnimationResultItem::updateFrame() +{ + setImage(m_movie->currentImage()); + worksheet()->update(mapRectToScene(boundingRect())); +} + +void AnimationResultItem::updateSize(const QSize& size) +{ + if (m_height != size.height()) { + m_height = size.height(); + emit sizeChanged(); + } +} + +void AnimationResultItem::saveResult() +{ + Cantor::Result* res = result(); + const QString& filename=QFileDialog::getSaveFileName(worksheet()->worksheetView(), i18n("Save result"), QString(), res->mimeType()); + qDebug()<<"saving result to "<save(filename); +} + +void AnimationResultItem::stopMovie() +{ + if (m_movie) { + m_movie->stop(); + m_movie->jumpToFrame(0); + worksheet()->update(mapRectToScene(boundingRect())); + } +} + +void AnimationResultItem::pauseMovie() +{ + if (m_movie) + m_movie->setPaused(true); +} + +void AnimationResultItem::deleteLater() +{ + WorksheetImageItem::deleteLater(); +} diff --git a/src/animationresultitem.h b/src/animationresultitem.h new file mode 100644 index 0000000..a0f9834 --- /dev/null +++ b/src/animationresultitem.h @@ -0,0 +1,70 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef ANIMATIONRESULTITEM_H +#define ANIMATIONRESULTITEM_H + +#include "resultitem.h" +#include "worksheetimageitem.h" + +class QMovie; + +class CommandEntry; +class WorksheetEntry; + +class AnimationResultItem : public WorksheetImageItem, public ResultItem +{ + Q_OBJECT + + public: + explicit AnimationResultItem(QGraphicsObject* parent, Cantor::Result* result); + ~AnimationResultItem() override = default; + + using WorksheetImageItem::setGeometry; + double setGeometry(double x, double y, double w) override; + void populateMenu(QMenu* menu, QPointF pos) override; + + void update() override; + + void deleteLater() override; + + QRectF boundingRect() const override; + double width() const override; + double height() const override; + + protected Q_SLOTS: + void saveResult(); + void stopMovie(); + void pauseMovie(); + + private: + void setMovie(QMovie* movie); + + private Q_SLOTS: + void updateFrame(); + void updateSize(const QSize& size); + + private: + double m_height; + QMovie* m_movie; +}; + +#endif //ANIMATIONRESULTITEM_H + diff --git a/src/assistants/CMakeLists.txt b/src/assistants/CMakeLists.txt new file mode 100644 index 0000000..e220e84 --- /dev/null +++ b/src/assistants/CMakeLists.txt @@ -0,0 +1,23 @@ +function(add_assistant name) + + kcoreaddons_add_plugin("cantor_${name}" + SOURCES ${ARGN} + JSON "${name}.json" + INSTALL_NAMESPACE "cantor/assistants") + + target_link_libraries("cantor_${name}" + ${KDE4_KDEUI_LIBS} + cantorlibs) + +endfunction() + + +add_subdirectory(solve) +add_subdirectory(integrate) +add_subdirectory(differentiate) +add_subdirectory(linearalgebra) +add_subdirectory(runscript) +add_subdirectory(plot2d) +add_subdirectory(plot3d) +add_subdirectory(advancedplot) +add_subdirectory(importpackage) diff --git a/src/assistants/advancedplot/CMakeLists.txt b/src/assistants/advancedplot/CMakeLists.txt new file mode 100644 index 0000000..dcf4318 --- /dev/null +++ b/src/assistants/advancedplot/CMakeLists.txt @@ -0,0 +1,9 @@ +set( AdvancedPlotAssistant_SRCS + advancedplotassistant.cpp +) + +ki18n_wrap_ui(AdvancedPlotAssistant_SRCS advancedplotdialog.ui directivecontainer.ui) + +add_assistant(advancedplotassistant ${AdvancedPlotAssistant_SRCS}) + +install(FILES cantor_advancedplot_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor) diff --git a/src/assistants/advancedplot/advancedplotassistant.cpp b/src/assistants/advancedplot/advancedplotassistant.cpp new file mode 100644 index 0000000..3a6b21d --- /dev/null +++ b/src/assistants/advancedplot/advancedplotassistant.cpp @@ -0,0 +1,115 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "advancedplotassistant.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "ui_advancedplotdialog.h" +#include "ui_directivecontainer.h" +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +AdvancedPlotAssistant::AdvancedPlotAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void AdvancedPlotAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_advancedplot_assistant.rc")); + QAction* advplot=new QAction(i18n("Advanced Plotting"), actionCollection()); + actionCollection()->addAction(QLatin1String("advancedplot_assistant"), advplot); + connect(advplot, &QAction::triggered, this, &AdvancedPlotAssistant::requested); +} + +QStringList AdvancedPlotAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget *widget=new QWidget(dlg); + Ui::AdvancedPlotAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + //Casting the extension to correct type and checking it + Cantor::AdvancedPlotExtension * plotter=dynamic_cast + (backend()->extension(QLatin1String("AdvancedPlotExtension"))); + if (plotter==nullptr) + { + qDebug()<<"Advanced plotting extension is messed up, that's a bug."; + delete dlg; + return QStringList(); + } + + //Filling up the form accordingly + Cantor::AdvancedPlotExtension::AcceptorBase *acceptor=dynamic_cast(plotter); + QVector controls; + if (acceptor!=nullptr) + { + foreach (const Cantor::AdvancedPlotExtension::AcceptorBase::widgetProc& wProc, acceptor->widgets()) + { + QGroupBox *container=new QGroupBox(nullptr); + Cantor::AdvancedPlotExtension::DirectiveProducer *cargo=wProc(nullptr); + Ui::directiveContainer uicont; + uicont.setupUi(container); + QVBoxLayout *layout=new QVBoxLayout; + layout->addWidget(cargo); + container->setLayout(layout); + base.directivesTabs->addTab(container,cargo->windowTitle()); + controls.push_back(cargo); + } + } + + QStringList result; + if( dlg->exec()) + { + QVector list; + //FIXME lots of dynamic casts :( + for (int i=0;icount();i++) + { + QGroupBox *group=dynamic_cast(base.directivesTabs->widget(i)); + if (group!=nullptr) + if (group->isChecked()) + list.push_back(controls[i]->produceDirective()); + } + result<plotFunction2d(base.expressionEdit->text(),list); + qDeleteAll(list); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(advancedplotassistant, "advancedplotassistant.json", registerPlugin();) +#include "advancedplotassistant.moc" diff --git a/src/assistants/advancedplot/advancedplotassistant.h b/src/assistants/advancedplot/advancedplotassistant.h new file mode 100644 index 0000000..991cb7d --- /dev/null +++ b/src/assistants/advancedplot/advancedplotassistant.h @@ -0,0 +1,43 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2009 Oleksiy Protas + */ + +#ifndef _ADVANCED_PLOTASSISTANT_H +#define _ADVANCED_PLOTASSISTANT_H + +#include "assistant.h" + +// WARNING: this assistant serves as a stub to implement the rich plotting features of R. +// therefore, when finished it is to be backported and merged with plot2d + +class AdvancedPlotAssistant : public Cantor::Assistant +{ + Q_OBJECT + public: + AdvancedPlotAssistant( QObject* parent, QList args ); + ~AdvancedPlotAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _RPLOTASSISTANT_H */ diff --git a/src/assistants/advancedplot/advancedplotassistant.json b/src/assistants/advancedplot/advancedplotassistant.json new file mode 100644 index 0000000..49badbd --- /dev/null +++ b/src/assistants/advancedplot/advancedplotassistant.json @@ -0,0 +1,38 @@ +{ + "KPlugin": { + "Dependencies": [], + "Id": "AdvancedPlot", + "License": "GPL", + "Name": "AdvancedPlot", + "Name[ca@valencia]": "GràficAvançat", + "Name[ca]": "GràficAvançat", + "Name[cs]": "Pokročilý graf", + "Name[de]": "Erweitertes Plotten", + "Name[el]": "Προηγμένη σχεδίαση", + "Name[en_GB]": "AdvancedPlot", + "Name[es]": "Gráficos avanzados", + "Name[et]": "Täiustatud joonis", + "Name[fi]": "AdvancedPlot", + "Name[fr]": "Graphe avancé", + "Name[gl]": "AdvancedPlot", + "Name[it]": "Grafico avanzato", + "Name[nl]": "AdvancedPlot", + "Name[nn]": "AvansertPlott", + "Name[pl]": "Zaawansowane wykresy", + "Name[pt]": "Gráfico Avançado", + "Name[pt_BR]": "Gráfico avançado", + "Name[ru]": "Настраиваемый график", + "Name[sk]": "AdvancedPlot", + "Name[sl]": "Napreden Graf", + "Name[sv]": "Avancerat diagram", + "Name[tr]": "GelişmişGrafik", + "Name[uk]": "Складне креслення", + "Name[x-test]": "xxAdvancedPlotxx", + "Name[zh_CN]": "高级绘图", + "Name[zh_TW]": "進階繪製", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "AdvancedPlotExtension" +} diff --git a/src/assistants/advancedplot/advancedplotdialog.ui b/src/assistants/advancedplot/advancedplotdialog.ui new file mode 100644 index 0000000..d618093 --- /dev/null +++ b/src/assistants/advancedplot/advancedplotdialog.ui @@ -0,0 +1,63 @@ + + + AdvancedPlotAssistantBase + + + + 0 + 0 + 537 + 215 + + + + + + + + 10 + 75 + true + + + + Plot + + + + + + + + + Expression: + + + + + + + + + + + + Additional options: + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + diff --git a/src/assistants/advancedplot/cantor_advancedplot_assistant.rc b/src/assistants/advancedplot/cantor_advancedplot_assistant.rc new file mode 100644 index 0000000..8601f1d --- /dev/null +++ b/src/assistants/advancedplot/cantor_advancedplot_assistant.rc @@ -0,0 +1,8 @@ + + + + &Plot + + + + diff --git a/src/assistants/advancedplot/directivecontainer.ui b/src/assistants/advancedplot/directivecontainer.ui new file mode 100644 index 0000000..2e8c5cd --- /dev/null +++ b/src/assistants/advancedplot/directivecontainer.ui @@ -0,0 +1,22 @@ + + + directiveContainer + + + + 0 + 0 + 400 + 300 + + + + Option active + + + true + + + + + diff --git a/src/assistants/differentiate/CMakeLists.txt b/src/assistants/differentiate/CMakeLists.txt new file mode 100644 index 0000000..4ccf359 --- /dev/null +++ b/src/assistants/differentiate/CMakeLists.txt @@ -0,0 +1,9 @@ +set( DifferentiateAssistant_SRCS + differentiateassistant.cpp +) + +ki18n_wrap_ui(DifferentiateAssistant_SRCS differentiatedlg.ui) + +add_assistant(differentiateassistant ${DifferentiateAssistant_SRCS}) + +install( FILES cantor_differentiate_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/differentiate/cantor_differentiate_assistant.rc b/src/assistants/differentiate/cantor_differentiate_assistant.rc new file mode 100644 index 0000000..d930a43 --- /dev/null +++ b/src/assistants/differentiate/cantor_differentiate_assistant.rc @@ -0,0 +1,8 @@ + + + + &Calculate + + + + diff --git a/src/assistants/differentiate/differentiateassistant.cpp b/src/assistants/differentiate/differentiateassistant.cpp new file mode 100644 index 0000000..b30004e --- /dev/null +++ b/src/assistants/differentiate/differentiateassistant.cpp @@ -0,0 +1,83 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "differentiateassistant.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "ui_differentiatedlg.h" +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +DifferentiateAssistant::DifferentiateAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void DifferentiateAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_differentiate_assistant.rc")); + QAction* differentiate=new QAction(i18n("Differentiate"), actionCollection()); + differentiate->setIcon(QIcon::fromTheme(icon())); + actionCollection()->addAction(QLatin1String("differentiate_assistant"), differentiate); + connect(differentiate, &QAction::triggered, this, &DifferentiateAssistant::requested); +} + +QStringList DifferentiateAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget* widget=new QWidget(dlg); + Ui::DifferentiateAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + QStringList result; + if( dlg->exec()) + { + QString expression=base.expression->text(); + QString variable=base.variable->text(); + int times=base.times->value(); + + Cantor::CalculusExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("CalculusExtension"))); + + result<differentiate(expression, variable, times); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(differentiateassistant, "differentiateassistant.json", registerPlugin();) +#include "differentiateassistant.moc" diff --git a/src/assistants/differentiate/differentiateassistant.h b/src/assistants/differentiate/differentiateassistant.h new file mode 100644 index 0000000..788832e --- /dev/null +++ b/src/assistants/differentiate/differentiateassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _DIFFERENTIATEASSISTANT_H +#define _DIFFERENTIATEASSISTANT_H + +#include "assistant.h" + +class DifferentiateAssistant : public Cantor::Assistant +{ + public: + DifferentiateAssistant( QObject* parent, QList args ); + ~DifferentiateAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _DIFFERENTIATEASSISTANT_H */ diff --git a/src/assistants/differentiate/differentiateassistant.json b/src/assistants/differentiate/differentiateassistant.json new file mode 100644 index 0000000..840abcf --- /dev/null +++ b/src/assistants/differentiate/differentiateassistant.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify calculating derivatives of expressions", + "Description[ca@valencia]": "Un diàleg assistent per simplificar els càlculs de derivades d'expressions", + "Description[ca]": "Un diàleg assistent per simplificar els càlculs de derivades d'expressions", + "Description[cs]": "Pomocný dialog pro zjednodušení derivace výrazů", + "Description[de]": "Ein Assistent, um die Berechnung von Ableitungen von Ausdrücken zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση του υπολογισμού παραγώγων εκφράσεων", + "Description[en_GB]": "An Assistant dialogue to simplify calculating derivatives of expressions", + "Description[es]": "Un diálogo de asistente para simplificar el cálculo de derivadas de expresiones", + "Description[et]": "Avaldiste tuletiste arvutamist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan lausekkeiden derivaattojen laskemista", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant le calcul de dérivées d'expressions", + "Description[gl]": "Un diálogo auxiliar para simplificar o cálculo das derivadas de expresións", + "Description[it]": "Un assistente che semplifica il calcolo di derivate di espressioni", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het berekenen van afgeleiden van expressies", + "Description[nn]": "Eit hjelpevindauge for utrekning av den deriverte av uttrykk", + "Description[pl]": "Okno dialogowe pomocnika pomagające uprościć obliczenia pochodnych z wyrażeń", + "Description[pt]": "Uma janela assistente para simplificar o cálculo de derivadas das expressões", + "Description[pt_BR]": "Um assistente para simplificar o cálculo de derivadas das expressões", + "Description[ru]": "Диалоговое окно, упрощающее вычисление производных", + "Description[sk]": "Asistenčný dialóg na uľahčenie výpočtu derivácií alebo výrazov", + "Description[sl]": "Pomočnik, ki poenostavi izračunavanje odvodov izrazov", + "Description[sv]": "En dialogruta med en guide för att förenkla beräkning av derivator för uttryck", + "Description[tr]": "İfadelerin türevlerini hesaplamayı kolaylaştırmak için kullanılan yardımcı pencere", + "Description[uk]": "Діалогове вікно помічника у обчисленні похідних від виразів", + "Description[x-test]": "xxAn Assistant dialog to simplify calculating derivatives of expressionsxx", + "Description[zh_CN]": "用于简化微分表达式计算的助手对话框", + "Description[zh_TW]": "簡化多項式導數計算的小助手對話框", + "Icon": "office-chart-area", + "Id": "Differentiate", + "License": "GPL", + "Name": "Differentiate", + "Name[ca@valencia]": "Deriva", + "Name[ca]": "Deriva", + "Name[cs]": "Derivovat", + "Name[da]": "Differentiér", + "Name[de]": "Differenzieren", + "Name[el]": "Διαφόρισε", + "Name[en_GB]": "Differentiate", + "Name[es]": "Diferenciar", + "Name[et]": "Diferentsiaalarvutus", + "Name[fi]": "Derivoi", + "Name[fr]": "Différencier", + "Name[gl]": "Diferenciar", + "Name[it]": "Funzione differenziabile", + "Name[nl]": "Differentiëren", + "Name[nn]": "Deriver", + "Name[pl]": "Różniczkowanie", + "Name[pt]": "Derivação", + "Name[pt_BR]": "Derivada", + "Name[ru]": "Дифференцирование", + "Name[sk]": "Diferencovať", + "Name[sl]": "Odvajaj", + "Name[sv]": "Derivera", + "Name[tr]": "Farklılaştır", + "Name[uk]": "Продиференціювати", + "Name[x-test]": "xxDifferentiatexx", + "Name[zh_CN]": "微分", + "Name[zh_TW]": "微分", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "CalculusExtension" +} diff --git a/src/assistants/differentiate/differentiatedlg.ui b/src/assistants/differentiate/differentiatedlg.ui new file mode 100644 index 0000000..6b313a0 --- /dev/null +++ b/src/assistants/differentiate/differentiatedlg.ui @@ -0,0 +1,78 @@ + + + DifferentiateAssistantBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Expression: + + + + + + + + + + Variable: + + + + + + + x + + + + + + + + + + + Times: + + + + + + + 1 + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + +
    diff --git a/src/assistants/importpackage/CMakeLists.txt b/src/assistants/importpackage/CMakeLists.txt new file mode 100644 index 0000000..09b5800 --- /dev/null +++ b/src/assistants/importpackage/CMakeLists.txt @@ -0,0 +1,9 @@ +set( ImportPackageAssistant_SRCS + importpackageassistant.cpp +) + +ki18n_wrap_ui(ImportPackageAssistant_SRCS importpackagedlg.ui) + +add_assistant(importpackageassistant ${ImportPackageAssistant_SRCS}) + +install(FILES cantor_import_package_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor) diff --git a/src/assistants/importpackage/cantor_import_package_assistant.rc b/src/assistants/importpackage/cantor_import_package_assistant.rc new file mode 100644 index 0000000..5fbea25 --- /dev/null +++ b/src/assistants/importpackage/cantor_import_package_assistant.rc @@ -0,0 +1,8 @@ + + + + &Package + + + + diff --git a/src/assistants/importpackage/importpackageassistant.cpp b/src/assistants/importpackage/importpackageassistant.cpp new file mode 100644 index 0000000..2e80456 --- /dev/null +++ b/src/assistants/importpackage/importpackageassistant.cpp @@ -0,0 +1,82 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#include "importpackageassistant.h" + +#include +#include +#include +#include + +#include +#include +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" +#include "ui_importpackagedlg.h" + +ImportPackageAssistant::ImportPackageAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void ImportPackageAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_import_package_assistant.rc")); + + QAction* importpackage = new QAction(i18n("Import Package"), actionCollection()); + actionCollection()->addAction(QLatin1String("importpackage_assistant"), importpackage); + connect(importpackage, &QAction::triggered, this, &ImportPackageAssistant::requested); +} + +QStringList ImportPackageAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + + QWidget* widget=new QWidget(dlg); + + Ui::ImportPackageAssistantBase base; + base.setupUi(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + QStringList result; + if( dlg->exec()) + { + const QString& m = base.package->text(); + + Cantor::PackagingExtension* ext = + dynamic_cast(backend()->extension(QLatin1String("PackagingExtension"))); + result << ext->importPackage(m); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(importpackageassistant, "importpackageassistant.json", registerPlugin();) +#include "importpackageassistant.moc" diff --git a/src/assistants/importpackage/importpackageassistant.h b/src/assistants/importpackage/importpackageassistant.h new file mode 100644 index 0000000..e9dd18b --- /dev/null +++ b/src/assistants/importpackage/importpackageassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#ifndef _IMPORTPACKAGEASSISTANT_H +#define _IMPORTPACKAGEASSISTANT_H + +#include "assistant.h" + +class ImportPackageAssistant : public Cantor::Assistant +{ + public: + ImportPackageAssistant( QObject* parent, QList args ); + ~ImportPackageAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _IMPORTPACKAGEASSISTANT_H */ diff --git a/src/assistants/importpackage/importpackageassistant.json b/src/assistants/importpackage/importpackageassistant.json new file mode 100644 index 0000000..c720e67 --- /dev/null +++ b/src/assistants/importpackage/importpackageassistant.json @@ -0,0 +1,64 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to import a specific package (or library or module) to Cantor workspace", + "Description[ca@valencia]": "Un diàleg d'assistència per importar un paquet específic (o biblioteca o mòdul) a l'espai de treball del Cantor", + "Description[ca]": "Un diàleg d'assistència per importar un paquet específic (o biblioteca o mòdul) a l'espai de treball del Cantor", + "Description[de]": "Ein Assistent, um ein angegebenes Paket, Bibliothek oder Modul in den Arbeitsbereich von Cantor zu importieren", + "Description[el]": "Βοηθητικός διάλογος για την εισαγωγή πακέτου (ή βιβλιοθήκης ή αρθρώματος) στο χώρο εργασίας Cantor", + "Description[en_GB]": "An Assistant dialogue to import a specific package (or library or module) to Cantor workspace", + "Description[es]": "Un diálogo de asistente para importar un paquete específico (también una biblioteca o un módulo) en el espacio de trabajo de Cantor", + "Description[et]": "Nõuandja konkreetse paketi (või teegi või mooduli) importimiseks Cantorisse.", + "Description[fi]": "Apuikkuna paketin (tai kirjaston tai mobuulin) tuomiseen Cantor-työtilaan", + "Description[fr]": "Boîte de dialogue de l'assistant pour importer un paquet spécifique (ou une bibliothèque ou un module) dans l'espace de travail Cantor", + "Description[gl]": "Un asistente para importar un paquete específico (ou unha biblioteca ou un módulo) no espazo de traballo de Cantor.", + "Description[it]": "Un assistente che importa un package specifico (oppure una libreria o un modulo) nell foglio di lavoro di Cantor", + "Description[nl]": "Een assistentdialoog voor het importeren van een pakket (of bibliotheek (library) of module) in Cantor", + "Description[nn]": "Eit hjelpevindauge for importering av pakkar (eller bibliotek eller modular) til Cantor-arbeidsområdet", + "Description[pl]": "Okno dialogowe pomocnika importu określonych pakietów (lub bibliotek lub modułów) do przestrzeni roboczej Cantora", + "Description[pt]": "Um janela assistente que lhe permite importar um pacote (biblioteca ou módulo) específico para a área de trabalho do Cantor", + "Description[pt_BR]": "Um assistente para importar um pacote específico (biblioteca ou módulo) para o espaço de trabalho do Cantor", + "Description[ru]": "Диалоговое окно импорта определённого пакета (либо библиотеки или модуля) для использования в документе", + "Description[sk]": "Dialóg asistenta na import špecifického balíka (alebo knižnice alebo modulu) do pracovnej plochy Cantor", + "Description[sl]": "Pogovorno okno pomočnika za uvoz določenega paketa (ali knjižnice ali modula) v delovni prostor Cantor-ja", + "Description[sv]": "En dialogruta med en guide för att importera ett specifikt paket (eller bibliotek eller modul) till en Cantor arbetsrymd", + "Description[tr]": "Cantor çalışma alanına özel bir paket (veya kütüphane veya modülü) almak için bir Yardımcısı iletişim penceresi", + "Description[uk]": "Допоміжне діалогове вікно для імпортування певного пакунка (бібліотеки або модуля) до робочого простору Cantor", + "Description[x-test]": "xxAn Assistant dialog to import a specific package (or library or module) to Cantor workspacexx", + "Description[zh_CN]": "用于导入指定包 (或者库和模块) 到 Cantor 工作空间的助手对话框", + "Description[zh_TW]": "匯入特定套件(或是函式庫與模組)到 Cantor 工作空間的小助手對話框", + "Id": "Import package", + "License": "GPL", + "Name": "Import Package", + "Name[ca@valencia]": "Importació de paquet", + "Name[ca]": "Importació de paquet", + "Name[cs]": "Importovat balíček", + "Name[de]": "Paket importieren", + "Name[el]": "Εισαγωγή πακέτου", + "Name[en_GB]": "Import Package", + "Name[es]": "Importar paquete", + "Name[et]": "Paketi import", + "Name[fi]": "Tuo paketti", + "Name[fr]": "Importer un paquet", + "Name[gl]": "Importar un paquete", + "Name[it]": "Importa package", + "Name[nl]": "Pakket importeren", + "Name[nn]": "Importer pakke", + "Name[pl]": "Importowanie pakietów", + "Name[pt]": "Importação de Pacotes", + "Name[pt_BR]": "Importar pacote", + "Name[ru]": "Импорт пакета", + "Name[sk]": "Importovať balík", + "Name[sl]": "Uvozi paket", + "Name[sv]": "Importera paket", + "Name[tr]": "Paketi İçe Aktar", + "Name[uk]": "Імпортування пакунка", + "Name[x-test]": "xxImport Packagexx", + "Name[zh_CN]": "导入包", + "Name[zh_TW]": "匯入套件", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "PackagingExtension" +} diff --git a/src/assistants/importpackage/importpackagedlg.ui b/src/assistants/importpackage/importpackagedlg.ui new file mode 100644 index 0000000..96a1478 --- /dev/null +++ b/src/assistants/importpackage/importpackagedlg.ui @@ -0,0 +1,42 @@ + + + ImportPackageAssistantBase + + + + 0 + 0 + 303 + 102 + + + + + + + Package: + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + +
    diff --git a/src/assistants/integrate/CMakeLists.txt b/src/assistants/integrate/CMakeLists.txt new file mode 100644 index 0000000..a4b1242 --- /dev/null +++ b/src/assistants/integrate/CMakeLists.txt @@ -0,0 +1,9 @@ +set( IntegrateAssistant_SRCS + integrateassistant.cpp +) + +ki18n_wrap_ui(IntegrateAssistant_SRCS integratedlg.ui) + +add_assistant(integrateassistant ${IntegrateAssistant_SRCS}) + +install( FILES cantor_integrate_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/integrate/cantor_integrate_assistant.rc b/src/assistants/integrate/cantor_integrate_assistant.rc new file mode 100644 index 0000000..30c775b --- /dev/null +++ b/src/assistants/integrate/cantor_integrate_assistant.rc @@ -0,0 +1,8 @@ + + + + &Calculate + + + + diff --git a/src/assistants/integrate/integrateassistant.cpp b/src/assistants/integrate/integrateassistant.cpp new file mode 100644 index 0000000..b73fd0d --- /dev/null +++ b/src/assistants/integrate/integrateassistant.cpp @@ -0,0 +1,90 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "integrateassistant.h" + +#include +#include +#include +#include +#include + +#include +#include +#include "ui_integratedlg.h" +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +IntegrateAssistant::IntegrateAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void IntegrateAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_integrate_assistant.rc")); + QAction* integrate=new QAction(i18n("Integrate"), actionCollection()); + integrate->setIcon(QIcon::fromTheme(icon())); + actionCollection()->addAction(QLatin1String("integrate_assistant"), integrate); + connect(integrate, &QAction::triggered, this, &IntegrateAssistant::requested); +} + +QStringList IntegrateAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget* widget=new QWidget(dlg); + Ui::IntegrateAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + QStringList result; + if( dlg->exec()) + { + QString expression=base.expression->text(); + QString variable=base.variable->text(); + + Cantor::CalculusExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("CalculusExtension"))); + if (base.isDefinite->isChecked()) + { + QString lower=base.lowerLimit->text(); + QString upper=base.upperLimit->text(); + + result<integrate(expression, variable, lower, upper); + }else + { + result<integrate(expression, variable); + } + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(integrateassistant, "integrateassistant.json", registerPlugin();) +#include "integrateassistant.moc" diff --git a/src/assistants/integrate/integrateassistant.h b/src/assistants/integrate/integrateassistant.h new file mode 100644 index 0000000..d35e551 --- /dev/null +++ b/src/assistants/integrate/integrateassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _INTEGRATEASSISTANT_H +#define _INTEGRATEASSISTANT_H + +#include "assistant.h" + +class IntegrateAssistant : public Cantor::Assistant +{ + public: + IntegrateAssistant( QObject* parent, QList args ); + ~IntegrateAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _INTEGRATEASSISTANT_H */ diff --git a/src/assistants/integrate/integrateassistant.json b/src/assistants/integrate/integrateassistant.json new file mode 100644 index 0000000..3df216f --- /dev/null +++ b/src/assistants/integrate/integrateassistant.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify calculation of integrals", + "Description[ca@valencia]": "Un diàleg assistent per simplificar els càlculs d'integrals", + "Description[ca]": "Un diàleg assistent per simplificar els càlculs d'integrals", + "Description[cs]": "Pomocný dialog pro zjednodušení výpočtu integrálů", + "Description[de]": "Ein Assistent, um die Berechnung von Integralen zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση του υπολογισμού ολοκληρωμάτων", + "Description[en_GB]": "An Assistant dialogue to simplify calculation of integrals", + "Description[es]": "Un diálogo de asistente para simplificar el cálculo de integrales", + "Description[et]": "Integraalide arvutamist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan integraalien laskemista", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant le calcul d'intégrales", + "Description[gl]": "Un diálogo auxiliar para simplificar o cálculo de integrais", + "Description[it]": "Un assistente che semplifica il calcolo di integrali", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het berekenen van integralen", + "Description[nn]": "Eit hjelpevindauge for utrekning av integral av uttrykk", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć obliczenia całek", + "Description[pt]": "Uma janela assistente para simplificar o cálculo de integrais", + "Description[pt_BR]": "Um assistente para simplificar o cálculo de integrais", + "Description[ru]": "Диалоговое окно, упрощающее вычисление интегралов", + "Description[sk]": "Asistenčný dialóg na uľahčenie výpočtu integrálov", + "Description[sl]": "Pomočnik, ki poenostavi izračunavanje integralov", + "Description[sv]": "En dialogruta med en guide för att förenkla beräkning av integraler", + "Description[tr]": "İfadelerin integrallerini hesaplamayı kolaylaştıran yardımcı pencere", + "Description[uk]": "Діалогове вікно помічника у обчисленні інтегралів", + "Description[x-test]": "xxAn Assistant dialog to simplify calculation of integralsxx", + "Description[zh_CN]": "用于简化积分运算的助手对话框", + "Description[zh_TW]": "簡化積分計算的小助手對話框", + "Icon": "office-chart-area", + "Id": "Integrate", + "License": "GPL", + "Name": "Integrate", + "Name[ca@valencia]": "Integra", + "Name[ca]": "Integra", + "Name[cs]": "Integrovat", + "Name[da]": "Intregrér", + "Name[de]": "Integrieren", + "Name[el]": "Ολοκλήρωση", + "Name[en_GB]": "Integrate", + "Name[es]": "Integrar", + "Name[et]": "Integraalarvutus", + "Name[fi]": "Integroi", + "Name[fr]": "Intégrer", + "Name[gl]": "Integrar", + "Name[it]": "Integrazione", + "Name[nl]": "Integreren", + "Name[nn]": "Integrer", + "Name[pl]": "Całkowanie", + "Name[pt]": "Integração", + "Name[pt_BR]": "Integral", + "Name[ru]": "Интегрирование", + "Name[sk]": "Integrovať", + "Name[sl]": "Integriraj", + "Name[sv]": "Integrera", + "Name[tr]": "Bütünleştir", + "Name[uk]": "Проінтегрувати", + "Name[x-test]": "xxIntegratexx", + "Name[zh_CN]": "积分", + "Name[zh_TW]": "積分", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "CalculusExtension" +} diff --git a/src/assistants/integrate/integratedlg.ui b/src/assistants/integrate/integratedlg.ui new file mode 100644 index 0000000..de285e3 --- /dev/null +++ b/src/assistants/integrate/integratedlg.ui @@ -0,0 +1,136 @@ + + + IntegrateAssistantBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Expression: + + + + + + + + + + Variable: + + + + + + + x + + + + + + + + + + + + + Lower limit: + + + + + + + false + + + + + + + Upper limit: + + + + + + + false + + + + + + + definite integral + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + + + isDefinite + toggled(bool) + lowerLimit + setEnabled(bool) + + + 75 + 177 + + + 271 + 219 + + + + + isDefinite + toggled(bool) + upperLimit + setEnabled(bool) + + + 75 + 177 + + + 271 + 264 + + + + +
    diff --git a/src/assistants/linearalgebra/CMakeLists.txt b/src/assistants/linearalgebra/CMakeLists.txt new file mode 100644 index 0000000..62f0914 --- /dev/null +++ b/src/assistants/linearalgebra/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(creatematrix) +add_subdirectory(invertmatrix) +add_subdirectory(eigenvectors) +add_subdirectory(eigenvalues) diff --git a/src/assistants/linearalgebra/creatematrix/CMakeLists.txt b/src/assistants/linearalgebra/creatematrix/CMakeLists.txt new file mode 100644 index 0000000..87466bc --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/CMakeLists.txt @@ -0,0 +1,10 @@ +set( CreateMatrixAssistant_SRCS + creatematrixassistant.cpp + creatematrixdlg.cpp +) + +ki18n_wrap_ui(CreateMatrixAssistant_SRCS creatematrixdlg.ui) + +add_assistant(creatematrixassistant ${CreateMatrixAssistant_SRCS}) + +install( FILES cantor_create_matrix_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc b/src/assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc new file mode 100644 index 0000000..46424e2 --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/cantor_create_matrix_assistant.rc @@ -0,0 +1,8 @@ + + + + &Linear Algebra + + + + diff --git a/src/assistants/linearalgebra/creatematrix/creatematrixassistant.cpp b/src/assistants/linearalgebra/creatematrix/creatematrixassistant.cpp new file mode 100644 index 0000000..3b7b5b9 --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/creatematrixassistant.cpp @@ -0,0 +1,73 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "creatematrixassistant.h" + +#include + +#include +#include +#include +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" +#include "creatematrixdlg.h" + +CreateMatrixAssistant::CreateMatrixAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void CreateMatrixAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_create_matrix_assistant.rc")); + QAction* creatematrix=new QAction(i18n("Create Matrix"), actionCollection()); + actionCollection()->addAction(QLatin1String("creatematrix_assistant"), creatematrix); + connect(creatematrix, &QAction::triggered, this, &CreateMatrixAssistant::requested); +} + +QStringList CreateMatrixAssistant::run(QWidget* parent) +{ + QPointer dlg=new CreateMatrixDlg(parent); + + QStringList result; + if( dlg->exec()) + { + Cantor::LinearAlgebraExtension::Matrix m; + for (int i=0;inumRows();i++) + { + QStringList row; + for(int j=0;jnumCols();j++) + row<value(i, j); + m<(backend()->extension(QLatin1String("LinearAlgebraExtension"))); + result<createMatrix(m); + } + + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(creatematrixassistant, "creatematrixassistant.json", registerPlugin();) +#include "creatematrixassistant.moc" diff --git a/src/assistants/linearalgebra/creatematrix/creatematrixassistant.h b/src/assistants/linearalgebra/creatematrix/creatematrixassistant.h new file mode 100644 index 0000000..82073b1 --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/creatematrixassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _CREATEMATRIXASSISTANT_H +#define _CREATEMATRIXASSISTANT_H + +#include "assistant.h" + +class CreateMatrixAssistant : public Cantor::Assistant +{ + public: + CreateMatrixAssistant( QObject* parent, QList args ); + ~CreateMatrixAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _CREATEMATRIXASSISTANT_H */ diff --git a/src/assistants/linearalgebra/creatematrix/creatematrixassistant.json b/src/assistants/linearalgebra/creatematrix/creatematrixassistant.json new file mode 100644 index 0000000..ba458ce --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/creatematrixassistant.json @@ -0,0 +1,65 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify entering of matrices", + "Description[ca@valencia]": "Un diàleg assistent per simplificar la introducció de matrius", + "Description[ca]": "Un diàleg assistent per simplificar la introducció de matrius", + "Description[cs]": "Pomocný dialog pro zjednodušení zadávání matic", + "Description[de]": "Ein Assistent, um die Eingabe von Matrizen zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση εισαγωγής δεδομένων σε πίνακες", + "Description[en_GB]": "An Assistant dialogue to simplify entering of matrices", + "Description[es]": "Un diálogo de asistente para simplificar la introducción de matrices", + "Description[et]": "Maatriksite sisestamist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan matriisin arvojen antamista", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant la saisie de matrices", + "Description[gl]": "Un diálogo auxiliar para simplificar a inserción de matrices", + "Description[it]": "Un assistente che semplifica l'inserimento di matrici", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het invoeren van matrices", + "Description[nn]": "Eit hjelpevindauge for innskriving av matriser", + "Description[pl]": "Okno dialogowe pomocnika pomagające uprościć wprowadzanie macierzy", + "Description[pt]": "Uma janela assistente para simplificar a introdução de matrizes", + "Description[pt_BR]": "Um assistente para simplificar a digitação de matrizes", + "Description[ru]": "Диалоговое окно, упрощающее ввод матриц", + "Description[sk]": "Asistenčný dialóg na uľahčenie zadávania matíc", + "Description[sl]": "Pomočnik, ki poenostavi vnašanje matrik", + "Description[sv]": "En dialogruta med en guide för att förenkla inmatning av matriser", + "Description[tr]": "Matris girişini kolaylaştıran asistan pencere", + "Description[uk]": "Діалогове вікно помічника введення матриць", + "Description[x-test]": "xxAn Assistant dialog to simplify entering of matricesxx", + "Description[zh_CN]": "用于简化矩阵输入的助手对话框", + "Description[zh_TW]": "簡化輸入矩陣的小助手對話框", + "Id": "Create Matrix", + "License": "GPL", + "Name": "Create Matrix", + "Name[ca@valencia]": "Crea una matriu", + "Name[ca]": "Crea una matriu", + "Name[cs]": "Vytvořit matici", + "Name[de]": "Matrix erstellen", + "Name[el]": "Δημιουργία πίνακα", + "Name[en_GB]": "Create Matrix", + "Name[es]": "Crear matriz", + "Name[et]": "Maatriksi loomine", + "Name[fi]": "Luo matriisi", + "Name[fr]": "Créer une matrice", + "Name[gl]": "Crear unha matriz", + "Name[it]": "Crea matrice", + "Name[nl]": "Matrix aanmaken", + "Name[nn]": "Lag matrise", + "Name[pl]": "Tworzenie macierzy", + "Name[pt]": "Criação de Matriz", + "Name[pt_BR]": "Criar matriz", + "Name[ru]": "Создание матрицы", + "Name[sk]": "Vytvoriť maticu", + "Name[sl]": "Ustvari matriko", + "Name[sv]": "Skapa matris", + "Name[tr]": "Matris Oluştur", + "Name[uk]": "Створити матрицю", + "Name[x-test]": "xxCreate Matrixxx", + "Name[zh_CN]": "创建矩阵", + "Name[zh_TW]": "建立矩陣", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "LinearAlgebraExtension" +} diff --git a/src/assistants/linearalgebra/creatematrix/creatematrixdlg.cpp b/src/assistants/linearalgebra/creatematrix/creatematrixdlg.cpp new file mode 100644 index 0000000..c3914f4 --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/creatematrixdlg.cpp @@ -0,0 +1,77 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "creatematrixdlg.h" +#include + +CreateMatrixDlg::CreateMatrixDlg(QWidget* parent) : QDialog(parent) +{ + m_base=new Ui::CreateMatrixAssistantBase; + QWidget* mainW=new QWidget(this); + m_base->setupUi(mainW); + + QVBoxLayout *layout = new QVBoxLayout; + setLayout(layout); + layout->addWidget(mainW); + + m_base->buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + m_base->buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(m_base->buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(m_base->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + connect(m_base->rows, static_cast(&QSpinBox::valueChanged), this, &CreateMatrixDlg::changeNumRows); + connect(m_base->columns, static_cast(&QSpinBox::valueChanged), this, &CreateMatrixDlg::changeNumCols); +} + +CreateMatrixDlg::~CreateMatrixDlg() +{ + delete m_base; +} + +void CreateMatrixDlg::changeNumRows(int rows) +{ + m_base->values->setRowCount(rows); +} + +void CreateMatrixDlg::changeNumCols(int cols) +{ + m_base->values->setColumnCount(cols); +} + +int CreateMatrixDlg::numRows() +{ + return m_base->rows->value(); +} + +int CreateMatrixDlg::numCols() +{ + return m_base->columns->value(); +} + +QString CreateMatrixDlg::value(int i, int j) +{ + const QTableWidgetItem* item=m_base->values->item(i, j); + if(item) + return item->text(); + else + return QLatin1String("0"); +} + + diff --git a/src/assistants/linearalgebra/creatematrix/creatematrixdlg.h b/src/assistants/linearalgebra/creatematrix/creatematrixdlg.h new file mode 100644 index 0000000..e428541 --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/creatematrixdlg.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _CREATEMATRIXDLG_H +#define _CREATEMATRIXDLG_H + +#include +#include "ui_creatematrixdlg.h" + +class CreateMatrixDlg : public QDialog +{ + Q_OBJECT + public: + explicit CreateMatrixDlg( QWidget* parent); + ~CreateMatrixDlg() override; + + int numRows(); + int numCols(); + + QString value(int i,int j); + + public Q_SLOTS: + void changeNumRows(int rows); + void changeNumCols(int cols); + + private: + Ui::CreateMatrixAssistantBase *m_base; +}; + +#endif /* _CREATEMATRIXDLG_H */ diff --git a/src/assistants/linearalgebra/creatematrix/creatematrixdlg.ui b/src/assistants/linearalgebra/creatematrix/creatematrixdlg.ui new file mode 100644 index 0000000..6aa2316 --- /dev/null +++ b/src/assistants/linearalgebra/creatematrix/creatematrixdlg.ui @@ -0,0 +1,77 @@ + + + CreateMatrixAssistantBase + + + + 0 + 0 + 451 + 210 + + + + + + + + + Columns: + + + + + + + 3 + + + + + + + + + + + Rows: + + + + + + + 3 + + + + + + + + + 3 + + + 3 + + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + diff --git a/src/assistants/linearalgebra/eigenvalues/CMakeLists.txt b/src/assistants/linearalgebra/eigenvalues/CMakeLists.txt new file mode 100644 index 0000000..cac4845 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvalues/CMakeLists.txt @@ -0,0 +1,9 @@ +set( EigenValuesAssistant_SRCS + eigenvaluesassistant.cpp +) + +ki18n_wrap_ui(EigenValuesAssistant_SRCS eigenvaluesdlg.ui) + +add_assistant(eigenvaluesassistant ${EigenValuesAssistant_SRCS}) + +install( FILES cantor_eigenvalues_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc b/src/assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc new file mode 100644 index 0000000..c4eda8c --- /dev/null +++ b/src/assistants/linearalgebra/eigenvalues/cantor_eigenvalues_assistant.rc @@ -0,0 +1,8 @@ + + + + &Linear Algebra + + + + diff --git a/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp b/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp new file mode 100644 index 0000000..bd2c740 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.cpp @@ -0,0 +1,81 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "eigenvaluesassistant.h" + +#include +#include +#include +#include + +#include +#include +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" +#include "ui_eigenvaluesdlg.h" + +EigenValuesAssistant::EigenValuesAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void EigenValuesAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_eigenvalues_assistant.rc")); + QAction* eigenvalues=new QAction(i18n("Compute Eigenvalues"), actionCollection()); + actionCollection()->addAction(QLatin1String("eigenvalues_assistant"), eigenvalues); + connect(eigenvalues, &QAction::triggered, this, &EigenValuesAssistant::requested); +} + +QStringList EigenValuesAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget* widget=new QWidget(dlg); + Ui::EigenValuesAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + Cantor::HistoryExtension* hist= + dynamic_cast(backend()->extension(QLatin1String("HistoryExtension"))); + base.matrix->setText(hist->lastResult()); + + QStringList result; + if( dlg->exec()) + { + const QString& m=base.matrix->text(); + Cantor::LinearAlgebraExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("LinearAlgebraExtension"))); + result<eigenValues(m); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(eigenvaluesassistant, "eigenvaluesassistant.json", registerPlugin();) +#include "eigenvaluesassistant.moc" diff --git a/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.h b/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.h new file mode 100644 index 0000000..b2e4929 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _EIGENVALUESASSISTANT_H +#define _EIGENVALUESASSISTANT_H + +#include "assistant.h" + +class EigenValuesAssistant : public Cantor::Assistant +{ + public: + EigenValuesAssistant( QObject* parent, QList args ); + ~EigenValuesAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _EIGENVALUESASSISTANT_H */ diff --git a/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.json b/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.json new file mode 100644 index 0000000..9e5a090 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvalues/eigenvaluesassistant.json @@ -0,0 +1,65 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify calculating of Eigenvalues", + "Description[ca@valencia]": "Un diàleg assistent per simplificar el càlcul d'autovalors", + "Description[ca]": "Un diàleg assistent per simplificar el càlcul d'autovalors", + "Description[cs]": "Pomocný dialog pro zjednodušení výpočtu vlastních čísel", + "Description[de]": "Ein Assistent, um das Berechnen von „Eigen“-Werten zu vereinfachen.", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση του υπολογισμού ιδιοτιμών", + "Description[en_GB]": "An Assistant dialogue to simplify calculating of eigenvalues", + "Description[es]": "Un diálogo de asistente para simplificar el cálculo de eigenvalores", + "Description[et]": "Omaväärtuste arvutamist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan ominaisarvojen laskemista", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant le calcul de valeurs propres", + "Description[gl]": "Un diálogo auxiliar para simplificar o cálculo de valores de Eigen", + "Description[it]": "Un assistente che semplifica il calcolo di autovalori", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het berekenen van eigenwaarden", + "Description[nn]": "Eit hjelpevindauge for utrekning av eigenverdiar", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć obliczenia wartości macierzy", + "Description[pt]": "Uma janela assistente para simplificar o cálculo dos valores de Eigen", + "Description[pt_BR]": "Um assistente para simplificar o cálculo dos valores de Eigen", + "Description[ru]": "Диалоговое окно, упрощающее вычисление собственных значений", + "Description[sk]": "Asistenčný dialóg na uľahčenie výpočtu vlastných hodnôt", + "Description[sl]": "Pomočnik, ki poenostavi izračunavanje lastnih vrednosti", + "Description[sv]": "En dialogruta med en guide för att förenkla beräkning av egenvärden", + "Description[tr]": "Eigen Değerleri hesaplamayı kolaylaştıran yardımcı iletişim pencere", + "Description[uk]": "Діалогове вікно помічника у обчисленні власних значень", + "Description[x-test]": "xxAn Assistant dialog to simplify calculating of Eigenvaluesxx", + "Description[zh_CN]": "用于简化特征值计算的助手对话框", + "Description[zh_TW]": "簡化特徵值計算的小助手對話框", + "Id": "Create Matrix", + "License": "GPL", + "Name": "Eigenvalues", + "Name[ca@valencia]": "Valors propis (autovalors)", + "Name[ca]": "Valors propis (autovalors)", + "Name[cs]": "Vlastní čísla", + "Name[de]": "Eigenwerte", + "Name[el]": "Ιδιοτιμές", + "Name[en_GB]": "Eigenvalues", + "Name[es]": "Eigenvalores", + "Name[et]": "Omaväärtused", + "Name[fi]": "Ominaisarvot", + "Name[fr]": "Valeurs propres", + "Name[gl]": "Valores de Eigen", + "Name[it]": "Autovalori", + "Name[nl]": "Eigenwaarden", + "Name[nn]": "Eigenverdiar", + "Name[pl]": "Wartości macierzy", + "Name[pt]": "Valores de Eigen", + "Name[pt_BR]": "Valores de Eigen", + "Name[ru]": "Собственные значения", + "Name[sk]": "Vlastné hodnoty", + "Name[sl]": "Lastne vrednosti", + "Name[sv]": "Egenvärden", + "Name[tr]": "Eigen değerleri", + "Name[uk]": "Власні значення", + "Name[x-test]": "xxEigenvaluesxx", + "Name[zh_CN]": "特征值", + "Name[zh_TW]": "特徵值", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "LinearAlgebraExtension,HistoryExtension" +} diff --git a/src/assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui b/src/assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui new file mode 100644 index 0000000..a4658d9 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvalues/eigenvaluesdlg.ui @@ -0,0 +1,42 @@ + + + EigenValuesAssistantBase + + + + 0 + 0 + 256 + 96 + + + + + + + Matrix: + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + +
    diff --git a/src/assistants/linearalgebra/eigenvectors/CMakeLists.txt b/src/assistants/linearalgebra/eigenvectors/CMakeLists.txt new file mode 100644 index 0000000..8d97b56 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvectors/CMakeLists.txt @@ -0,0 +1,9 @@ +set( EigenVectorsAssistant_SRCS + eigenvectorsassistant.cpp +) + +ki18n_wrap_ui(EigenVectorsAssistant_SRCS eigenvectorsdlg.ui) + +add_assistant(eigenvectorsassistant ${EigenVectorsAssistant_SRCS}) + +install( FILES cantor_eigenvectors_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc b/src/assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc new file mode 100644 index 0000000..99b141b --- /dev/null +++ b/src/assistants/linearalgebra/eigenvectors/cantor_eigenvectors_assistant.rc @@ -0,0 +1,8 @@ + + + + &Linear Algebra + + + + diff --git a/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp b/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp new file mode 100644 index 0000000..7557b9b --- /dev/null +++ b/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.cpp @@ -0,0 +1,81 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "eigenvectorsassistant.h" + +#include +#include +#include +#include + +#include +#include +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" +#include "ui_eigenvectorsdlg.h" + +EigenVectorsAssistant::EigenVectorsAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void EigenVectorsAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_eigenvectors_assistant.rc")); + QAction* eigenvectors=new QAction(i18n("Compute Eigenvectors"), actionCollection()); + actionCollection()->addAction(QLatin1String("eigenvectors_assistant"), eigenvectors); + connect(eigenvectors, &QAction::triggered, this, &EigenVectorsAssistant::requested); +} + +QStringList EigenVectorsAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget* widget=new QWidget(dlg); + Ui::EigenVectorsAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + Cantor::HistoryExtension* hist= + dynamic_cast(backend()->extension(QLatin1String("HistoryExtension"))); + base.matrix->setText(hist->lastResult()); + + QStringList result; + if( dlg->exec()) + { + const QString& m=base.matrix->text(); + Cantor::LinearAlgebraExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("LinearAlgebraExtension"))); + result<eigenVectors(m); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(eigenvectorsassistant, "eigenvectorsassistant.json", registerPlugin();) +#include "eigenvectorsassistant.moc" diff --git a/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.h b/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.h new file mode 100644 index 0000000..198649d --- /dev/null +++ b/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _EIGENVECTORSASSISTANT_H +#define _EIGENVECTORSASSISTANT_H + +#include "assistant.h" + +class EigenVectorsAssistant : public Cantor::Assistant +{ + public: + EigenVectorsAssistant( QObject* parent, QList args ); + ~EigenVectorsAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _EIGENVECTORSASSISTANT_H */ diff --git a/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.json b/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.json new file mode 100644 index 0000000..9b101af --- /dev/null +++ b/src/assistants/linearalgebra/eigenvectors/eigenvectorsassistant.json @@ -0,0 +1,65 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify calculating of EigenVectors", + "Description[ca@valencia]": "Un diàleg assistent per simplificar el càlcul d'autovectors", + "Description[ca]": "Un diàleg assistent per simplificar el càlcul d'autovectors", + "Description[cs]": "Pomocný dialog pro zjednodušení výpočtu vlastních vektorů", + "Description[de]": "Ein Assistent, um das Berechnen von „Eigen“-Vektoren zu vereinfachen.", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση του υπολογισμού ιδιοδιανυσμάτων", + "Description[en_GB]": "An Assistant dialogue to simplify calculating of eigenvectors", + "Description[es]": "Un diálogo de asistente para simplificar el cálculo de eigenvectores", + "Description[et]": "Omavektorite arvutamist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan ominaisvektoreiden laskemista", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant le calcul de vecteurs propres", + "Description[gl]": "Un diálogo auxiliar para simplificar o cálculo de vectores de Eigen", + "Description[it]": "Un assistente che semplifica il calcolo di autovettori", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het berekenen van eigenvectoren", + "Description[nn]": "Eit hjelpevindauge for utrekning av eigenvektorar", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć obliczenia wektorów macierzy", + "Description[pt]": "Uma janela assistente para simplificar o cálculo dos vectores de Eigen", + "Description[pt_BR]": "Um assistente para simplificar o cálculo dos vetores de Eigen", + "Description[ru]": "Диалоговое окно, упрощающее вычисление собственных векторов", + "Description[sk]": "Asistenčný dialóg na uľahčenie výpočtu vlastných vektorov", + "Description[sl]": "Pomočnik, ki poenostavi izračunavanje lastnih vektorjev", + "Description[sv]": "En dialogruta med en guide för att förenkla beräkning av egenvektorer", + "Description[tr]": "Eigen Vektörleri hesaplamayı kolaylaştıran yardımcı pencere", + "Description[uk]": "Діалогове вікно помічника у обчисленні власних векторів", + "Description[x-test]": "xxAn Assistant dialog to simplify calculating of EigenVectorsxx", + "Description[zh_CN]": "用于简化特征向量计算的助手对话框", + "Description[zh_TW]": "簡化特徵向量計算的小助手對話框", + "Id": "Create Matrix", + "License": "GPL", + "Name": "Eigenvectors", + "Name[ca@valencia]": "Vectors propis (autovectors)", + "Name[ca]": "Vectors propis (autovectors)", + "Name[cs]": "Vlastní vektory", + "Name[de]": "Eigenvektoren", + "Name[el]": "Ιδιοδιανύσματα", + "Name[en_GB]": "Eigenvectors", + "Name[es]": "Eigenvectores", + "Name[et]": "Omavektorid", + "Name[fi]": "Ominaisvektorit", + "Name[fr]": "Vecteurs propres", + "Name[gl]": "Vectores de Eigen", + "Name[it]": "Autovettori", + "Name[nl]": "Eigenvectoren", + "Name[nn]": "Eigenvektorar", + "Name[pl]": "Wektory macierzy", + "Name[pt]": "Vectores de Eigen", + "Name[pt_BR]": "Vetores de Eigen", + "Name[ru]": "Собственные векторы", + "Name[sk]": "Vlastné vektory", + "Name[sl]": "Lastni vektorji", + "Name[sv]": "Egenvektorer", + "Name[tr]": "Eigen Vektörleri", + "Name[uk]": "Власні вектори", + "Name[x-test]": "xxEigenvectorsxx", + "Name[zh_CN]": "特征向量", + "Name[zh_TW]": "特徵向量", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "LinearAlgebraExtension,HistoryExtension" +} diff --git a/src/assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui b/src/assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui new file mode 100644 index 0000000..1c91856 --- /dev/null +++ b/src/assistants/linearalgebra/eigenvectors/eigenvectorsdlg.ui @@ -0,0 +1,42 @@ + + + EigenVectorsAssistantBase + + + + 0 + 0 + 302 + 98 + + + + + + + Matrix: + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + +
    diff --git a/src/assistants/linearalgebra/invertmatrix/CMakeLists.txt b/src/assistants/linearalgebra/invertmatrix/CMakeLists.txt new file mode 100644 index 0000000..0dbffd9 --- /dev/null +++ b/src/assistants/linearalgebra/invertmatrix/CMakeLists.txt @@ -0,0 +1,9 @@ +set( InvertMatrixAssistant_SRCS + invertmatrixassistant.cpp +) + +ki18n_wrap_ui(InvertMatrixAssistant_SRCS invertmatrixdlg.ui) + +add_assistant(invertmatrixassistant ${InvertMatrixAssistant_SRCS}) + +install( FILES cantor_invert_matrix_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc b/src/assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc new file mode 100644 index 0000000..1d93088 --- /dev/null +++ b/src/assistants/linearalgebra/invertmatrix/cantor_invert_matrix_assistant.rc @@ -0,0 +1,8 @@ + + + + &Linear Algebra + + + + diff --git a/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp b/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp new file mode 100644 index 0000000..e56dce1 --- /dev/null +++ b/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.cpp @@ -0,0 +1,81 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "invertmatrixassistant.h" + +#include +#include +#include +#include + +#include +#include +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" +#include "ui_invertmatrixdlg.h" + +InvertMatrixAssistant::InvertMatrixAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void InvertMatrixAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_invert_matrix_assistant.rc")); + QAction* invertmatrix=new QAction(i18n("Invert Matrix"), actionCollection()); + actionCollection()->addAction(QLatin1String("invertmatrix_assistant"), invertmatrix); + connect(invertmatrix, &QAction::triggered, this, &InvertMatrixAssistant::requested); +} + +QStringList InvertMatrixAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget* widget=new QWidget(dlg); + Ui::InvertMatrixAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + Cantor::HistoryExtension* hist= + dynamic_cast(backend()->extension(QLatin1String("HistoryExtension"))); + base.matrix->setText(hist->lastResult()); + + QStringList result; + if( dlg->exec()) + { + const QString& m=base.matrix->text(); + Cantor::LinearAlgebraExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("LinearAlgebraExtension"))); + result<invertMatrix(m); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(invertmatrixassistant, "invertmatrixassistant.json", registerPlugin();) +#include "invertmatrixassistant.moc" diff --git a/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.h b/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.h new file mode 100644 index 0000000..9804530 --- /dev/null +++ b/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _INVERTMATRIXASSISTANT_H +#define _INVERTMATRIXASSISTANT_H + +#include "assistant.h" + +class InvertMatrixAssistant : public Cantor::Assistant +{ + public: + InvertMatrixAssistant( QObject* parent, QList args ); + ~InvertMatrixAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _INVERTMATRIXASSISTANT_H */ diff --git a/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.json b/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.json new file mode 100644 index 0000000..e668ce4 --- /dev/null +++ b/src/assistants/linearalgebra/invertmatrix/invertmatrixassistant.json @@ -0,0 +1,65 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify inverting of matrices", + "Description[ca@valencia]": "Un diàleg assistent per simplificar la inversió de matrius", + "Description[ca]": "Un diàleg assistent per simplificar la inversió de matrius", + "Description[cs]": "Pomocný dialog pro zjednodušení invertování matice", + "Description[de]": "Ein Assistent, um das Invertieren von Matrizen zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση της αντιστροφής πινάκων", + "Description[en_GB]": "An Assistant dialogue to simplify inverting of matrices", + "Description[es]": "Un diálogo de asistente para simplificar la inversión de matrices", + "Description[et]": "Maatriksite inverteerimist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan matriisien kääntämistä", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant l'inversion de matrices", + "Description[gl]": "Un diálogo auxiliar para simplificar a inversión de matrices", + "Description[it]": "Un assistente che semplifica l'inversione di matrici", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het inverteren van matrices", + "Description[nn]": "Eit hjelpevindauge for invertering av matriser", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć odwracanie macierzy", + "Description[pt]": "Uma janela assistente para simplificar a inversão de matrizes", + "Description[pt_BR]": "Um assistente para simplificar a inversão de matrizes", + "Description[ru]": "Диалоговое окно, упрощающее обращение матрицы", + "Description[sk]": "Asistenčný dialóg na uľahčenie invertovania matíc", + "Description[sl]": "Pomočnik, ki poenostavi obračanje matrik", + "Description[sv]": "En dialogruta med en guide för att förenkla invertering av matriser", + "Description[tr]": "Ters matris almayı kolaylaştıran yardımcı pencere", + "Description[uk]": "Діалогове вікно помічника обчислення оберненої матриці", + "Description[x-test]": "xxAn Assistant dialog to simplify inverting of matricesxx", + "Description[zh_CN]": "用于简化逆矩阵计算的助手对话框", + "Description[zh_TW]": "簡化逆變換矩陣的小助手對話框", + "Id": "Create Matrix", + "License": "GPL", + "Name": "Invert Matrix", + "Name[ca@valencia]": "Inverteix una matriu", + "Name[ca]": "Inverteix una matriu", + "Name[cs]": "Invertovat matici", + "Name[de]": "Matrix invertieren", + "Name[el]": "Αντιστροφή πίνακα", + "Name[en_GB]": "Invert Matrix", + "Name[es]": "Invertir matriz", + "Name[et]": "Pöördmaatriks", + "Name[fi]": "Käännä matriisi", + "Name[fr]": "Inverser la matrice", + "Name[gl]": "Inverter matriz", + "Name[it]": "Matrice inversa", + "Name[nl]": "Matrix inverteren", + "Name[nn]": "Inverter matrise", + "Name[pl]": "Odwracanie macierzy", + "Name[pt]": "Inversão de Matriz", + "Name[pt_BR]": "Inverter matriz", + "Name[ru]": "Обращение матрицы", + "Name[sk]": "Invertovať maticu", + "Name[sl]": "Obrni matriko", + "Name[sv]": "Invertera matris", + "Name[tr]": "Matrisi Tersine Çevir", + "Name[uk]": "Знайти обернену матрицю", + "Name[x-test]": "xxInvert Matrixxx", + "Name[zh_CN]": "逆矩阵", + "Name[zh_TW]": "逆矩陣", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "LinearAlgebraExtension,HistoryExtension" +} diff --git a/src/assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui b/src/assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui new file mode 100644 index 0000000..d2adbe2 --- /dev/null +++ b/src/assistants/linearalgebra/invertmatrix/invertmatrixdlg.ui @@ -0,0 +1,42 @@ + + + InvertMatrixAssistantBase + + + + 0 + 0 + 266 + 68 + + + + + + + Matrix: + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + +
    diff --git a/src/assistants/plot2d/CMakeLists.txt b/src/assistants/plot2d/CMakeLists.txt new file mode 100644 index 0000000..cb26741 --- /dev/null +++ b/src/assistants/plot2d/CMakeLists.txt @@ -0,0 +1,9 @@ +set( Plot2dAssistant_SRCS + plot2dassistant.cpp +) + +ki18n_wrap_ui(Plot2dAssistant_SRCS plot2ddlg.ui) + +add_assistant(plot2dassistant ${Plot2dAssistant_SRCS}) + +install( FILES cantor_plot2d_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/plot2d/cantor_plot2d_assistant.rc b/src/assistants/plot2d/cantor_plot2d_assistant.rc new file mode 100644 index 0000000..6e080fe --- /dev/null +++ b/src/assistants/plot2d/cantor_plot2d_assistant.rc @@ -0,0 +1,8 @@ + + + + &Plot + + + + diff --git a/src/assistants/plot2d/plot2dassistant.cpp b/src/assistants/plot2d/plot2dassistant.cpp new file mode 100644 index 0000000..ef9b9d9 --- /dev/null +++ b/src/assistants/plot2d/plot2dassistant.cpp @@ -0,0 +1,82 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "plot2dassistant.h" + +#include +#include +#include +#include + +#include +#include +#include "ui_plot2ddlg.h" +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +Plot2dAssistant::Plot2dAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void Plot2dAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_plot2d_assistant.rc")); + QAction* plot2d=new QAction(i18n("Plot 2D"), actionCollection()); + actionCollection()->addAction(QLatin1String("plot2d_assistant"), plot2d); + connect(plot2d, &QAction::triggered, this, &Plot2dAssistant::requested); +} + +QStringList Plot2dAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget *widget=new QWidget(dlg); + Ui::Plot2dAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + QStringList result; + if( dlg->exec()) + { + const QString expression=base.expression->text(); + const QString variable=base.variable->text(); + const QString min=base.min->text(); + const QString max=base.max->text(); + + Cantor::PlotExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("PlotExtension"))); + + result<plotFunction2d(expression, variable, min, max); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(plot2dassistant, "plot2dassistant.json", registerPlugin();) +#include "plot2dassistant.moc" diff --git a/src/assistants/plot2d/plot2dassistant.h b/src/assistants/plot2d/plot2dassistant.h new file mode 100644 index 0000000..6b2d041 --- /dev/null +++ b/src/assistants/plot2d/plot2dassistant.h @@ -0,0 +1,37 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _PLOT2DASSISTANT_H +#define _PLOT2DASSISTANT_H + +#include "assistant.h" + +class Plot2dAssistant : public Cantor::Assistant +{ + Q_OBJECT + public: + Plot2dAssistant( QObject* parent, QList args ); + ~Plot2dAssistant() override = default; + + void initActions() override; + QStringList run(QWidget* parentt) override; +}; + +#endif /* _PLOT2DASSISTANT_H */ diff --git a/src/assistants/plot2d/plot2dassistant.json b/src/assistants/plot2d/plot2dassistant.json new file mode 100644 index 0000000..bca3c54 --- /dev/null +++ b/src/assistants/plot2d/plot2dassistant.json @@ -0,0 +1,66 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify plotting of 2D functions", + "Description[ca@valencia]": "Un diàleg assistent per simplificar la representació gràfica de funcions 2D", + "Description[ca]": "Un diàleg assistent per simplificar la representació gràfica de funcions 2D", + "Description[cs]": "Pomocný dialog pro zjednodušení vytvoření grafu dvourozměrných funkcí", + "Description[de]": "Ein Assistent, um das Zeichnen von 2D-Funktionen zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση της σχεδίασης δισδιάστατων συναρτήσεων", + "Description[en_GB]": "An Assistant dialogue to simplify plotting of 2D functions", + "Description[es]": "Un diálogo de asistente para simplificar el dibujo de funciones gráficas en 2D", + "Description[et]": "2D jooniste loomist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan kaksiulotteisten funktioiden piirtämistä", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant le tracé de fonctions 2D", + "Description[gl]": "Un diálogo auxiliar para simplificar a representación de funcións 2D", + "Description[it]": "Un assistente che semplifica la creazione di grafici di funzioni 2D", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigd tekenen van 2D-functies", + "Description[nn]": "Eit hjelpevindauge for plotting av 2D-funksjonar", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć wykreślanie funkcji 2D", + "Description[pt]": "Uma janela assistente para simplificar os gráficos de funções 2D", + "Description[pt_BR]": "Um assistente para simplificar o desenho de gráficos de funções em 2D", + "Description[ru]": "Диалоговое окно, упрощающее построение графиков функций", + "Description[sk]": "Asistenčný dialóg na uľahčenie kreslenia 2D funkcií", + "Description[sl]": "Pomočnik, ki poenostavi risanje 2D funkcij", + "Description[sv]": "En dialogruta med guide för att förenkla uppritning av tvådimensionella funktioner", + "Description[tr]": "2 boyutlu fonksiyonları çizdirmeyi kolaylaştıran yardımcı pencere", + "Description[uk]": "Діалогове вікно помічника спрощення побудови графіків на площині", + "Description[x-test]": "xxAn Assistant dialog to simplify plotting of 2D functionsxx", + "Description[zh_CN]": "用于简化二维函数图绘制的助手对话框", + "Description[zh_TW]": "簡化繪製二維函式小助手對話框", + "Id": "Plot2d", + "License": "GPL", + "Name": "Plot2d", + "Name[ca@valencia]": "Plot2d", + "Name[ca]": "Plot2d", + "Name[cs]": "Graf2d", + "Name[da]": "Plot2d", + "Name[de]": "Plot2d", + "Name[el]": "Plot2d", + "Name[en_GB]": "Plot2d", + "Name[es]": "Plot2d", + "Name[et]": "2Djoonis", + "Name[fi]": "Plot2d", + "Name[fr]": "Tracé 2D", + "Name[gl]": "Plot2d", + "Name[it]": "Grafico 2D", + "Name[nl]": "Plot2d", + "Name[nn]": "Plot2d", + "Name[pl]": "Wykres 2D", + "Name[pt]": "Gráfico 2d", + "Name[pt_BR]": "Gráfico em 2D", + "Name[ru]": "График функции", + "Name[sk]": "Plot2d", + "Name[sl]": "Izriši v 2D", + "Name[sv]": "Rita i två dimensioner", + "Name[tr]": "2B Çizim", + "Name[uk]": "Plot2d", + "Name[x-test]": "xxPlot2dxx", + "Name[zh_CN]": "Plot2d", + "Name[zh_TW]": "繪製平面圖", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "PlotExtension" +} diff --git a/src/assistants/plot2d/plot2ddlg.ui b/src/assistants/plot2d/plot2ddlg.ui new file mode 100644 index 0000000..ca3a31b --- /dev/null +++ b/src/assistants/plot2d/plot2ddlg.ui @@ -0,0 +1,97 @@ + + + Plot2dAssistantBase + + + + 0 + 0 + 314 + 349 + + + + + + + + + Expression: + + + + + + + + + + + + Variable + + + true + + + false + + + + + + Name + + + + + + + + + + Minimum: + + + + + + + + + + Maximum: + + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + expression + variable + min + max + + + +
    diff --git a/src/assistants/plot3d/CMakeLists.txt b/src/assistants/plot3d/CMakeLists.txt new file mode 100644 index 0000000..8cbc9aa --- /dev/null +++ b/src/assistants/plot3d/CMakeLists.txt @@ -0,0 +1,9 @@ +set( Plot3dAssistant_SRCS + plot3dassistant.cpp +) + +ki18n_wrap_ui(Plot3dAssistant_SRCS plot3ddlg.ui) + +add_assistant(plot3dassistant ${Plot3dAssistant_SRCS}) + +install( FILES cantor_plot3d_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/plot3d/cantor_plot3d_assistant.rc b/src/assistants/plot3d/cantor_plot3d_assistant.rc new file mode 100644 index 0000000..7d474ba --- /dev/null +++ b/src/assistants/plot3d/cantor_plot3d_assistant.rc @@ -0,0 +1,8 @@ + + + + &Plot + + + + diff --git a/src/assistants/plot3d/plot3dassistant.cpp b/src/assistants/plot3d/plot3dassistant.cpp new file mode 100644 index 0000000..d617683 --- /dev/null +++ b/src/assistants/plot3d/plot3dassistant.cpp @@ -0,0 +1,92 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "plot3dassistant.h" + +#include +#include +#include +#include + +#include +#include +#include "ui_plot3ddlg.h" +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +Plot3dAssistant::Plot3dAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void Plot3dAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_plot3d_assistant.rc")); + QAction* plot3d=new QAction(i18n("Plot 3D"), actionCollection()); + actionCollection()->addAction(QLatin1String("plot3d_assistant"), plot3d); + connect(plot3d, &QAction::triggered, this, &Plot3dAssistant::requested); +} + +QStringList Plot3dAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget *widget=new QWidget(dlg); + Ui::Plot3dAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); + + QStringList result; + if( dlg->exec()) + { + const QString expression=base.expression->text(); + Cantor::PlotExtension::VariableParameter v1; + Cantor::PlotExtension::Interval i1; + v1.first=base.variable1->text(); + i1.first=base.min1->text(); + i1.second=base.max1->text(); + v1.second=i1; + + Cantor::PlotExtension::VariableParameter v2; + Cantor::PlotExtension::Interval i2; + v2.first=base.variable2->text(); + i2.first=base.min2->text(); + i2.second=base.max2->text(); + v2.second=i2; + + Cantor::PlotExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("PlotExtension"))); + + result<plotFunction3d(expression, v1, v2); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(plot3dassistant, "plot3dassistant.json", registerPlugin();) +#include "plot3dassistant.moc" diff --git a/src/assistants/plot3d/plot3dassistant.h b/src/assistants/plot3d/plot3dassistant.h new file mode 100644 index 0000000..ec9d487 --- /dev/null +++ b/src/assistants/plot3d/plot3dassistant.h @@ -0,0 +1,37 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _PLOT3DASSISTANT_H +#define _PLOT3DASSISTANT_H + +#include "assistant.h" + +class Plot3dAssistant : public Cantor::Assistant +{ + Q_OBJECT + public: + Plot3dAssistant( QObject* parent, QList args ); + ~Plot3dAssistant() override = default; + + void initActions() override; + QStringList run(QWidget* parentt) override; +}; + +#endif /* _PLOT3DASSISTANT_H */ diff --git a/src/assistants/plot3d/plot3dassistant.json b/src/assistants/plot3d/plot3dassistant.json new file mode 100644 index 0000000..e110387 --- /dev/null +++ b/src/assistants/plot3d/plot3dassistant.json @@ -0,0 +1,66 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify plotting of 3D functions", + "Description[ca@valencia]": "Un diàleg assistent per simplificar la representació gràfica de funcions 3D", + "Description[ca]": "Un diàleg assistent per simplificar la representació gràfica de funcions 3D", + "Description[cs]": "Pomocný dialog pro zjednodušení vytvoření grafu trojrozměrných funkcí", + "Description[de]": "Ein Assistent, um das Zeichnen von 3D-Funktionen zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση της σχεδίασης τρισδιάστατων συναρτήσεων", + "Description[en_GB]": "An Assistant dialogue to simplify plotting of 3D functions", + "Description[es]": "Un diálogo de asistente para simplificar el dibujo de funciones gráficas en 3D", + "Description[et]": "3D jooniste loomist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan kolmiulotteisten funktioiden piirtämistä", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant le tracé de fonctions 3D", + "Description[gl]": "Un diálogo auxiliar para simplificar a representación de funcións 3D", + "Description[it]": "Un assistente che semplifica la creazione di grafici di funzioni 3D", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigd tekenen van 3D-functies", + "Description[nn]": "Eit hjelpevindauge for plotting av 3D-funksjonar", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć wykreślanie funkcji 3D", + "Description[pt]": "Uma janela assistente para simplificar os gráficos de funções 3D", + "Description[pt_BR]": "Um assistente para simplificar o desenho de gráficos de funções em 3D", + "Description[ru]": "Диалоговое окно, упрощающее построение объёмных графиков функций двух переменных", + "Description[sk]": "Asistenčný dialóg na uľahčenie kreslenia 3D funkcií", + "Description[sl]": "Pomočnik, ki poenostavi risanje 3D funkcij", + "Description[sv]": "En dialogruta med guide för att förenkla uppritning av tredimensionella funktioner", + "Description[tr]": "3 boyutlu fonksiyonları çizdirmeyi kolaylaştıran Yardımcı bir pencere", + "Description[uk]": "Діалогове вікно помічника спрощення побудови поверхонь", + "Description[x-test]": "xxAn Assistant dialog to simplify plotting of 3D functionsxx", + "Description[zh_CN]": "用于简化三维函数图绘制的助手对话框", + "Description[zh_TW]": "簡化繪製三維函式小助手對話框", + "Id": "Plot3d", + "License": "GPL", + "Name": "Plot3d", + "Name[ca@valencia]": "Plot3d", + "Name[ca]": "Plot3d", + "Name[cs]": "Graf3d", + "Name[da]": "Plot3d", + "Name[de]": "Plot3d", + "Name[el]": "Plot3d", + "Name[en_GB]": "Plot3d", + "Name[es]": "Plot3d", + "Name[et]": "3Djoonis", + "Name[fi]": "Plot3d", + "Name[fr]": "Tracé 3D", + "Name[gl]": "Plot3d", + "Name[it]": "Grafico 3D", + "Name[nl]": "Plot3d", + "Name[nn]": "Plot3d", + "Name[pl]": "Wykres 3D", + "Name[pt]": "Gráfico 3d", + "Name[pt_BR]": "Gráfico em 3D", + "Name[ru]": "Поверхность, задаваемая функцией", + "Name[sk]": "Plot3d", + "Name[sl]": "Izriši v 3D", + "Name[sv]": "Rita i tre dimensioner", + "Name[tr]": "3B Çizim", + "Name[uk]": "Plot3d", + "Name[x-test]": "xxPlot3dxx", + "Name[zh_CN]": "Plot3d", + "Name[zh_TW]": "繪製立體圖", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "PlotExtension" +} diff --git a/src/assistants/plot3d/plot3ddlg.ui b/src/assistants/plot3d/plot3ddlg.ui new file mode 100644 index 0000000..2392fb0 --- /dev/null +++ b/src/assistants/plot3d/plot3ddlg.ui @@ -0,0 +1,142 @@ + + + Plot3dAssistantBase + + + + 0 + 0 + 459 + 263 + + + + + + + Expression: + + + + + + + + + + + + 1st Variable + + + true + + + false + + + + + + Name + + + + + + + + + + Minimum: + + + + + + + + + + Maximum: + + + + + + + + + + + + + 2nd Variable + + + true + + + false + + + + + + Name + + + + + + + + + + Minimum: + + + + + + + + + + Maximum: + + + + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + expression + variable1 + min1 + max1 + + + +
    diff --git a/src/assistants/runscript/CMakeLists.txt b/src/assistants/runscript/CMakeLists.txt new file mode 100644 index 0000000..f891115 --- /dev/null +++ b/src/assistants/runscript/CMakeLists.txt @@ -0,0 +1,9 @@ +set( RunScriptAssistant_SRCS + runscriptassistant.cpp +) + +add_assistant(runscriptassistant ${RunScriptAssistant_SRCS}) + +target_link_libraries( cantor_runscriptassistant ${KDE4_KIO_LIBS} cantorlibs) + +install( FILES cantor_runscript_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/runscript/cantor_runscript_assistant.rc b/src/assistants/runscript/cantor_runscript_assistant.rc new file mode 100644 index 0000000..154a9b8 --- /dev/null +++ b/src/assistants/runscript/cantor_runscript_assistant.rc @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assistants/runscript/runscriptassistant.cpp b/src/assistants/runscript/runscriptassistant.cpp new file mode 100644 index 0000000..ecf2131 --- /dev/null +++ b/src/assistants/runscript/runscriptassistant.cpp @@ -0,0 +1,66 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "runscriptassistant.h" + +#include +#include + +#include +#include +#include +#include +#include +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +RunScriptAssistant::RunScriptAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void RunScriptAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_runscript_assistant.rc")); + QAction* runscript=new QAction(i18n("Run Script"), actionCollection()); + runscript->setIcon(QIcon::fromTheme(icon())); + actionCollection()->addAction(QLatin1String("runscript_assistant"), runscript); + connect(runscript, &QAction::triggered, this, &RunScriptAssistant::requested); +} + +QStringList RunScriptAssistant::run(QWidget* parent) +{ + Cantor::ScriptExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("ScriptExtension"))); + + QString file = QFileDialog::getOpenFileName(parent, QString(), QLatin1String("qfiledialog://cantor_script"), ext->scriptFileFilter()); + + if(file.isNull()) + { + return QStringList(); + }else + { + return QStringList()<runExternalScript(file); + } +} + +K_PLUGIN_FACTORY_WITH_JSON(runscriptassistant, "runscriptassistant.json", registerPlugin();) +#include "runscriptassistant.moc" diff --git a/src/assistants/runscript/runscriptassistant.h b/src/assistants/runscript/runscriptassistant.h new file mode 100644 index 0000000..15c54b8 --- /dev/null +++ b/src/assistants/runscript/runscriptassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _RUNSCRIPTASSISTANT_H +#define _RUNSCRIPTASSISTANT_H + +#include "assistant.h" + +class RunScriptAssistant : public Cantor::Assistant +{ + public: + RunScriptAssistant( QObject* parent, QList args ); + ~RunScriptAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _RUNSCRIPTASSISTANT_H */ diff --git a/src/assistants/runscript/runscriptassistant.json b/src/assistants/runscript/runscriptassistant.json new file mode 100644 index 0000000..11b0f38 --- /dev/null +++ b/src/assistants/runscript/runscriptassistant.json @@ -0,0 +1,66 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant for running an external Script file", + "Description[ca@valencia]": "Un assistent per executar un fitxer de script extern", + "Description[ca]": "Un assistent per executar un fitxer de script extern", + "Description[cs]": "Pomocník pro spouštění externího skriptu", + "Description[de]": "Ein Assistent zum Ausführen externer Skriptdateien", + "Description[el]": "Βοηθητικός διάλογος για την εκτέλεση αρχείου εξωτερικού σεναρίου", + "Description[en_GB]": "An Assistant for running an external Script file", + "Description[es]": "Un asistente para ejecutar un archivo de script externo", + "Description[et]": "Välise skriptifaili käivitamise abiline", + "Description[fi]": "Opastettu toiminto ulkoisten skriptitiedostojen suorittamista varten", + "Description[fr]": "Un assistant permettant de lancer un fichier de script externe", + "Description[gl]": "Un asistente para executar un ficheiro de script externo", + "Description[it]": "Un assistente che esegue file con script", + "Description[nl]": "Een assistent voor het draaien van een extern scriptbestand", + "Description[nn]": "Eit hjelpevindauge for køyring av eksterne skriptfiler", + "Description[pl]": "Pomoc w uruchamianiu zewnętrznych plików z skryptami", + "Description[pt]": "Um assistente para executar um ficheiro de programa externo", + "Description[pt_BR]": "Um assistente para executar um arquivo de script externo", + "Description[ru]": "Мастер запуска сценариев", + "Description[sk]": "Asistent na spustenie externého súboru skriptu", + "Description[sl]": "Pomočnik za zaganjanje zunanjih skriptov", + "Description[sv]": "En guide för att köra en extern skriptfil", + "Description[tr]": "Harici betik çalıştırma penceresi", + "Description[uk]": "Помічник для запуску зовнішнього скриптового файла", + "Description[x-test]": "xxAn Assistant for running an external Script filexx", + "Description[zh_CN]": "用于运行外部脚本文件的助手", + "Description[zh_TW]": "執行外部文稿檔的小助手", + "Icon": "system-run", + "Id": "RunScript", + "License": "GPL", + "Name": "RunScript", + "Name[ca@valencia]": "ExecutaScript", + "Name[ca]": "ExecutaScript", + "Name[cs]": "Spustit skript", + "Name[de]": "Skript ausführen", + "Name[el]": "Εκτέλεση σεναρίου", + "Name[en_GB]": "RunScript", + "Name[es]": "RunScript", + "Name[et]": "Skriptikäivitaja", + "Name[fi]": "RunScript", + "Name[fr]": "Lancement de scripts", + "Name[gl]": "RunScript", + "Name[it]": "Esegui script", + "Name[nl]": "RunScript", + "Name[nn]": "KøyrSkript", + "Name[pl]": "Uruchamianie skryptu", + "Name[pt]": "RunScript", + "Name[pt_BR]": "Execução de scripts", + "Name[ru]": "Запуск сценария", + "Name[sk]": "Spustiť skript", + "Name[sl]": "Zaženi skript", + "Name[sv]": "Kör skript", + "Name[tr]": "Betiği Çalıştır", + "Name[uk]": "Виконати скрипт", + "Name[x-test]": "xxRunScriptxx", + "Name[zh_CN]": "运行脚本", + "Name[zh_TW]": "執行文稿", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "ScriptExtension" +} diff --git a/src/assistants/solve/CMakeLists.txt b/src/assistants/solve/CMakeLists.txt new file mode 100644 index 0000000..e91b381 --- /dev/null +++ b/src/assistants/solve/CMakeLists.txt @@ -0,0 +1,9 @@ +set( SolveAssistant_SRCS + solveassistant.cpp +) + +ki18n_wrap_ui(SolveAssistant_SRCS solvedlg.ui) + +add_assistant(solveassistant ${SolveAssistant_SRCS}) + +install( FILES cantor_solve_assistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/assistants/solve/cantor_solve_assistant.rc b/src/assistants/solve/cantor_solve_assistant.rc new file mode 100644 index 0000000..acc8f6a --- /dev/null +++ b/src/assistants/solve/cantor_solve_assistant.rc @@ -0,0 +1,8 @@ + + + + &Calculate + + + + diff --git a/src/assistants/solve/solveassistant.cpp b/src/assistants/solve/solveassistant.cpp new file mode 100644 index 0000000..80260a7 --- /dev/null +++ b/src/assistants/solve/solveassistant.cpp @@ -0,0 +1,82 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "solveassistant.h" + +#include +#include +#include +#include +#include +#include +#include +#include "ui_solvedlg.h" +#include "cantor_macros.h" +#include "backend.h" +#include "extension.h" + +SolveAssistant::SolveAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args) +} + +void SolveAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_solve_assistant.rc")); + QAction* solve=new QAction(i18n("Solve equations"), actionCollection()); + solve->setIcon(QIcon::fromTheme(icon())); + actionCollection()->addAction(QLatin1String("solve_assistant"), solve); + connect(solve, &QAction::triggered, this, &SolveAssistant::requested); +} + +QStringList SolveAssistant::run(QWidget* parent) +{ + QPointer dlg=new QDialog(parent); + QWidget *widget=new QWidget(dlg); + Ui::SolveAssistantBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept()) ); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject()) ); + + QStringList result; + if( dlg->exec()) + { + QStringList equations=base.equations->toPlainText().split(QLatin1Char('\n')); + QStringList variables=base.variables->text().split(QLatin1String(", ")); + + Cantor::CASExtension* ext= + dynamic_cast(backend()->extension(QLatin1String("CASExtension"))); + + result<solve(equations, variables); + } + + delete dlg; + return result; +} + +K_PLUGIN_FACTORY_WITH_JSON(solveassistant, "solveassistant.json", registerPlugin();) +#include "solveassistant.moc" diff --git a/src/assistants/solve/solveassistant.h b/src/assistants/solve/solveassistant.h new file mode 100644 index 0000000..1d43b3c --- /dev/null +++ b/src/assistants/solve/solveassistant.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SOLVEASSISTANT_H +#define _SOLVEASSISTANT_H + +#include "assistant.h" + +class SolveAssistant : public Cantor::Assistant +{ + public: + SolveAssistant( QObject* parent, QList args ); + ~SolveAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parentt) override; + +}; + +#endif /* _SOLVEASSISTANT_H */ diff --git a/src/assistants/solve/solveassistant.json b/src/assistants/solve/solveassistant.json new file mode 100644 index 0000000..c5377b3 --- /dev/null +++ b/src/assistants/solve/solveassistant.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant dialog to simplify solving of equations", + "Description[ca@valencia]": "Un diàleg assistent per simplificar la resolució d'equacions", + "Description[ca]": "Un diàleg assistent per simplificar la resolució d'equacions", + "Description[cs]": "Pomocný dialog pro zjednodušení řešení rovnic", + "Description[de]": "Ein Assistent, um das Lösen von Gleichungen zu vereinfachen", + "Description[el]": "Βοηθητικός διάλογος για απλούστευση της επίλυσης εξισώσεων", + "Description[en_GB]": "An Assistant dialogue to simplify solving of equations", + "Description[es]": "Un diálogo de asistente para simplificar la resolución de ecuaciones", + "Description[et]": "Võrrandite lahendamist lihtsustav abiline", + "Description[fi]": "Apuikkuna helpottamaan yhtälöiden ratkaisemista", + "Description[fr]": "Une boîte de dialogue d'assistant simplifiant la résolution d'équations", + "Description[gl]": "Un diálogo auxiliar para simplificar a resolución de ecuacións", + "Description[it]": "Un assistente che semplifica la risoluzione di equazioni", + "Description[nl]": "Een assistentdialoog voor het vereenvoudigen van het oplossen van vergelijkingen", + "Description[nn]": "Eit hjelpevindauge for løysing av likningar", + "Description[pl]": "Okno dialogowe asystenta pomagające uprościć rozwiązywanie równań", + "Description[pt]": "Uma janela assistente para simplificar a resolução de equações", + "Description[pt_BR]": "Um assistente para simplificar a resolução de equações", + "Description[ru]": "Диалоговое окно, упрощающее процесс решения уравнений", + "Description[sk]": "Asistenčný dialóg na uľahčenie výpočtu rovníc", + "Description[sl]": "Pomočnik, ki poenostavi reševanje enačb", + "Description[sv]": "En dialogruta med en guide för att förenkla lösning av ekvationer", + "Description[tr]": "Eşitlikleri çözmeye yardımcı olan asistan pencere", + "Description[uk]": "Діалогове вікно помічника у розв’язанні рівнянь", + "Description[x-test]": "xxAn Assistant dialog to simplify solving of equationsxx", + "Description[zh_CN]": "用于简化解方程式运算的助手对话框", + "Description[zh_TW]": "簡化解方程式的小助手對話框", + "Icon": "dialog-ok", + "Id": "Solve", + "License": "GPL", + "Name": "Solve", + "Name[ca@valencia]": "Resol", + "Name[ca]": "Resol", + "Name[cs]": "Vyřešit", + "Name[da]": "Løs", + "Name[de]": "Lösen", + "Name[el]": "Επίλυση", + "Name[en_GB]": "Solve", + "Name[es]": "Resolver", + "Name[et]": "Lahendamine", + "Name[fi]": "Ratkaise", + "Name[fr]": "Résoudre", + "Name[gl]": "Resolver", + "Name[it]": "Risolvi", + "Name[nl]": "Oplossen", + "Name[nn]": "Løys", + "Name[pl]": "Rozwiązywanie", + "Name[pt]": "Resolução", + "Name[pt_BR]": "Solucionar", + "Name[ru]": "Решение уравнений", + "Name[sk]": "Riešiť", + "Name[sl]": "Reši", + "Name[sv]": "Lös", + "Name[tr]": "Çözümle", + "Name[uk]": "Розв’язати", + "Name[x-test]": "xxSolvexx", + "Name[zh_CN]": "解方程式", + "Name[zh_TW]": "解決", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "CASExtension" +} diff --git a/src/assistants/solve/solvedlg.ui b/src/assistants/solve/solvedlg.ui new file mode 100644 index 0000000..8c3b11c --- /dev/null +++ b/src/assistants/solve/solvedlg.ui @@ -0,0 +1,60 @@ + + + SolveAssistantBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Equations: + + + + + + + + + + + + + + Variables: + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    +
    + + +
    diff --git a/src/backendchoosedialog.cpp b/src/backendchoosedialog.cpp new file mode 100644 index 0000000..e95b1c6 --- /dev/null +++ b/src/backendchoosedialog.cpp @@ -0,0 +1,100 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "backendchoosedialog.h" + +#include +#include +#include +#include + +#include "lib/backend.h" +#include "settings.h" + +const char* BackendChooseDialog::descriptionTemplate = I18N_NOOP("

    %1

    " \ + "
    Recommended version: %4

    " \ + "
    %2

    " \ + "
    See %3 for more information
    "); + +BackendChooseDialog::BackendChooseDialog(QWidget* parent) : QDialog(parent) +{ + QWidget* w=new QWidget(this); + m_ui.setupUi(w); + + QGridLayout *layout = new QGridLayout; + setLayout(layout); + layout->addWidget(w); + + m_ui.backendList->setIconSize(QSize(KIconLoader::SizeMedium, KIconLoader::SizeMedium)); + m_ui.backendList->setSortingEnabled(true); + connect(m_ui.backendList, &QListWidget::currentItemChanged, this, &BackendChooseDialog::updateDescription); + connect(m_ui.backendList, &QListWidget::itemDoubleClicked, this, &BackendChooseDialog::accept); + + m_ui.buttonBox->button(QDialogButtonBox::Ok); + m_ui.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + m_ui.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + + foreach(Cantor::Backend* backend, Cantor::Backend::availableBackends()) + { + if(!backend->isEnabled()) //don't show disabled backends + continue; + + QListWidgetItem* item=new QListWidgetItem(m_ui.backendList); + item->setText(backend->name()); + item->setIcon(QIcon::fromTheme(backend->icon())); + m_ui.backendList->addItem(item); + if(m_ui.backendList->currentItem() == nullptr) + m_ui.backendList->setCurrentItem(item); + + if(backend->name()==Settings::self()->defaultBackend()) + m_ui.backendList->setCurrentItem(item); + } + + connect(m_ui.buttonBox, &QDialogButtonBox::accepted, this, &BackendChooseDialog::accept); + connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &BackendChooseDialog::close); + + connect(this, &BackendChooseDialog::accepted, this, &BackendChooseDialog::onAccept); +} + +void BackendChooseDialog::onAccept() +{ + m_backend=m_ui.backendList->currentItem()->text(); + if(m_ui.makeDefault->isChecked()) + { + Settings::self()->setDefaultBackend(m_backend); + Settings::self()->save(); + } +} + +void BackendChooseDialog::updateDescription() +{ + Cantor::Backend* current=Cantor::Backend::getBackend( m_ui.backendList->currentItem()->text() ); + if (current) + { + const QString& desc = i18n(BackendChooseDialog::descriptionTemplate, + current->name(), current->description(), current->url(), current->version()); + m_ui.descriptionView->setHtml(desc); + } +} + +QString BackendChooseDialog::backendName() +{ + return m_backend; +} diff --git a/src/backendchoosedialog.h b/src/backendchoosedialog.h new file mode 100644 index 0000000..4c5b1f9 --- /dev/null +++ b/src/backendchoosedialog.h @@ -0,0 +1,46 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _BACKENDCHOOSEDIALOG_H +#define _BACKENDCHOOSEDIALOG_H + +#include + +#include + +class BackendChooseDialog : public QDialog +{ + Q_OBJECT + public: + explicit BackendChooseDialog( QWidget* parent); + ~BackendChooseDialog() override = default; + + QString backendName(); + + protected Q_SLOTS: + void onAccept(); + void updateDescription(); + private: + static const char* descriptionTemplate; + Ui::BackendChooserBase m_ui; + QString m_backend; +}; + +#endif /* _BACKENDCHOOSEDIALOG_H */ diff --git a/src/backendchooser.ui b/src/backendchooser.ui new file mode 100644 index 0000000..5da909d --- /dev/null +++ b/src/backendchooser.ui @@ -0,0 +1,74 @@ + + + BackendChooserBase + + + + 0 + 0 + 620 + 461 + + + + + + + + 587 + 0 + + + + + 587 + 16777215 + + + + Choose the Backend to use: + + + + + + + QListView::TopToBottom + + + QListView::Adjust + + + QListView::ListMode + + + + + + + + 2 + 1 + + + + + + + + Make this the default backend + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + diff --git a/src/backends/CMakeLists.txt b/src/backends/CMakeLists.txt new file mode 100644 index 0000000..a75a60f --- /dev/null +++ b/src/backends/CMakeLists.txt @@ -0,0 +1,103 @@ +function(add_backend name) + + kcoreaddons_add_plugin("cantor_${name}" + SOURCES ${ARGN} + JSON "${name}.json" + INSTALL_NAMESPACE "cantor/backends") + + target_link_libraries("cantor_${name}" + cantorlibs) + +endfunction() + +add_subdirectory(null) +add_subdirectory(maxima) +add_subdirectory(octave) +add_subdirectory(scilab) + +if(NOT WIN32) + add_subdirectory(sage) +endif(NOT WIN32) + +set_package_properties(Analitza5 PROPERTIES DESCRIPTION "A library provided by KAlgebra." + URL "http://edu.kde.org/kalgebra/" + TYPE OPTIONAL + PURPOSE "Backend to use KAlgebra with Cantor.") + +find_package(Analitza5) +if(Analitza5_FOUND) + add_subdirectory(kalgebra) +endif(Analitza5_FOUND) + +set_package_properties(R PROPERTIES DESCRIPTION "A free software environment for statistical computing and graphics." + URL "http://www.r-project.org/" + TYPE OPTIONAL + PURPOSE "Backend to use R with Cantor.") + +find_package(R) +if(R_FOUND) + add_subdirectory(R) +endif(R_FOUND) + +set_package_properties(Qalculate PROPERTIES DESCRIPTION "A multi-purpose desktop calculator with support for customizable functions, units and arbitrary precision." + URL "http://qalculate.sourceforge.net/" + TYPE OPTIONAL + PURPOSE "Backend to use Qalculate with Cantor.") + +find_package(Qalculate) +if(QALCULATE_FOUND) + add_subdirectory(qalculate) +endif(QALCULATE_FOUND) + +set_package_properties(PythonLibs PROPERTIES DESCRIPTION "A powerful dynamic programming language." + URL "https://www.python.org/" + TYPE OPTIONAL + PURPOSE "Backend to use Python 2 with Cantor.") + +# If PythonInterp has been found (which it is indirectly by KF5I18n), +# find_package(PythonLibs) will prefer that version over whatever +# version information you pass the find_package call. Set a special +# variable to override that: +set(Python_ADDITIONAL_VERSIONS 2.7) +find_package(PythonLibs 2.7) + +set_package_properties(PythonLibs3 PROPERTIES DESCRIPTION "A powerful dynamic programming language." + URL "https://www.python.org/" + TYPE OPTIONAL + PURPOSE "Backend to use Python 3 with Cantor.") + +find_package(PythonLibs3) + +if(PYTHONLIBS_FOUND OR PYTHONLIBS3_FOUND) + add_subdirectory(python) +endif(PYTHONLIBS_FOUND OR PYTHONLIBS3_FOUND) + +if(PYTHONLIBS_FOUND) + add_subdirectory(python2) +endif(PYTHONLIBS_FOUND) + +if(PYTHONLIBS3_FOUND) + add_subdirectory(python3) +endif(PYTHONLIBS3_FOUND) + +set_package_properties(LuaJIT PROPERTIES DESCRIPTION "A lightweight, extensible programming language (luajit implementation)." + URL "http://www.lua.org/" + TYPE OPTIONAL + PURPOSE "Backend to use Lua (luajit2) with Cantor.") + +find_package(LuaJIT) +if(LUAJIT_FOUND) + add_subdirectory(lua) +endif(LUAJIT_FOUND) + +set_package_properties( + Julia + PROPERTIES DESCRIPTION "A high-level, high-performance dynamic programming language for technical computing" + URL "http://julialang.org/" + TYPE OPTIONAL + PURPOSE "Backend to use Julia with Cantor.") + +find_package(Julia) +if(Julia_FOUND) + add_subdirectory(julia) +endif() diff --git a/src/backends/R/CMakeLists.txt b/src/backends/R/CMakeLists.txt new file mode 100644 index 0000000..ff77af1 --- /dev/null +++ b/src/backends/R/CMakeLists.txt @@ -0,0 +1,29 @@ +include_directories(${R_INCLUDEDIR}) +LINK_DIRECTORIES(${R_SHAREDLIBDIR}) + +add_subdirectory(rserver) + +set( RBackend_SRCS + rbackend.cpp + rsession.cpp + rexpression.cpp + rextensions.cpp + rcompletionobject.cpp + rhighlighter.cpp + rkeywords.cpp + rsettingswidget.cpp +) + +kconfig_add_kcfg_files(RBackend_SRCS rserver/settings.kcfgc) + +set(network_xml rserver/org.kde.Cantor.R.xml) +QT5_ADD_DBUS_INTERFACE(RBackend_SRCS ${network_xml} rserver_interface ) + +ki18n_wrap_ui(RBackend_SRCS settings.ui) + +add_backend(rbackend ${RBackend_SRCS}) + +set_target_properties( cantor_rbackend PROPERTIES INSTALL_RPATH_USE_LINK_PATH false) +target_link_libraries( cantor_rbackend ${R_USED_LIBS} KF5::SyntaxHighlighting) + +install( FILES cantor_r.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) diff --git a/src/backends/R/DESIGN b/src/backends/R/DESIGN new file mode 100644 index 0000000..eef3b8f --- /dev/null +++ b/src/backends/R/DESIGN @@ -0,0 +1,24 @@ +This backend integrates the R environment into Cantor. + +The design of the R backend is different from the other backends: +As R offers a C API, there is no necesity for parsing output. +As the R API is not thread-save and to not let the backend freeze +Cantors ui, the backend is implemented as 2 parts: + +- The RServer: + This is a separate application, that uses the R-API to run commands, + and exposes it's functionality over DBUS + +- The R backend: + This implements the Cantor interfaces, and starts the RServer. It delivers + the commands to the server over DBUS, and connects to it's signals to get + the result. + +To embed plots, the RServer creates a png paint device, and checks if it gets +changed while a computation is running. If so, the url of the png is delivered +as result, and a new png-device is created, with a new temporary file. +(NOTE: instead of png, eps should be used, but there were some problems when I first +tried) + +The Code to access the R-API is heavily based on the RInside library +by Dirk Eddelbuettel, see http://dirk.eddelbuettel.com/code/rinside.html diff --git a/src/backends/R/cantor_r.knsrc b/src/backends/R/cantor_r.knsrc new file mode 100644 index 0000000..3280100 --- /dev/null +++ b/src/backends/R/cantor_r.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (R) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/R/rbackend.cpp b/src/backends/R/rbackend.cpp new file mode 100644 index 0000000..c326b32 --- /dev/null +++ b/src/backends/R/rbackend.cpp @@ -0,0 +1,107 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "rbackend.h" + +#include "rsession.h" +#include "rextensions.h" +#include "settings.h" +#include "rsettingswidget.h" + +#include + +#include "cantor_macros.h" +#include + +RBackend::RBackend(QObject* parent,const QList& args) : Cantor::Backend(parent, args) +{ + setObjectName(QLatin1String("rbackend")); + qDebug()<<"Creating RBackend"; + + new RScriptExtension(this); + new RPlotExtension(this); + new RVariableManagementExtension(this); +} + +RBackend::~RBackend() +{ + qDebug()<<"Destroying RBackend"; +} + +QString RBackend::id() const +{ + return QLatin1String("r"); +} + +QString RBackend::version() const +{ + return QLatin1String("Undefined"); +} + +Cantor::Session* RBackend::createSession() +{ + qDebug()<<"Spawning a new R session"; + + return new RSession(this); +} + +Cantor::Backend::Capabilities RBackend::capabilities() const +{ + qDebug()<<"Requesting capabilities of RSession"; + return Cantor::Backend::InteractiveMode | + Cantor::Backend::SyntaxHighlighting | + Cantor::Backend::Completion | + Cantor::Backend::VariableManagement; +} + +bool RBackend::requirementsFullfilled() const +{ + QFileInfo info(QStandardPaths::findExecutable( QLatin1String("cantor_rserver") ) ); + return info.isExecutable(); +} + +QWidget* RBackend::settingsWidget(QWidget* parent) const +{ + return new RSettingsWidget(parent); +} + +KConfigSkeleton* RBackend::config() const +{ + return RServerSettings::self(); +} + +QUrl RBackend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation of R, please check if there is a translated version and use the correct url", + "http://rwiki.sciviews.org/doku.php?id=rdoc:rdoc")); +} + +QString RBackend::description() const +{ + return i18n("R is a language and environment for statistical computing and graphics, similar to the S language and environment.
    "\ + "It provides a wide variety of statistical (linear and nonlinear modelling, "\ + "classical statistical tests, time-series analysis, classification, clustering, ...) "\ + "and graphical techniques, and is highly extensible. The S language is often the "\ + "vehicle of choice for research in statistical methodology, "\ + "and R provides an Open Source route to participation in that activity."); +} + +K_PLUGIN_FACTORY_WITH_JSON(rbackend, "rbackend.json", registerPlugin();) +#include "rbackend.moc" diff --git a/src/backends/R/rbackend.h b/src/backends/R/rbackend.h new file mode 100644 index 0000000..c1277be --- /dev/null +++ b/src/backends/R/rbackend.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _RBACKEND_H +#define _RBACKEND_H + +#include "backend.h" + +class RBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit RBackend(QObject* parent = nullptr, const QList& args = QList()); + ~RBackend() override; + + QString id() const override; + QString version() const override; + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + bool requirementsFullfilled() const override; + + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; + + QUrl helpUrl() const override; + QString description() const override; +}; + + +#endif /* _RBACKEND_H */ diff --git a/src/backends/R/rbackend.json b/src/backends/R/rbackend.json new file mode 100644 index 0000000..23af09f --- /dev/null +++ b/src/backends/R/rbackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for The R Project for Statistical Computing", + "Description[ca@valencia]": "Dorsal per al projecte R, paquet d'estadística per ordinador", + "Description[ca]": "Dorsal per al projecte R, paquet d'estadística per ordinador", + "Description[cs]": "Podpůrná vrstva pro projekt R pro statistické výpočty", + "Description[de]": "„The R Project for Statistical Computing“-Modul für Cantor", + "Description[el]": "Σύστημα υποστήριξης για το έργο στατιστικών υπολογισμών R", + "Description[en_GB]": "Backend for The R Project for Statistical Computing", + "Description[es]": "Motor para el Proyecto R para cálculos estadísticos", + "Description[et]": "Statistikaarvutuste projekti R taustaprogramm", + "Description[fi]": "R-projektin tilastolaskentaohjelmiston taustajärjestelmä", + "Description[fr]": "Moteur pour le projet « R » pour le calcul de statistiques", + "Description[gl]": "Infraestrutura do Proxecto R de estatística computacional", + "Description[it]": "Backend per il progetto R per l'analisi statistica", + "Description[nl]": "Backend voor het R Project voor statistische berekeningen", + "Description[nn]": "Motor for statistikkprogramvara R", + "Description[pl]": "Silnik dla środowiska \"The R Projekt\" do obliczeń statystycznych", + "Description[pt]": "Infra-estrutura do Projecto R de Cálculo Estatístico", + "Description[pt_BR]": "Infraestrutura para computação estatística do projeto R", + "Description[ru]": "Модуль поддержки пакета для статистических вычислений R", + "Description[sk]": "Backend pre R Project pre štatistické výpočty", + "Description[sl]": "Zaledje za projekt R za statistično računanje", + "Description[sv]": "Bakgrundsprogram för R-projektet i statistisk datorberäkning", + "Description[tr]": "İstatistiksel hesaplama için R Project arka ucu", + "Description[uk]": "Модуль проекту R для статистичних обчислень", + "Description[x-test]": "xxBackend for The R Project for Statistical Computingxx", + "Description[zh_CN]": "R 计算器统计工程的后端", + "Description[zh_TW]": "R 統計計算專案的後端介面", + "Icon": "rbackend", + "Id": "R", + "License": "GPL", + "Name": "R", + "Name[ca@valencia]": "R", + "Name[ca]": "R", + "Name[cs]": "R", + "Name[da]": "R", + "Name[de]": "R", + "Name[el]": "R", + "Name[en_GB]": "R", + "Name[es]": "R", + "Name[et]": "R", + "Name[fi]": "R", + "Name[fr]": "R", + "Name[gl]": "R", + "Name[it]": "R", + "Name[nl]": "R", + "Name[nn]": "R", + "Name[pl]": "R", + "Name[pt]": "R", + "Name[pt_BR]": "R", + "Name[ru]": "R", + "Name[sk]": "R", + "Name[sl]": "R", + "Name[sv]": "R", + "Name[tr]": "R", + "Name[uk]": "R", + "Name[x-test]": "xxRxx", + "Name[zh_CN]": "R", + "Name[zh_TW]": "R", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://www.r-project.org/" + } +} diff --git a/src/backends/R/rcompletionobject.cpp b/src/backends/R/rcompletionobject.cpp new file mode 100644 index 0000000..3f80598 --- /dev/null +++ b/src/backends/R/rcompletionobject.cpp @@ -0,0 +1,73 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#include "rcompletionobject.h" +#include "rkeywords.h" +#include "rsession.h" + +RCompletionObject::RCompletionObject(const QString& command, int index, RSession* session) : Cantor::CompletionObject(session) +{ + setLine(command, index); +} + +RCompletionObject::~RCompletionObject() +{ + // emit destroyed(this); +} + +void RCompletionObject::fetchCompletions() +{ + if (session()->status() == Cantor::Session::Disable) + { + QStringList allCompletions; + + allCompletions << RKeywords::instance()->keywords(); + + setCompletions(allCompletions); + emit fetchingDone(); + } + else + emit requestCompletion(command()); +} + +void RCompletionObject::receiveCompletions(const QString& token,const QStringList& options) +{ + /* Setting up both completion variants -and- the token R generously found for us */ + //setCommand(token); + //setCompletions(options); + + // TODO: investigate the empty token problem + /* Not so fast, evidently KCompletion requires a nonempty token, hence this stub */ + if (token.length()==0 && command().length()!=0) + { + /* Adding previous symbol to token, ugly but effective */ + QString lastchar(command()[command().length()-1]); + setCommand(lastchar); + setCompletions(QStringList(options).replaceInStrings(QRegExp(QLatin1String("^")),lastchar)); + } + else + { + setCommand(token); + setCompletions(options); + } + + emit fetchingDone(); +} + diff --git a/src/backends/R/rcompletionobject.h b/src/backends/R/rcompletionobject.h new file mode 100644 index 0000000..f55b2e6 --- /dev/null +++ b/src/backends/R/rcompletionobject.h @@ -0,0 +1,43 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#ifndef _RCOMPLETIONOBJECT_H +#define _RCOMPLETIONOBJECT_H + +#include "completionobject.h" + +class RSession; + +class RCompletionObject : public Cantor::CompletionObject +{ + Q_OBJECT + public: + RCompletionObject( const QString& cmd, int index, RSession* session ); + ~RCompletionObject() override; + + protected Q_SLOTS: + void fetchCompletions() override; + void receiveCompletions(const QString& token,const QStringList& options); + + Q_SIGNALS: + void requestCompletion(const QString&); +}; + +#endif /* _RCOMPLETIONOBJECT_H */ diff --git a/src/backends/R/rexpression.cpp b/src/backends/R/rexpression.cpp new file mode 100644 index 0000000..373f8de --- /dev/null +++ b/src/backends/R/rexpression.cpp @@ -0,0 +1,150 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "rexpression.h" + +#include "textresult.h" +#include "imageresult.h" +#include "helpresult.h" +#include "epsresult.h" +#include "rsession.h" + + +#include +#include +#include +#include +#include +#include +#include + +RExpression::RExpression( Cantor::Session* session, bool internal ) : Cantor::Expression(session, internal), +m_isHelpRequest(false) +{ + +} + +void RExpression::evaluate() +{ + if(command().startsWith(QLatin1Char('?'))) + m_isHelpRequest=true; + else + m_isHelpRequest=false; + + session()->enqueueExpression(this); +} + +void RExpression::interrupt() +{ + qDebug()<<"interrupting command"; + setStatus(Cantor::Expression::Interrupted); +} + +void RExpression::finished(int returnCode, const QString& text) +{ + if (status() == Expression::Interrupted) + return; + + if(returnCode==RExpression::SuccessCode) + { + qDebug() << "text: " << text; + setResult(new Cantor::TextResult(text)); + setStatus(Cantor::Expression::Done); + }else if (returnCode==RExpression::ErrorCode) + { + qDebug() << "text: " << text; + //setResult(new Cantor::TextResult(text)); + setErrorMessage(text); + setStatus(Cantor::Expression::Error); + } +} + +void RExpression::addInformation(const QString& information) +{ + static_cast(session())->sendInputToServer(information); +} + +void RExpression::showFilesAsResult(const QStringList& files) +{ + qDebug()<<"showing files: "< + */ + +#ifndef _REXPRESSION_H +#define _REXPRESSION_H + +#include "expression.h" + +class RExpression : public Cantor::Expression +{ + Q_OBJECT + public: + enum ServerReturnCode{SuccessCode=0, ErrorCode, InterruptedCode}; + explicit RExpression( Cantor::Session*, bool internal = false); + ~RExpression() override = default; + + void evaluate() override; + void interrupt() override; + + void addInformation(const QString&) override; + + public Q_SLOTS: + void finished(int returnCode, const QString& text); + void showFilesAsResult(const QStringList& files); + + private: + bool m_isHelpRequest; +}; + +#endif /* _REXPRESSION_H */ diff --git a/src/backends/R/rextensions.cpp b/src/backends/R/rextensions.cpp new file mode 100644 index 0000000..437bb92 --- /dev/null +++ b/src/backends/R/rextensions.cpp @@ -0,0 +1,99 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "rextensions.h" + +#include + +RScriptExtension::RScriptExtension(QObject* parent) : Cantor::ScriptExtension(parent) +{ + +} + +QString RScriptExtension::runExternalScript(const QString& path) +{ + return QString::fromLatin1("source(\"%1\")").arg(path); +} + +QString RScriptExtension::scriptFileFilter() +{ + return i18n("R script file (*.R)"); +} + +QString RScriptExtension::highlightingMode() +{ + return QLatin1String("r script"); +} + +RPlotExtension::RPlotExtension(QObject* parent) : Cantor::AdvancedPlotExtension(parent) +{ +} +// TODO: injection prevention +QString RPlotExtension::accept(const Cantor::PlotTitleDirective& directive) const +{ + return QLatin1String("main=\"")+directive.title()+QLatin1String("\""); +} + +QString RPlotExtension::accept(const Cantor::OrdinateScaleDirective& directive) const +{ + return QLatin1String("ylim=range(")+QString::number(directive.min())+QLatin1String(",")+QString::number(directive.max())+QLatin1String(")"); +} + +QString RPlotExtension::accept(const Cantor::AbscissScaleDirective& directive) const +{ + return QLatin1String("xlim=range(")+QString::number(directive.min())+QLatin1String(",")+QString::number(directive.max())+QLatin1String(")"); +} + +RVariableManagementExtension::RVariableManagementExtension(QObject* parent) : Cantor::VariableManagementExtension(parent) +{ + +} + +QString RVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + return setValue(name, value); +} + +QString RVariableManagementExtension::setValue(const QString& name, const QString& value) +{ + return QString::fromLatin1("%1 = %2").arg(name, value); +} + +QString RVariableManagementExtension::removeVariable(const QString& name) +{ + return QString::fromLatin1("remove(%1)").arg(name); +} + +QString RVariableManagementExtension::saveVariables(const QString& fileName) +{ + Q_UNUSED(fileName); + return QString(); +} + +QString RVariableManagementExtension::loadVariables(const QString& fileName) +{ + Q_UNUSED(fileName); + return QString(); +} + +QString RVariableManagementExtension::clearVariables() +{ + return QLatin1String("rm(list=ls())"); +} diff --git a/src/backends/R/rextensions.h b/src/backends/R/rextensions.h new file mode 100644 index 0000000..815060e --- /dev/null +++ b/src/backends/R/rextensions.h @@ -0,0 +1,67 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _REXTENSIONS_H +#define _REXTENSIONS_H + +#include "extension.h" +#include "directives/plotdirectives.h" + +class RScriptExtension : public Cantor::ScriptExtension +{ + public: + explicit RScriptExtension(QObject* parent); + ~RScriptExtension() override = default; + public Q_SLOTS: + QString runExternalScript(const QString& path) override; + QString scriptFileFilter() override; + QString highlightingMode() override; +}; + +class RPlotExtension : public Cantor::AdvancedPlotExtension, + public Cantor::AdvancedPlotExtension::DirectiveAcceptor, + public Cantor::AdvancedPlotExtension::DirectiveAcceptor, + public Cantor::AdvancedPlotExtension::DirectiveAcceptor +{ + public: + explicit RPlotExtension(QObject* parent); + ~RPlotExtension() override = default; + QString accept(const Cantor::PlotTitleDirective&) const override; + QString accept(const Cantor::OrdinateScaleDirective&) const override; + QString accept(const Cantor::AbscissScaleDirective&) const override; + + protected: + QString plotCommand() const override { return QLatin1String("plot"); } +}; + +class RVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + explicit RVariableManagementExtension(QObject* parent); + ~RVariableManagementExtension() override = default; + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name, const QString& value) override; + QString removeVariable(const QString& name) override; + QString saveVariables(const QString& fileName) override; + QString loadVariables(const QString& fileName) override; + QString clearVariables() override; +}; + +#endif /* _REXTENSIONS_H */ diff --git a/src/backends/R/rhighlighter.cpp b/src/backends/R/rhighlighter.cpp new file mode 100644 index 0000000..9ae6793 --- /dev/null +++ b/src/backends/R/rhighlighter.cpp @@ -0,0 +1,92 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2010 Oleksiy Protas + */ + +#include "rhighlighter.h" +#include "rkeywords.h" + +#include +#include + +const QStringList RHighlighter::operators_list=QStringList() + << QLatin1String("(\\+|\\-|\*{1,2}|/|<=?|>=?|={1,2}|\\!=?|\|{1,2}|&{1,2}|:{1,3}|\^|@|\\$|~)") + << QLatin1String("%[^%]*%"); // Taken in r.xml syntax file from KSyntaxHighlighter + +const QStringList RHighlighter::specials_list=QStringList() + << QLatin1String("BUG") << QLatin1String("TODO") << QLatin1String("FIXME") << QLatin1String("NB") << QLatin1String("WARNING") << QLatin1String("ERROR"); + +RHighlighter::RHighlighter(QObject* parent) : Cantor::DefaultHighlighter(parent) +{ + addKeywords(RKeywords::instance()->keywords()); + + foreach (const QString& s, operators_list) + operators.append(QRegExp(s)); + foreach (const QString& s, specials_list) + specials.append(QRegExp(QLatin1String("\\b")+s+QLatin1String("\\b"))); +} + +void RHighlighter::refreshSyntaxRegExps() +{ + emit syntaxRegExps(variables,functions); +} + +// FIXME: due to lack of lookbehinds in QRegExp here we use a flag showing if we need to shift the boundary of formatting +// to make up for the accidentally matched character +void RHighlighter::formatRule(const QRegExp &p, const QTextCharFormat &fmt, const QString& text,bool shift) +{ + int index = p.indexIn(text); + while (index >= 0) { + int length = p.matchedLength(); + setFormat(index+(shift?1:0), length-(shift?1:0), fmt); + index = p.indexIn(text, index + length); + } +} + +void RHighlighter::massFormat(const QVector &p, const QTextCharFormat &fmt, const QString& text,bool shift) +{ + foreach (const QRegExp &rule, p) + formatRule(rule,fmt,text,shift); +} + + +void RHighlighter::highlightBlock(const QString& text) +{ + if(text.isEmpty()) + return; + + //Do some backend independent highlighting (brackets etc.) + DefaultHighlighter::highlightBlock(text); + + //Let's mark every functionlike call as an error, then paint right ones in their respective format + // TODO: find more elegant solution not involving double formatting + formatRule(QRegExp(QLatin1String("\\b[A-Za-z0-9_]+(?=\\()")),errorFormat(),text); + + //formatRule(QRegExp("[^A-Za-z_]-?([0-9]+)?(((e|i)?-?)|\\.)[0-9]*L?"),numberFormat(),text,true); // TODO: erroneous number formats, refine + massFormat(operators,operatorFormat(),text); + massFormat(specials,commentFormat(),text); // FIXME must be distinct + massFormat(functions,functionFormat(),text); + massFormat(variables,variableFormat(),text); + formatRule(QRegExp(QLatin1String("\"[^\"]+\"")),stringFormat(),text); // WARNING a bit redundant +} + +void RHighlighter::updateHighlighting() +{ + emit rulesChanged(); +} diff --git a/src/backends/R/rhighlighter.h b/src/backends/R/rhighlighter.h new file mode 100644 index 0000000..a08a654 --- /dev/null +++ b/src/backends/R/rhighlighter.h @@ -0,0 +1,56 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#ifndef _RHIGHLIGHTER_H +#define _RHIGHLIGHTER_H + +#include "defaulthighlighter.h" + +class RHighlighter : public Cantor::DefaultHighlighter +{ + Q_OBJECT + + public: + explicit RHighlighter( QObject* parent); + ~RHighlighter() override = default; + + protected: + void highlightBlock(const QString &text) override; + + public Q_SLOTS: + void refreshSyntaxRegExps(); + void updateHighlighting(); + + Q_SIGNALS: + void syntaxRegExps(QVector&,QVector&); + + private: + inline void formatRule(const QRegExp &p, const QTextCharFormat &fmt, const QString& text,bool shift=false); + inline void massFormat(const QVector& rules, const QTextCharFormat &fmt, const QString& text,bool shift=false); + + static const QStringList operators_list; + static const QStringList specials_list; + QVector operators; + QVector specials; + QVector functions; + QVector variables; +}; + +#endif /* _RHIGHLIGHTER_H */ diff --git a/src/backends/R/rkeywords.cpp b/src/backends/R/rkeywords.cpp new file mode 100644 index 0000000..4eb6016 --- /dev/null +++ b/src/backends/R/rkeywords.cpp @@ -0,0 +1,50 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita +*/ + +#include "rkeywords.h" + +#include +#include + +RKeywords::RKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("R Script")); + + m_keywords = definition.keywordList(QLatin1String("controls")); + m_keywords << definition.keywordList(QLatin1String("words")); +} + +RKeywords* RKeywords::instance() +{ + static RKeywords* inst = nullptr; + + if(inst == nullptr){ + inst = new RKeywords(); + qSort(inst->m_keywords); + } + + return inst; +} + +const QStringList& RKeywords::keywords() const +{ + return m_keywords; +} diff --git a/src/backends/R/rkeywords.h b/src/backends/R/rkeywords.h new file mode 100644 index 0000000..c82e8bc --- /dev/null +++ b/src/backends/R/rkeywords.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita +*/ + +#ifndef _RKEYWORDS_H +#define _RKEYWORDS_H + +#include + +class RKeywords +{ + public: + static RKeywords* instance(); + + const QStringList& keywords() const; + + private: + RKeywords(); + ~RKeywords() = default; + QStringList m_keywords; +}; +#endif /* _RKEYWORDS_H */ diff --git a/src/backends/R/rserver/CMakeLists.txt b/src/backends/R/rserver/CMakeLists.txt new file mode 100644 index 0000000..6535183 --- /dev/null +++ b/src/backends/R/rserver/CMakeLists.txt @@ -0,0 +1,24 @@ +include_directories(${R_INCLUDE_DIR}) + +set( RServer_SRCS + rserver.cpp + rcallbacks.cpp + main.cpp +) + +kconfig_add_kcfg_files(RServer_SRCS settings.kcfgc) +install(FILES rserver.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +QT5_ADD_DBUS_ADAPTOR(RServer_SRCS org.kde.Cantor.R.xml + rserver.h RServer) + + +add_custom_target(renvvars COMMAND ${R_EXECUTABLE} --slave --file=${CMAKE_CURRENT_SOURCE_DIR}/tools/envvars.r > ${CMAKE_CURRENT_BINARY_DIR}/renvvars.h ) +add_custom_target(rautoloads COMMAND ${R_EXECUTABLE} --slave --file=${CMAKE_CURRENT_SOURCE_DIR}/tools/autoloads.r > ${CMAKE_CURRENT_BINARY_DIR}/rautoloads.h ) + +add_executable( cantor_rserver ${RServer_SRCS} ) +set_target_properties( cantor_rserver PROPERTIES INSTALL_RPATH_USE_LINK_PATH false) +target_link_libraries( cantor_rserver cantorlibs ${R_LIBRARIES} KF5::KIOCore) +add_dependencies(cantor_rserver renvvars rautoloads) + +install(TARGETS cantor_rserver ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) diff --git a/src/backends/R/rserver/main.cpp b/src/backends/R/rserver/main.cpp new file mode 100644 index 0000000..baf14e0 --- /dev/null +++ b/src/backends/R/rserver/main.cpp @@ -0,0 +1,55 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2018 Alexander Semke + */ + +#include "rserver.h" + +#include +#include +#include +#include +#include + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + if (!QDBusConnection::sessionBus().isConnected()) { + qWarning() << "Can't connect to the D-Bus session bus.\n" + "To start it, run: eval `dbus-launch --auto-syntax`"; + return 1; + } + + const QString &serviceName = + QString::fromLatin1("org.kde.Cantor.R-%1").arg(app.applicationPid()); + + if (!QDBusConnection::sessionBus().registerService(serviceName)) { + qWarning() << QDBusConnection::sessionBus().lastError().message(); + return 2; + } + + RServer server; + QDBusConnection::sessionBus().registerObject( + QLatin1String("/"), + &server + ); + + return app.exec(); +} diff --git a/src/backends/R/rserver/org.kde.Cantor.R.xml b/src/backends/R/rserver/org.kde.Cantor.R.xml new file mode 100644 index 0000000..21c3996 --- /dev/null +++ b/src/backends/R/rserver/org.kde.Cantor.R.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/backends/R/rserver/rcallbacks.cpp b/src/backends/R/rserver/rcallbacks.cpp new file mode 100644 index 0000000..02f899b --- /dev/null +++ b/src/backends/R/rserver/rcallbacks.cpp @@ -0,0 +1,119 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "rcallbacks.h" + +#include "rserver.h" + +#include +#include + +#include +#include + +RServer* server; +Expression* currentExpression; + +void setupCallbacks(RServer* r) +{ + qDebug()<<"setting up callbacks"; + + server=r; + currentExpression=nullptr; + + R_Outputfile=nullptr; + R_Consolefile=nullptr; + + ptr_R_WriteConsole=nullptr; + ptr_R_WriteConsoleEx=onWriteConsoleEx; + ptr_R_ShowMessage=onShowMessage; + ptr_R_Busy=onBusy; + ptr_R_ReadConsole=onReadConsole; + ptr_R_ShowFiles=onShowFiles; +} + +void setCurrentExpression(Expression* expr) +{ + currentExpression=expr; +} + + +enum OutputType { NormalOutput=0, ErrorOutput=1 }; + +void onWriteConsoleEx(const char* text, int size, int otype) +{ + const QString string=QString::fromUtf8(text, size); + if (otype==NormalOutput) + { + currentExpression->std_buffer+=string; + }else + { + currentExpression->err_buffer+=string; + } +} + +void onShowMessage(const char* text) +{ + const QString string=QString::fromUtf8(text); + currentExpression->std_buffer+=string; +} + +void onBusy(int which) +{ + qDebug()<<"onBusy: "<requestInput(QLatin1String(prompt)); + + if(input.size()>buflen) + input.truncate(buflen); + + strcpy( (char*) buf, input.toStdString().c_str()); + + return input.size(); +} + +int onShowFiles(int nfile, const char** file, const char** headers, const char* wtitle, Rboolean del, const char* pager) +{ + int i; + qDebug()<<"show files: "; + for (i=0;ishowFiles(files); + currentExpression->hasOtherResults=true; + + return 0; +} diff --git a/src/backends/R/rserver/rcallbacks.h b/src/backends/R/rserver/rcallbacks.h new file mode 100644 index 0000000..6d0e9a2 --- /dev/null +++ b/src/backends/R/rserver/rcallbacks.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _RCALLBACKS_H +#define _RCALLBACKS_H + +class RServer; +class Expression; + +//R includes +#include +#include +#include +#include +#define R_INTERFACE_PTRS +#include + +//This File implements the necessary callbacks for R +//The information gathered will be pushed back to the RThread + +void setupCallbacks(RServer* server); +void setCurrentExpression(Expression* expression); + +void onWriteConsoleEx(const char* text, int size,int otype); +void onShowMessage(const char* text); +void onBusy(int which); +int onReadConsole(const char* prompt, unsigned char* buf, int buflen, int hist); +int onShowFiles(int nfile, const char** file, const char** headers, const char* wtitle, Rboolean del, const char* pager); + +#endif /* _RCALLBACKS_H */ diff --git a/src/backends/R/rserver/rserver.cpp b/src/backends/R/rserver/rserver.cpp new file mode 100644 index 0000000..05e29e6 --- /dev/null +++ b/src/backends/R/rserver/rserver.cpp @@ -0,0 +1,510 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2010 Oleksiy Protas + */ + +// TODO: setStatus in syntax and completions, to be or not to be? +// on the one hand comme il faut, on another, causes flickering in UI + +#include "rserver.h" +#include +#include "radaptor.h" +#include "rcallbacks.h" +#include "settings.h" + +#include +#include +#include +#include + +#include + +//R includes +#include +#include +#include +#include +#define R_INTERFACE_PTRS +#include + + +RServer::RServer() : m_isInitialized(false),m_isCompletionAvailable(false) +{ + new RAdaptor(this); + + m_tmpDir = QDir::tempPath() + QString::fromLatin1("/cantor_rserver-%1").arg(getpid()); + QDir dir; + dir.mkdir(m_tmpDir); + qDebug()<<"storing plots at "<integratePlots()) + { + qDebug()<<"integrating plots"; + newPlotDevice(); + } + + //Loading automatic run scripts + foreach (const QString& path, RServerSettings::self()->autorunScripts()) + { + int errorOccurred=0; + if (QFile::exists(path)) + R_tryEval(lang2(install("source"),mkString(path.toUtf8().data())),nullptr,&errorOccurred); + // TODO: error handling + else + { + qDebug()<<(QLatin1String("Script ")+path+QLatin1String(" not found")); // FIXME: or should we throw a messagebox + } + } + + qDebug()<<"done initializing"; + + // FIXME: other way to search symbols, see listSymbols for details + listSymbols(); +} + +//Code from the RInside library +void RServer::autoload() +{ + #include "rautoloads.h" + + /* Autoload default packages and names from autoloads.h + * + * This function behaves in almost every way like + * R's autoload: + * function (name, package, reset = FALSE, ...) + * { + * if (!reset && exists(name, envir = .GlobalEnv, inherits = FALSE)) + * stop("an object with that name already exists") + * m <- match.call() + * m[[1]] <- as.name("list") + * newcall <- eval(m, parent.frame()) + * newcall <- as.call(c(as.name("autoloader"), newcall)) + * newcall$reset <- NULL + * if (is.na(match(package, .Autoloaded))) + * assign(".Autoloaded", c(package, .Autoloaded), env = .AutoloadEnv) + * do.call("delayedAssign", list(name, newcall, .GlobalEnv, + * .AutoloadEnv)) + * invisible() + * } + * + * What's missing is the updating of the string vector .Autoloaded with + * the list of packages, which by my code analysis is useless and only + * for informational purposes. + * + */ + //void autoloads(void){ + + SEXP da, dacall, al, alcall, AutoloadEnv, name, package; + int i,j, idx=0, errorOccurred, ptct; + + /* delayedAssign call*/ + PROTECT(da = Rf_findFun(Rf_install("delayedAssign"), R_GlobalEnv)); + PROTECT(AutoloadEnv = Rf_findVar(Rf_install(".AutoloadEnv"), R_GlobalEnv)); + if (AutoloadEnv == R_NilValue){ + qDebug()<<"Cannot find .AutoloadEnv"; + //exit(1); + } + PROTECT(dacall = allocVector(LANGSXP,5)); + SETCAR(dacall,da); + /* SETCAR(CDR(dacall),name); */ /* arg1: assigned in loop */ + /* SETCAR(CDR(CDR(dacall)),alcall); */ /* arg2: assigned in loop */ + SETCAR(CDR(CDR(CDR(dacall))),R_GlobalEnv); /* arg3 */ + SETCAR(CDR(CDR(CDR(CDR(dacall)))),AutoloadEnv); /* arg3 */ + + /* autoloader call */ + PROTECT(al = Rf_findFun(Rf_install("autoloader"), R_GlobalEnv)); + PROTECT(alcall = allocVector(LANGSXP,3)); + SET_TAG(alcall, R_NilValue); /* just like do_ascall() does */ + SETCAR(alcall,al); + /* SETCAR(CDR(alcall),name); */ /* arg1: assigned in loop */ + /* SETCAR(CDR(CDR(alcall)),package); */ /* arg2: assigned in loop */ + + ptct = 5; + for(i = 0; i < packc; ++i){ + idx += (i != 0)? packobjc[i-1] : 0; + for (j = 0; j < packobjc[i]; ++j){ + /*printf("autload(%s,%s)\n",packobj[idx+j],pack[i]);*/ + + PROTECT(name = NEW_CHARACTER(1)); + PROTECT(package = NEW_CHARACTER(1)); + SET_STRING_ELT(name, 0, COPY_TO_USER_STRING(packobj[idx+j])); + SET_STRING_ELT(package, 0, COPY_TO_USER_STRING(pack[i])); + + /* Set up autoloader call */ + PROTECT(alcall = allocVector(LANGSXP,3)); + SET_TAG(alcall, R_NilValue); /* just like do_ascall() does */ + SETCAR(alcall,al); + SETCAR(CDR(alcall),name); + SETCAR(CDR(CDR(alcall)),package); + + /* Setup delayedAssign call */ + SETCAR(CDR(dacall),name); + SETCAR(CDR(CDR(dacall)),alcall); + + R_tryEval(dacall,R_GlobalEnv,&errorOccurred); + if (errorOccurred){ + qDebug()<<"Error calling delayedAssign!"; + //exit(1); + } + + ptct += 3; + } + } + UNPROTECT(ptct); + + /* Initialize the completion libraries if needed, adapted from sys-std.c of R */ + // TODO: should we do this or init on demand? + // if (completion is needed) // TODO: discuss how to pass parameter + { + /* First check if namespace is loaded */ + if (findVarInFrame(R_NamespaceRegistry,install("utils"))==R_UnboundValue) + { /* Then try to load it */ + SEXP cmdSexp, cmdexpr; + ParseStatus status; + int i; + const char *p="try(loadNamespace('rcompgen'), silent=TRUE)"; + + PROTECT(cmdSexp=mkString(p)); + cmdexpr=PROTECT(R_ParseVector(cmdSexp,-1,&status,R_NilValue)); + if(status==PARSE_OK) + { + for(i=0;icmd=cmd; + expr->hasOtherResults=false; + + setStatus(RServer::Busy); + + setCurrentExpression(expr); + + expr->std_buffer.clear(); + expr->err_buffer.clear(); + + ReturnCode returnCode=RServer::SuccessCode; + QString returnText; + QStringList neededFiles; + + //Code to evaluate an R function (taken from RInside library) + ParseStatus status; + SEXP cmdSexp, cmdexpr = R_NilValue; + SEXP result; + int i, errorOccurred; + QByteArray memBuf; + + memBuf.append(cmd.toUtf8()); + + PROTECT(cmdSexp = allocVector(STRSXP, 1)); + SET_STRING_ELT(cmdSexp, 0, mkChar((char*)memBuf.data())); + + cmdexpr = PROTECT(R_ParseVector(cmdSexp, -1, &status, R_NilValue)); + switch (status) + { + case PARSE_OK: + qDebug()<<"PARSING "< 1 */ + for (i = 0; i < length(cmdexpr); ++i) { + + result = R_tryEval(VECTOR_ELT(cmdexpr, i), nullptr, &errorOccurred); + if (errorOccurred) + { + qDebug()<<"Error occurred."; + break; + } + // TODO: multiple results + } + memBuf.clear(); + break; + case PARSE_INCOMPLETE: + /* need to read another line */ + qDebug()<<"parse incomplete.."; + break; + case PARSE_NULL: + qDebug()<<"ParseStatus is null: "<std_buffer<<" err: "<err_buffer; + //if the command didn't print anything on its own, print the result + + + //TODO: handle some known result types like lists, matrices separately + // to make the output look better, by using html (tables etc.) + if(expr->std_buffer.isEmpty()&&expr->err_buffer.isEmpty()) + { + qDebug()<<"printing result..."; + SEXP count=PROTECT(R_tryEval(lang2(install("length"),result),nullptr,&errorOccurred)); // TODO: error checks + if (*INTEGER(count)==0) + qDebug() << "no result, so show nothing"; + else + Rf_PrintValue(result); + UNPROTECT(1); + } + + + setCurrentExpression(nullptr); //is this save? + + if(!expr->err_buffer.isEmpty()) + { + returnCode=RServer::ErrorCode; + returnText=expr->err_buffer; + } + else + { + returnCode=RServer::SuccessCode; + returnText=expr->std_buffer; + + } + }else + { + returnCode=RServer::ErrorCode; + returnText=i18n("Error Parsing Command"); + } + + if(internal) + { + qDebug()<<"internal result: "<hasOtherResults=true; + newPlotDevice(); + neededFiles<hasOtherResults) + emit expressionFinished(returnCode, returnText); + else + showFiles(neededFiles); + + setStatus(Idle); + + // FIXME: Calling this every evaluation is probably ugly + listSymbols(); +} + +void RServer::completeCommand(const QString& cmd) +{ +// setStatus(RServer::Busy); + + // TODO: is static okay? guess RServer is a singletone, but ... + // TODO: error handling? + // TODO: investigate encoding problem + // TODO: propage the flexibility of token selection upward + // TODO: what if install() fails? investigate + // TODO: investigate why errors break the whole foodchain of RServer callbacks in here + static SEXP comp_env=R_FindNamespace(mkString("utils")); + static SEXP tokenizer_func=install(".guessTokenFromLine"); + static SEXP linebuffer_func=install(".assignLinebuffer"); + static SEXP buffer_end_func=install(".assignEnd"); + static SEXP complete_func=install(".completeToken"); + static SEXP retrieve_func=install(".retrieveCompletions"); + + /* Setting buffer parameters */ + int errorOccurred=0; // TODO: error cheks, too lazy to do it now + R_tryEval(lang2(linebuffer_func,mkString(cmd.toUtf8().data())),comp_env,&errorOccurred); + R_tryEval(lang2(buffer_end_func,ScalarInteger(cmd.size())),comp_env,&errorOccurred); + + /* Passing the tokenizing work to professionals */ + SEXP token=PROTECT(R_tryEval(lang1(tokenizer_func),comp_env,&errorOccurred)); + + /* Doing the actual stuff */ + R_tryEval(lang1(complete_func),comp_env,&errorOccurred); + SEXP completions=PROTECT(R_tryEval(lang1(retrieve_func),comp_env,&errorOccurred)); + + /* Populating the list of completions */ + QStringList completionOptions; + for (int i=0;i + */ + +#ifndef _RSERVER_H +#define _RSERVER_H + +#include + +class Expression +{ + public: + QString cmd; + int returnCode; + bool hasOtherResults; + QString err_buffer; + QString std_buffer; +}; + +class RServer : public QObject +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.kde.Cantor.R") + + public: + enum Status { Idle=0, Busy }; + enum ReturnCode { SuccessCode=0, ErrorCode, InterruptedCode}; + RServer( ); + ~RServer() override; + + void initR(); + void autoload(); + void endR(); + + QString requestInput(const QString& prompt); + void showFiles(const QStringList& files); + + Q_SIGNALS: + void ready(); + void statusChanged(int status); + void expressionFinished(int returnCode, const QString& text); + void completionFinished(const QString& token,const QStringList& options); + void showFilesNeeded(const QStringList& files); + void inputRequested(const QString& prompt); + + void requestAnswered(); + void symbolList(const QStringList& variables, const QStringList& values, const QStringList& functions); + + public Q_SLOTS: + void runCommand(const QString& cmd, bool internal=false); + void answerRequest(const QString& answer); + void completeCommand(const QString& cmd); // TODO: comment properly, only takes command from start to cursor + void listSymbols(); + + private: + void setStatus(Status status); + void newPlotDevice(); + private: + bool m_isInitialized; + bool m_isCompletionAvailable; + Status m_status; + QString m_requestCache; + QString m_tmpDir; + QString m_curPlotFile; +}; + +#endif /* _RSERVER_H */ diff --git a/src/backends/R/rserver/rserver.kcfg b/src/backends/R/rserver/rserver.kcfg new file mode 100644 index 0000000..f33ec13 --- /dev/null +++ b/src/backends/R/rserver/rserver.kcfg @@ -0,0 +1,16 @@ + + + + + + + true + + + + + + diff --git a/src/backends/R/rserver/settings.kcfgc b/src/backends/R/rserver/settings.kcfgc new file mode 100644 index 0000000..b72ed9e --- /dev/null +++ b/src/backends/R/rserver/settings.kcfgc @@ -0,0 +1,3 @@ +File=rserver.kcfg +ClassName=RServerSettings +Singleton=true diff --git a/src/backends/R/rserver/tools/autoloads.r b/src/backends/R/rserver/tools/autoloads.r new file mode 100644 index 0000000..06d2e46 --- /dev/null +++ b/src/backends/R/rserver/tools/autoloads.r @@ -0,0 +1,29 @@ +#!/usr/bin/Rscript +# +# Script taken from RInside library +# +# This owes a lot to autoloads.R in the littler sources + +dp <- getOption("defaultPackages") +#dp <- dp[dp != 'datasets'] ## Rscript loads it too +#dp <- dp[dp != 'methods'] ## Rscript (in R 2.6.1) doesn't load methods either + +# Count of default packages +cat(" int packc = ",length(dp),";\n",sep='') + +# List of packages +cat(" const char *pack[] = {\n",paste(' "',dp,'"',sep='',collapse=",\n"),"\n };\n", sep="") + +packobjc <- array(0,dim=length(dp)) +packobj <- NULL +for (i in 1:length(dp)){ + obj = ls(paste("package:",dp[i],sep='')) + packobjc[i] = length(obj) + packobj = c(packobj,obj) +} + +# List of counts of objects per package +cat(" int packobjc[] = {\n ",paste(packobjc,sep='',collapse=",\n "),"\n };\n", sep="") + +# List of object names +cat(" const char *packobj[] = {\n ",paste('"',packobj,'"',sep='',collapse=",\n "),"\n };\n", sep="") diff --git a/src/backends/R/rserver/tools/envvars.r b/src/backends/R/rserver/tools/envvars.r new file mode 100644 index 0000000..3358573 --- /dev/null +++ b/src/backends/R/rserver/tools/envvars.r @@ -0,0 +1,16 @@ +#!/usr/bin/Rscript +# +# script taken from RInside library +# +# This owes a lot to littler.R in the littler sources + +ExcludeVars <- c("R_SESSION_TMPDIR","R_HISTFILE") +IncludeVars <- Sys.getenv() +IncludeVars <- IncludeVars[grep("^R_",names(IncludeVars),perl=TRUE)] +cat(" const char *R_VARS[] = {\n") +for (i in 1:length(IncludeVars)){ + if (names(IncludeVars)[i] %in% ExcludeVars) + next + cat(' "',names(IncludeVars)[i],'","',IncludeVars[i],'",\n',sep='') +} +cat(" NULL\n };\n") diff --git a/src/backends/R/rsession.cpp b/src/backends/R/rsession.cpp new file mode 100644 index 0000000..7ba3163 --- /dev/null +++ b/src/backends/R/rsession.cpp @@ -0,0 +1,217 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2018 Alexander Semke + */ + +#include "rsession.h" +#include "rexpression.h" +#include "rcompletionobject.h" +#include "rhighlighter.h" +#include + +#include +#include +#include + +#ifndef Q_OS_WIN +#include +#endif + +RSession::RSession(Cantor::Backend* backend) : Session(backend), m_process(nullptr), m_rServer(nullptr), m_variableModel(new Cantor::DefaultVariableModel(this)) +{ +} + +RSession::~RSession() +{ + if (m_process) + m_process->terminate(); +} + +void RSession::login() +{ + qDebug()<<"login"; + emit loginStarted(); + + if(m_process) + m_process->deleteLater(); + + m_process = new QProcess(this); + m_process->start(QStandardPaths::findExecutable(QLatin1String("cantor_rserver"))); + m_process->waitForStarted(); + m_process->waitForReadyRead(); + qDebug()<readAllStandardOutput(); + + m_rServer = new org::kde::Cantor::R(QString::fromLatin1("org.kde.Cantor.R-%1").arg(m_process->pid()), QLatin1String("/"), QDBusConnection::sessionBus(), this); + + connect(m_rServer, SIGNAL(statusChanged(int)), this, SLOT(serverChangedStatus(int))); + connect(m_rServer, SIGNAL(symbolList(QStringList,QStringList,QStringList)),this,SLOT(receiveSymbols(QStringList,QStringList,QStringList))); + + changeStatus(Session::Done); + emit loginDone(); + qDebug()<<"login done"; +} + +void RSession::logout() +{ + qDebug()<<"logout"; + m_process->terminate(); + + m_variableModel->clearVariables(); + m_variables.clear(); + m_functions.clear(); + emit symbolsChanged(); + + changeStatus(Status::Disable); +} + +void RSession::interrupt() +{ + if(!expressionQueue().isEmpty()) + { + qDebug()<<"interrupting " << expressionQueue().first()->command(); + if(m_process->state() != QProcess::NotRunning) + { +#ifndef Q_OS_WIN + const int pid=m_process->pid(); + kill(pid, SIGINT); +#else + ; //TODO: interrupt the process on windows +#endif + } + expressionQueue().first()->interrupt(); + expressionQueue().removeFirst(); + foreach (Cantor::Expression* expression, expressionQueue()) + expression->setStatus(Cantor::Expression::Done); + expressionQueue().clear(); + + qDebug()<<"done interrupting"; + } + + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression* RSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + qDebug()<<"evaluating: "<setFinishingBehavior(behave); + expr->setCommand(cmd); + + expr->evaluate(); + + return expr; +} + +Cantor::CompletionObject* RSession::completionFor(const QString& command, int index) +{ + RCompletionObject *cmp=new RCompletionObject(command, index, this); + connect(m_rServer,SIGNAL(completionFinished(QString,QStringList)),cmp,SLOT(receiveCompletions(QString,QStringList))); + connect(cmp,SIGNAL(requestCompletion(QString)),m_rServer,SLOT(completeCommand(QString))); + return cmp; +} + +QSyntaxHighlighter* RSession::syntaxHighlighter(QObject* parent) +{ + RHighlighter *h=new RHighlighter(parent); + connect(h,SIGNAL(syntaxRegExps(QVector&,QVector&)),this,SLOT(fillSyntaxRegExps(QVector&,QVector&))); + connect(this,SIGNAL(symbolsChanged()),h,SLOT(refreshSyntaxRegExps())); + connect(this,SIGNAL(syntaxRegExpsFilled()), h, SLOT(updateHighlighting())); + return h; +} + +void RSession::fillSyntaxRegExps(QVector& v, QVector& f) +{ + // WARNING: current implementation as-in-maxima is a performance hit + // think about grouping expressions together or only fetching needed ones + v.clear(); f.clear(); + + foreach (const QString s, m_variables) + if (!s.contains(QRegExp(QLatin1String("[^A-Za-z0-9_.]")))) + v.append(QRegExp(QLatin1String("\\b")+s+QLatin1String("\\b"))); + foreach (const QString s, m_functions) + if (!s.contains(QRegExp(QLatin1String("[^A-Za-z0-9_.]")))) + f.append(QRegExp(QLatin1String("\\b")+s+QLatin1String("\\b"))); + + emit syntaxRegExpsFilled(); +} + +void RSession::receiveSymbols(const QStringList& vars, const QStringList& values, const QStringList & funcs) +{ + m_variables = vars; + for (int i = 0; i < vars.count(); i++) + { + m_variableModel->addVariable(vars[i], values[i]); + } + m_functions = funcs; + + emit symbolsChanged(); +} + +void RSession::serverChangedStatus(int status) +{ + qDebug()<<"changed status to "<(expressionQueue().takeFirst()); + qDebug()<<"done running "<command(); + } + + if(expressionQueue().isEmpty()) + changeStatus(Cantor::Session::Done); + else + runFirstExpression(); + } + else + changeStatus(Cantor::Session::Running); +} + +void RSession::runFirstExpression() +{ + if (expressionQueue().isEmpty()) + return; + + disconnect(m_rServer, SIGNAL(expressionFinished(int,QString)), nullptr, nullptr); + disconnect(m_rServer, SIGNAL(inputRequested(QString)), nullptr, nullptr); + disconnect(m_rServer, SIGNAL(showFilesNeeded(QStringList)), nullptr, nullptr); + qDebug()<<"size: "<(expressionQueue().first()); + qDebug()<<"running expression: "<command(); + + connect(m_rServer, SIGNAL(expressionFinished(int,QString)), expr, SLOT(finished(int,QString))); + connect(m_rServer, SIGNAL(inputRequested(QString)), expr, SIGNAL(needsAdditionalInformation(QString))); + connect(m_rServer, SIGNAL(showFilesNeeded(QStringList)), expr, SLOT(showFilesAsResult(QStringList))); + + expr->setStatus(Cantor::Expression::Computing); + m_rServer->runCommand(expr->command()); +} + +void RSession::sendInputToServer(const QString& input) +{ + QString s=input; + if(!input.endsWith(QLatin1Char('\n'))) + s+=QLatin1Char('\n'); + m_rServer->answerRequest(s); +} + +QAbstractItemModel* RSession::variableModel() +{ + return m_variableModel; +} diff --git a/src/backends/R/rsession.h b/src/backends/R/rsession.h new file mode 100644 index 0000000..1fdc51d --- /dev/null +++ b/src/backends/R/rsession.h @@ -0,0 +1,75 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _RSESSION_H +#define _RSESSION_H + +#include +#include + +#include "session.h" +#include "rserver_interface.h" + +class RExpression; +class QProcess; + +namespace Cantor { +class DefaultVariableModel; +} + +class RSession : public Cantor::Session +{ + Q_OBJECT + public: + explicit RSession( Cantor::Backend* backend); + ~RSession() override; + + void login() override; + void logout() override; + + void interrupt() override; + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& command, int index=-1) override; + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + QAbstractItemModel* variableModel() override; + void sendInputToServer(const QString& input); + void runFirstExpression() override; + + protected Q_SLOTS: + void serverChangedStatus(int status); + void receiveSymbols(const QStringList& vars, const QStringList& values, const QStringList & funcs); + void fillSyntaxRegExps(QVector& v, QVector& f); + + Q_SIGNALS: + void symbolsChanged(); + void syntaxRegExpsFilled(); + + private: + QProcess* m_process; + org::kde::Cantor::R* m_rServer; + + /* Available variables and functions, TODO make full classes and type info */ + Cantor::DefaultVariableModel* m_variableModel; + QStringList m_variables; + QStringList m_functions; +}; + +#endif /* _RSESSION_H */ diff --git a/src/backends/R/rsettingswidget.cpp b/src/backends/R/rsettingswidget.cpp new file mode 100644 index 0000000..ea9ca15 --- /dev/null +++ b/src/backends/R/rsettingswidget.cpp @@ -0,0 +1,56 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#include "rsettingswidget.h" +#include +#include +#include +#include +#include + +RSettingsWidget::RSettingsWidget(QWidget *parent) : QWidget(parent) +{ + setupUi(this); + kcfg_autorunScripts->lineEdit()->setReadOnly(true); + kcfg_autorunScripts->lineEdit()->installEventFilter(this); + kcfg_autorunScripts->lineEdit()->setToolTip(i18n("Double click to open file selection dialog")); +} + +bool RSettingsWidget::eventFilter(QObject *obj, QEvent *event) +{ + /* Intercepting the doubleclick events of LineEdit */ + if (obj == kcfg_autorunScripts->lineEdit() && event->type() == QEvent::MouseButtonDblClick) + { + QMouseEvent *ev=reinterpret_cast(event); + if (ev->button() == Qt::LeftButton) + { + displayFileSelectionDialog(); + return false; + } + } + return QObject::eventFilter(obj,event); +} + +void RSettingsWidget::displayFileSelectionDialog() +{ + QString path=QFileDialog::getOpenFileName(this,kcfg_autorunScripts->lineEdit()->text(),QLatin1String("/home"),i18n("*.R *.r|R source files (*.R, *.r)")); + if (path.length()>0) + kcfg_autorunScripts->lineEdit()->setText(path); +} diff --git a/src/backends/R/rsettingswidget.h b/src/backends/R/rsettingswidget.h new file mode 100644 index 0000000..fcededc --- /dev/null +++ b/src/backends/R/rsettingswidget.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#ifndef _RSETTINGSWIDGET_H +#define _RSETTINGSWIDGET_H + +#include "ui_settings.h" + +class RSettingsWidget : public QWidget,public Ui::RSettingsBase +{ + Q_OBJECT + + public: + explicit RSettingsWidget(QWidget *parent = nullptr); + bool eventFilter(QObject*, QEvent*) override; + + public Q_SLOTS: + void displayFileSelectionDialog(); +}; + +#endif /* _RSETTINGSWIDGET_H */ diff --git a/src/backends/R/settings.ui b/src/backends/R/settings.ui new file mode 100644 index 0000000..017e260 --- /dev/null +++ b/src/backends/R/settings.ui @@ -0,0 +1,37 @@ + + + RSettingsBase + + + + 0 + 0 + 414 + 231 + + + + + + + Integrate Plots in Worksheet + + + + + + + Scripts to autorun + + + + + + + + + + + + + diff --git a/src/backends/julia/CMakeLists.txt b/src/backends/julia/CMakeLists.txt new file mode 100644 index 0000000..ebc7f20 --- /dev/null +++ b/src/backends/julia/CMakeLists.txt @@ -0,0 +1,41 @@ +include_directories(${JULIA_INCLUDE_DIRS}) + +add_subdirectory(juliaserver) + +set(JuliaBackend_SRCS + juliabackend.cpp + juliasession.cpp + juliaexpression.cpp + juliakeywords.cpp + juliahighlighter.cpp + juliaextensions.cpp + juliacompletionobject.cpp +) + +kconfig_add_kcfg_files(JuliaBackend_SRCS settings.kcfgc) +ki18n_wrap_ui(JuliaBackend_SRCS settings.ui) + +add_backend(juliabackend ${JuliaBackend_SRCS}) + +target_link_libraries(cantor_juliabackend + ${JULIA_LIBRARY} + Qt5::DBus + KF5::SyntaxHighlighting +) + +if(BUILD_TESTING) + add_executable(testjulia testjulia.cpp) + add_test(NAME testjulia COMMAND testjulia) + target_link_libraries(testjulia + Qt5::Test + cantorlibs + cantortest + ) +endif(BUILD_TESTING) + +install(FILES juliabackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) +file(GLOB scripts "${CMAKE_CURRENT_SOURCE_DIR}/scripts/*.jl") +install( + FILES ${scripts} + DESTINATION ${KDE_INSTALL_DATADIR}/cantor/juliabackend/scripts +) diff --git a/src/backends/julia/juliabackend.cpp b/src/backends/julia/juliabackend.cpp new file mode 100644 index 0000000..1551060 --- /dev/null +++ b/src/backends/julia/juliabackend.cpp @@ -0,0 +1,109 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#include "juliabackend.h" + +#include + +#include "juliasession.h" +#include "ui_settings.h" +#include "settings.h" +#include "juliaextensions.h" + +JuliaBackend::JuliaBackend(QObject *parent, const QList &args) + : Cantor::Backend(parent, args) +{ + setEnabled(true); + + new JuliaVariableManagementExtension(this); + new JuliaPackagingExtension(this); + new JuliaPlotExtension(this); + new JuliaScriptExtension(this); + new JuliaLinearAlgebraExtension(this); +} + +QString JuliaBackend::id() const +{ + return QLatin1String("julia"); +} + +QString JuliaBackend::version() const +{ + return QLatin1String("1.0.0"); +} + +Cantor::Session *JuliaBackend::createSession() +{ + return new JuliaSession(this); +} + +Cantor::Backend::Capabilities JuliaBackend::capabilities() const +{ + return Cantor::Backend::SyntaxHighlighting | + Cantor::Backend::VariableManagement | + Cantor::Backend::Completion; +} + +QString JuliaBackend::description() const +{ + return i18n( + "

    Julia is a high-level, high-performance dynamic programming " + "language for technical computing, with syntax that is familiar to " + "users of other technical computing environments. It provides a " + "sophisticated compiler, distributed parallel execution, numerical " + "accuracy, and an extensive mathematical function library.

    " + ); +} + +QUrl JuliaBackend::helpUrl() const +{ + return QUrl(i18nc( + "The url to the documentation of Julia, please check if there is a" + " translated version and use the correct url", + "http://docs.julialang.org/en/latest/" + )); +} + +bool JuliaBackend::requirementsFullfilled() const +{ + return QFileInfo( + JuliaSettings::self()->replPath().toLocalFile() + ).isExecutable(); +} + +QWidget *JuliaBackend::settingsWidget(QWidget *parent) const +{ + QWidget *widget = new QWidget(parent); + Ui::JuliaSettingsBase s; + s.setupUi(widget); + return widget; +} + +KConfigSkeleton *JuliaBackend::config() const +{ + return JuliaSettings::self(); +} + +K_PLUGIN_FACTORY_WITH_JSON( + juliabackend, + "juliabackend.json", + registerPlugin(); +) + +#include "juliabackend.moc" diff --git a/src/backends/julia/juliabackend.h b/src/backends/julia/juliabackend.h new file mode 100644 index 0000000..da30145 --- /dev/null +++ b/src/backends/julia/juliabackend.h @@ -0,0 +1,91 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include "backend.h" + +/** + * Backend for Julia language + * + * @see http://julialang.org/ + * @see JuliaServer + */ +class JuliaBackend: public Cantor::Backend +{ + Q_OBJECT +public: + /** + * Constructs julia backend + * + * @param parent QObject parent. Defaults to nullptr. + * @param args Additional arguments for the backend. + * Defaults to QList(). + */ + explicit JuliaBackend( + QObject *parent = nullptr, + const QList &args = QList()); + + ~JuliaBackend() override = default; + + /** + * @see Cantor::Backend::id + */ + QString id() const override; + + /** + * @see Cantor::Backend::version + */ + QString version() const override; + + /** + * @see Cantor::Backend::createSession + */ + Cantor::Session *createSession() override; + + /** + * @see Cantor::Backend::capabilities + */ + Cantor::Backend::Capabilities capabilities() const override; + + /** + * @see Cantor::Backend::description + */ + QString description() const override; + + /** + * @see Cantor::Backend::helpUrl + */ + QUrl helpUrl() const override; + + /** + * @see Cantor::Backend::requirementsFullfilled + */ + bool requirementsFullfilled() const override; + + /** + * @see Cantor::Backend::settingsWidget + */ + QWidget *settingsWidget(QWidget *parent) const override; + + /** + * @see Cantor::Backend::config + */ + KConfigSkeleton *config() const override; +}; diff --git a/src/backends/julia/juliabackend.json b/src/backends/julia/juliabackend.json new file mode 100644 index 0000000..b6f45f4 --- /dev/null +++ b/src/backends/julia/juliabackend.json @@ -0,0 +1,65 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Julia backend for Cantor", + "Description[ca@valencia]": "Dorsal del Julia per al Cantor", + "Description[ca]": "Dorsal del Julia per al Cantor", + "Description[cs]": "Podpůrná vrstva Cantoru Julia", + "Description[de]": "Julia-Modul für Cantor", + "Description[el]": "Σύστημα υποστήριξης Julia για το Cantor", + "Description[en_GB]": "Julia backend for Cantor", + "Description[es]": "Motor de Julia para Cantor", + "Description[et]": "Cantori Julia taustaprogramm", + "Description[fi]": "Cantorin Julia-taustaosa", + "Description[fr]": "Moteur Julia pour Cantor", + "Description[gl]": "Infraestrutura de Julia para Cantor.", + "Description[it]": "Backend Julia per Cantor", + "Description[nl]": "Julia backend voor Cantor", + "Description[nn]": "Julia-motor for Cantor", + "Description[pl]": "Silnik Julii dla Cantora", + "Description[pt]": "Infra-estrutura do Julia para o Cantor", + "Description[pt_BR]": "Infraestrutura Julia para o Cantor", + "Description[ru]": "Модуль поддержки языка Julia", + "Description[sk]": "Julia backend pre Cantor", + "Description[sl]": "Zaledje Julia za Cantor", + "Description[sv]": "Julia bakgrundsprogram för Cantor", + "Description[tr]": "Cantor için Julia arka ucu", + "Description[uk]": "Модуль Julia для Cantor", + "Description[x-test]": "xxJulia backend for Cantorxx", + "Description[zh_CN]": "Cantor 的 Julia 后端", + "Description[zh_TW]": "Cantor 的 Julia 後端", + "Icon": "juliabackend", + "Id": "Julia", + "Name": "Julia", + "Name[ca@valencia]": "Julia", + "Name[ca]": "Julia", + "Name[cs]": "Julia", + "Name[de]": "Julia", + "Name[el]": "Julia", + "Name[en_GB]": "Julia", + "Name[es]": "Julia", + "Name[et]": "Julia", + "Name[fi]": "Julia", + "Name[fr]": "Julia", + "Name[gl]": "Julia", + "Name[it]": "Julia", + "Name[nl]": "Julia", + "Name[nn]": "Julia", + "Name[pl]": "Julia", + "Name[pt]": "Julia", + "Name[pt_BR]": "Julia", + "Name[ru]": "Julia", + "Name[sk]": "Julia", + "Name[sl]": "Julia", + "Name[sv]": "Julia", + "Name[tr]": "Julia", + "Name[uk]": "Julia", + "Name[x-test]": "xxJuliaxx", + "Name[zh_CN]": "Julia", + "Name[zh_TW]": "Julia", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://julialang.org/" + } +} diff --git a/src/backends/julia/juliabackend.kcfg b/src/backends/julia/juliabackend.kcfg new file mode 100644 index 0000000..fd281a3 --- /dev/null +++ b/src/backends/julia/juliabackend.kcfg @@ -0,0 +1,28 @@ + + + QStandardPaths + + + + + + QUrl::fromLocalFile(QStandardPaths::findExecutable(QLatin1String("julia"))) + + + + + true + + + + + + + + svg + + + diff --git a/src/backends/julia/juliacompletionobject.cpp b/src/backends/julia/juliacompletionobject.cpp new file mode 100644 index 0000000..4942a86 --- /dev/null +++ b/src/backends/julia/juliacompletionobject.cpp @@ -0,0 +1,97 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ + +#include "juliacompletionobject.h" + +#include "juliasession.h" +#include "juliakeywords.h" + +#include "result.h" + +#include +#include + +JuliaCompletionObject::JuliaCompletionObject( + const QString &command, int index, JuliaSession *session) + : Cantor::CompletionObject(session) +{ + setLine(command, index); +} + +void JuliaCompletionObject::fetchCompletions() +{ + if (session()->status() == Cantor::Session::Disable) + { + QStringList allCompletions; + + allCompletions << JuliaKeywords::instance()->keywords(); + allCompletions << JuliaKeywords::instance()->variables(); + allCompletions << JuliaKeywords::instance()->functions(); + allCompletions << JuliaKeywords::instance()->plotShowingCommands(); + + setCompletions(allCompletions); + emit fetchingDone(); + } + else + { + QString completionCommand; +#if QT_VERSION_CHECK(JULIA_VERSION_MAJOR, JULIA_VERSION_MINOR, 0) >= QT_VERSION_CHECK(0, 7, 0) + completionCommand = + QString::fromLatin1( + "using REPL; " + "join(" + "map(REPL.REPLCompletions.completion_text, REPL.REPLCompletions.completions(\"%1\", %2)[1])," + "\"__CANTOR_DELIM__\")" + ); +#else + completionCommand = + QString::fromLatin1( + "join(" + "Base.REPL.REPLCompletions.completions(\"%1\", %2)[1]," + "\"__CANTOR_DELIM__\")" + ); +#endif + auto julia_session = static_cast(session()); + julia_session->runJuliaCommand(completionCommand.arg(command()).arg(command().size())); + auto result = julia_session->getOutput(); + result.chop(1); + result.remove(0, 1); + QStringList completions = result.split(QLatin1String("__CANTOR_DELIM__")); + if (command().contains(QLatin1Char('.'))) + for(QString& word : completions) + if (!word.startsWith(command())) + word.prepend(command()); + + setCompletions(completions); + emit fetchingDone(); + } +} + +bool JuliaCompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_') || + c == QLatin1Char('%') || c == QLatin1Char('$') || c == QLatin1Char('.'); +} + +bool JuliaCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c == QLatin1Char('_') || c == QLatin1Char('%') || + c == QLatin1Char('$'); +} diff --git a/src/backends/julia/juliacompletionobject.h b/src/backends/julia/juliacompletionobject.h new file mode 100644 index 0000000..bd9a58e --- /dev/null +++ b/src/backends/julia/juliacompletionobject.h @@ -0,0 +1,62 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ + +#pragma once + +#include "completionobject.h" + +class JuliaSession; + +/** + * Implements code completion for Julia language + * + * Uses Julia's Base.REPL.REPLCompletions.completions command to get + * context-aware completions like in native Julia REPL + */ +class JuliaCompletionObject : public Cantor::CompletionObject +{ +public: + /** + * Constructs JuliaCompletionObject + * + * @param cmd command piece to generate completion + * @param index index of cursor in command + * @param session current session + */ + JuliaCompletionObject(const QString &cmd, int index, JuliaSession *session); + ~JuliaCompletionObject() override = default; + +protected: + /** + * @see Cantor::CompletionObject::mayIdentifierContain + */ + bool mayIdentifierContain(QChar c) const override; + bool mayIdentifierBeginWith(QChar c) const override; + + /** + * @see Cantor::CompletionObject::mayIdentifierBeginWith + */ + +protected Q_SLOTS: + /** + * @see Cantor::CompletionObject::fetchCompletions + */ + void fetchCompletions() override; +}; diff --git a/src/backends/julia/juliaexpression.cpp b/src/backends/julia/juliaexpression.cpp new file mode 100644 index 0000000..6add605 --- /dev/null +++ b/src/backends/julia/juliaexpression.cpp @@ -0,0 +1,106 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#include "juliaexpression.h" + +#include +#include + +#include "settings.h" +#include "juliasession.h" +#include "juliakeywords.h" +#include "textresult.h" +#include "imageresult.h" + +JuliaExpression::JuliaExpression(Cantor::Session *session, bool internal) + : Cantor::Expression(session, internal) +{ +} + +void JuliaExpression::evaluate() +{ + setStatus(Cantor::Expression::Computing); + auto juliaSession = dynamic_cast(session()); + + // Plots integration + m_plot_filename.clear(); + if (juliaSession->integratePlots() && checkPlotShowingCommands()) { + // Simply add plot saving command to the end of execution + QStringList inlinePlotFormats; + inlinePlotFormats << QLatin1String("svg"); + inlinePlotFormats << QLatin1String("eps"); + inlinePlotFormats << QLatin1String("png"); + + auto inlinePlotFormat = + inlinePlotFormats[JuliaSettings::inlinePlotFormat()]; + m_plot_filename = QDir::tempPath() + + QString::fromLatin1("/cantor-julia-export-%1.%2") + .arg(QUuid::createUuid().toString()).arg(inlinePlotFormat); + + QString saveFigCommand = + QString::fromLatin1("\nGR.savefig(\"%1\")\n").arg(m_plot_filename); + + setCommand(command().append(saveFigCommand)); + } + + juliaSession->runExpression(this); +} + +void JuliaExpression::finalize() +{ + auto juliaSession = dynamic_cast(session()); + setErrorMessage( + juliaSession->getError() + .replace(QLatin1String("\n"), QLatin1String("
    ")) + ); + if (juliaSession->getWasException()) { + setResult(new Cantor::TextResult(juliaSession->getOutput())); + setStatus(Cantor::Expression::Error); + } else { + if (!m_plot_filename.isEmpty() + && QFileInfo(m_plot_filename).exists()) { + // If we have plot in result, show it + setResult( + new Cantor::ImageResult(QUrl::fromLocalFile(m_plot_filename))); + QDir().remove(m_plot_filename); + } else { + const QString& output = juliaSession->getOutput(); + if (!output.isEmpty()) + setResult(new Cantor::TextResult(output)); + } + setStatus(Cantor::Expression::Done); + } +} + +void JuliaExpression::interrupt() +{ + setStatus(Cantor::Expression::Interrupted); +} + +bool JuliaExpression::checkPlotShowingCommands() +{ + for (auto showingCommand : + JuliaKeywords::instance()->plotShowingCommands()) { + if (command().contains(showingCommand + QLatin1String("("))) { + return true; + } + } + return false; +} + diff --git a/src/backends/julia/juliaexpression.h b/src/backends/julia/juliaexpression.h new file mode 100644 index 0000000..ad61e7f --- /dev/null +++ b/src/backends/julia/juliaexpression.h @@ -0,0 +1,69 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include "expression.h" + +/** + * Expression of Julia language + */ +class JuliaExpression: public Cantor::Expression +{ + Q_OBJECT +public: + /** + * Creates new JuliaExpression + * + * @param session session to bound expression to + * @param internal @see Cantor::Expression::Expression(Session*, bool) + */ + explicit JuliaExpression(Cantor::Session *session, bool internal = false); + ~JuliaExpression() override = default; + + /** + * @see Cantor::Expression::evaluate + */ + void evaluate() override; + + /** + * @see Cantor::Expression::interrupt + */ + void interrupt() override; + + /** + * Call this function from session when JuliaServer ends evaluation of + * this expression. + * + * This checks inline plots, exceptions and set appropriate result + */ + void finalize(); + +private: + /// If not empty, it's a filename of plot image file expression is awaiting + /// to get + QString m_plot_filename; + + + /** + * @return bool indicator if current expression contains command that + * shows plot + */ + bool checkPlotShowingCommands(); +}; diff --git a/src/backends/julia/juliaextensions.cpp b/src/backends/julia/juliaextensions.cpp new file mode 100644 index 0000000..df1d1cd --- /dev/null +++ b/src/backends/julia/juliaextensions.cpp @@ -0,0 +1,263 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#include "juliaextensions.h" + +#include +#include + +#include "juliascriptloading.h" + +#define JULIA_EXT_CDTOR(name) Julia##name##Extension::Julia##name##Extension(QObject *parent) : name##Extension(parent) {} \ + Julia##name##Extension::~Julia##name##Extension() {} + + +JULIA_EXT_CDTOR(LinearAlgebra) + +QString JuliaLinearAlgebraExtension::createVector( + const QStringList &entries, + Cantor::LinearAlgebraExtension::VectorType type) +{ + QString command; + command += QLatin1String("["); + + QString separator = QLatin1String(type == ColumnVector ? ", " : " "); + + for (const QString &entry : entries) { + command += entry + separator; + } + + command.chop(separator.size()); + command += QLatin1String("]\n"); + + return command; +} + +QString JuliaLinearAlgebraExtension::createMatrix( + const Cantor::LinearAlgebraExtension::Matrix &matrix) +{ + QString command; + command += QLatin1String("["); + + for (const QStringList row : matrix) { + for (const QString entry : row) { + command += entry; + command += QLatin1String(" "); + } + command.chop(1); + command += QLatin1String("; "); + } + + command.chop(2); + command += QLatin1String("]"); + + return command; +} + +QString JuliaLinearAlgebraExtension::eigenValues(const QString &matrix) +{ + return QString::fromLatin1("eig(%1)[1]").arg(matrix); +} + +QString JuliaLinearAlgebraExtension::eigenVectors(const QString &matrix) +{ + return QString::fromLatin1("eig(%1)[2]").arg(matrix); +} + +QString JuliaLinearAlgebraExtension::identityMatrix(int size) +{ + return QString::fromLatin1("eye(%1)").arg(size); +} + +QString JuliaLinearAlgebraExtension::invertMatrix(const QString &matrix) +{ + return QString::fromLatin1("inv(%1)").arg(matrix); +} + +QString JuliaLinearAlgebraExtension::nullMatrix(int rows, int columns) +{ + return QString::fromLatin1("zeros(%1, %2)").arg(rows).arg(columns); +} + +QString JuliaLinearAlgebraExtension::nullVector( + int size, + Cantor::LinearAlgebraExtension::VectorType type) +{ + switch (type) { + case ColumnVector: + return QString::fromLatin1("zeros(%1)").arg(size); + case RowVector: + return QString::fromLatin1("zeros(%1, %2)").arg(1).arg(size); + default: + return Cantor::LinearAlgebraExtension::nullVector(size, type); + } +} + +QString JuliaLinearAlgebraExtension::rank(const QString &matrix) +{ + return QString::fromLatin1("rank(%1)").arg(matrix); +} + +QString JuliaLinearAlgebraExtension::charPoly(const QString &matrix) +{ + return QString::fromLatin1("poly(%1)").arg(matrix); +} + + +JULIA_EXT_CDTOR(Packaging) + +QString JuliaPackagingExtension::importPackage(const QString &package) +{ + return QString::fromLatin1("import %1").arg(package); +} + + +JULIA_EXT_CDTOR(Plot) + +QString JuliaPlotExtension::plotFunction2d( + const QString &function, + const QString &variable, + const QString &left, + const QString &right) +{ + auto new_left = left; + auto new_right = right; + if (new_left.isEmpty() && new_right.isEmpty()) { + new_left = QLatin1String("-1"); + new_right = QLatin1String("1"); + } else if (new_left.isEmpty()) { + new_left = QString::fromLatin1("(%1) - 1").arg(new_right); + } else if (new_right.isEmpty()) { + new_right = QString::fromLatin1("(%1) + 1").arg(new_left); + } + + auto xlimits = QString::fromLatin1("GR.xlim((%1, %2))\n").arg(new_left).arg(new_right); + auto linspace = + QString::fromLatin1("linspace(%1, %2, 100)").arg(new_left).arg(new_right); + + return QString::fromLatin1( + "import GR\n" + "%3" + "GR.plot(%1, [%2 for %4 in %1])\n" + ).arg(linspace).arg(function).arg(xlimits).arg(variable); +} + +QString JuliaPlotExtension::plotFunction3d( + const QString &function, + const VariableParameter& var1, + const VariableParameter& var2) +{ + + auto update_interval = [](Interval &interval) { + if (interval.first.isEmpty() && interval.second.isEmpty()) { + interval.first = QLatin1String("-1"); + interval.second = QLatin1String("1"); + } else if (interval.first.isEmpty()) { + interval.second = QString::fromLatin1("(%1) + 1") + .arg(interval.first); + } else if (interval.second.isEmpty()) { + interval.first = QString::fromLatin1("(%1) - 1") + .arg(interval.second); + } + }; + + Interval interval1 = var1.second; + Interval interval2 = var2.second; + + update_interval(interval1); + update_interval(interval2); + + return QString::fromLatin1( + "import GR\n" + "values = zeros(100, 100)\n" + "for p_x in enumerate(linspace(%1, %2, 100))\n" + " i, %6 = p_x\n" + " for p_y in enumerate(linspace(%3, %4, 100))\n" + " j, %7 = p_y\n" + " values[i, j] = %5\n" + " end\n" + "end\n" + "GR.surface(linspace(%1, %2, 100), linspace(%3, %4, 100), values)\n" + ).arg(interval1.first).arg(interval1.second) + .arg(interval2.first).arg(interval2.second) + .arg(function) + .arg(var1.first).arg(var2.first); +} + + +JULIA_EXT_CDTOR(Script) + +QString JuliaScriptExtension::runExternalScript(const QString &path) +{ + return QString::fromLatin1("include(\"%1\")").arg(path); +} + +QString JuliaScriptExtension::scriptFileFilter() +{ + return i18n("Julia script file (*.jl)"); +} + +QString JuliaScriptExtension::highlightingMode() +{ + return QLatin1String("julia"); +} + + +JULIA_EXT_CDTOR(VariableManagement) + +const QString JuliaVariableManagementExtension::REMOVED_VARIABLE_MARKER = + QLatin1String("__REM__"); + +QString JuliaVariableManagementExtension::addVariable( + const QString &name, + const QString &value) +{ + return setValue(name, value); +} + +QString JuliaVariableManagementExtension::setValue( + const QString &name, + const QString &value) +{ + return QString::fromLatin1("%1 = %2").arg(name).arg(value); +} + +QString JuliaVariableManagementExtension::removeVariable(const QString &name) +{ + // There is no way to completely delete object from scope: + // http://docs.julialang.org/en/release-0.4/manual/faq/#how-do-i-delete-an-object-in-memory + return QString::fromLatin1("%1 = \"%2\"") + .arg(name).arg(REMOVED_VARIABLE_MARKER); +} + +QString JuliaVariableManagementExtension::clearVariables() +{ + return loadScript(QLatin1String("variables_cleaner")) + .arg(REMOVED_VARIABLE_MARKER); +} + +QString JuliaVariableManagementExtension::saveVariables(const QString &fileName) +{ + return loadScript(QLatin1String("variables_saver")).arg(fileName); +} + +QString JuliaVariableManagementExtension::loadVariables(const QString &fileName) +{ + return loadScript(QLatin1String("variables_loader")).arg(fileName); +} diff --git a/src/backends/julia/juliaextensions.h b/src/backends/julia/juliaextensions.h new file mode 100644 index 0000000..29c072b --- /dev/null +++ b/src/backends/julia/juliaextensions.h @@ -0,0 +1,204 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include + +#define JULIA_EXT_CDTOR_DECL(name) Julia##name##Extension(QObject *parent); \ + ~Julia##name##Extension(); + + +/** + * Implementation of linear algebra wizards for Julia + */ +class JuliaLinearAlgebraExtension: public Cantor::LinearAlgebraExtension +{ +public: + JULIA_EXT_CDTOR_DECL(LinearAlgebra) + + /** + * @see Cantor::LinearAlgebraExtension::createVector + */ + QString createVector( + const QStringList &entries, + VectorType type) override; + + /** + * @see Cantor::LinearAlgebraExtension::nullVector + */ + QString nullVector(int size, VectorType type) override; + + /** + * @see Cantor::LinearAlgebraExtension::createMatrix + */ + QString createMatrix( + const Cantor::LinearAlgebraExtension::Matrix &matrix) override; + + /** + * @see Cantor::LinearAlgebraExtension::identityMatrix + */ + QString identityMatrix(int size) override; + + /** + * @see Cantor::LinearAlgebraExtension::nullMatrix + */ + QString nullMatrix(int rows, int columns) override; + + /** + * @see Cantor::LinearAlgebraExtension::rank + */ + QString rank(const QString &matrix) override; + + /** + * @see Cantor::LinearAlgebraExtension::invertMatrix + */ + QString invertMatrix(const QString &matrix) override; + + /** + * @see Cantor::LinearAlgebraExtension::charPoly + */ + QString charPoly(const QString &matrix) override; + + /** + * @see Cantor::LinearAlgebraExtension::eigenVectors + */ + QString eigenVectors(const QString &matrix) override; + + /** + * @see Cantor::LinearAlgebraExtension::eigenValues + */ + QString eigenValues(const QString &matrix) override; +}; + +/** + * Implementation of packaging wizards for Julia + */ +class JuliaPackagingExtension: public Cantor::PackagingExtension +{ +public: + JULIA_EXT_CDTOR_DECL(Packaging) + + /** + * @see Cantor::PackagingExtension::importPackage + */ + QString importPackage(const QString &module) override; +}; + +/** + * Implementation of plot wizards for Julia + * + * Plotting is based on GR package + */ +class JuliaPlotExtension: public Cantor::PlotExtension +{ +public: + JULIA_EXT_CDTOR_DECL(Plot) + + /** + * @see Cantor::PlotExtension::plotFunction2d + */ + QString plotFunction2d( + const QString &function, + const QString &variable, + const QString &left, + const QString &right) override; + + /** + * @see Cantor::PlotExtension::plotFunction3d + */ + QString plotFunction3d( + const QString &function, + const VariableParameter& var1, + const VariableParameter& var2) override; +}; + +/** + * Implementation of script wizard for Julia + */ +class JuliaScriptExtension: public Cantor::ScriptExtension +{ +public: + JULIA_EXT_CDTOR_DECL(Script) + + /** + * @see Cantor::ScriptExtension::scriptFileFilter + */ + QString scriptFileFilter() override; + + /** + * @see Cantor::ScriptExtension::highlightingMode + */ + QString highlightingMode() override; + + /** + * @see Cantor::ScriptExtension::runExternalScript + */ + QString runExternalScript(const QString &path) override; +}; + +/** + * Julia variable management extension + * + * Based on JLD package for loading/saving variables + */ +class JuliaVariableManagementExtension: public Cantor::VariableManagementExtension +{ +public: + JULIA_EXT_CDTOR_DECL(VariableManagement) + + // There is no way to completely delete object from scope: + // http://docs.julialang.org/en/release-0.4/manual/faq/#how-do-i-delete-an-object-in-memory + // So we are saving special marker to variable to mark it as removed + static const QString REMOVED_VARIABLE_MARKER; + + /** + * @see Cantor::VariableManagementExtension::addVariable + */ + QString addVariable( + const QString &name, + const QString &value) override; + + /** + * @see Cantor::VariableManagementExtension::setValue + */ + QString setValue( + const QString &name, + const QString &value) override; + + /** + * @see Cantor::VariableManagementExtension::removeVariable + */ + QString removeVariable(const QString &name) override; + + /** + * @see Cantor::VariableManagementExtension::saveVariables + */ + QString saveVariables(const QString &fileName) override; + + /** + * @see Cantor::VariableManagementExtension::loadVariables + */ + QString loadVariables(const QString &fileName) override; + + /** + * @see Cantor::VariableManagementExtension::clearVariables + */ + QString clearVariables() override; +}; diff --git a/src/backends/julia/juliahighlighter.cpp b/src/backends/julia/juliahighlighter.cpp new file mode 100644 index 0000000..8544c7b --- /dev/null +++ b/src/backends/julia/juliahighlighter.cpp @@ -0,0 +1,185 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ + +#include "juliahighlighter.h" +#include "juliakeywords.h" + +#include +#include +#include + +JuliaHighlighter::JuliaHighlighter(QObject *parent) + : Cantor::DefaultHighlighter(parent) +{ + addKeywords(JuliaKeywords::instance()->keywords()); + addVariables(JuliaKeywords::instance()->variables()); + addFunctions(JuliaKeywords::instance()->functions()); + addFunctions(JuliaKeywords::instance()->plotShowingCommands()); +} + +void JuliaHighlighter::highlightBlock(const QString &text) +{ + if (skipHighlighting(text)) { + return; + } + + // Do some backend independent highlighting (brackets etc.) + DefaultHighlighter::highlightBlock(text); + + // Now we are about to make correct strings and comments highlighting + // + // Main idea: as soon as string starts comment or anything else cant start + // until current string ends. The same with comment, except '#' comment + // that ends by newline + // + // To pass information to next block, we are using next states + const int IN_MULTILINE_COMMENT = 1; + const int IN_CHARACTER = 2; + const int IN_SINGLE_QUOTE_STRING = 4; + const int IN_TRIPLE_QUOTE_STRING = 8; + + // Markers of scopes start, ends + QRegExp multiLineCommentStart(QLatin1String("#=")); + QRegExp multiLineCommentEnd(QLatin1String("=#")); + QRegExp characterStartEnd(QLatin1String("'")); + QRegExp singleQuoteStringStartEnd(QLatin1String("\"")); + QRegExp tripleQuoteStringStartEnd(QLatin1String("\"\"\"")); + QRegExp singleLineCommentStart(QLatin1String("#(?!=)")); + + // Get current state + int state = previousBlockState(); + if (state == -1) { + state = 0; + } + + // This 4 arrays establish matching between state, start marker, end marker + // and format to apply + QList flags = { + IN_TRIPLE_QUOTE_STRING, + IN_SINGLE_QUOTE_STRING, + IN_CHARACTER, + IN_MULTILINE_COMMENT + }; + QList regexps_starts = { + tripleQuoteStringStartEnd, + singleQuoteStringStartEnd, + characterStartEnd, + multiLineCommentStart + }; + QList regexps_ends = { + tripleQuoteStringStartEnd, + singleQuoteStringStartEnd, + characterStartEnd, + multiLineCommentEnd + }; + QList formats = { + stringFormat(), + stringFormat(), + stringFormat(), + commentFormat() + }; + + int pos = 0; // current position in block + while (pos < text.length()) { + // Trying to close current environments + bool triggered = false; + for (int i = 0; i < flags.size() && !triggered; i++) { + int flag = flags[i]; + QRegExp ®exp = regexps_ends[i]; + QTextCharFormat &format = formats[i]; + if (state & flag) { // Found current state + // find where end marker is + int new_pos = regexp.indexIn(text, pos); + int length; + if (new_pos == -1) { + // not in this block, highlight till the end + length = text.length() - pos; + } else { + // highlight untill the marker and modify state + length = new_pos - pos + regexp.matchedLength(); + state -= flag; + } + // Apply format to the found area + setFormat(pos, length, format); + pos = pos + length; + triggered = true; + } + } + if (triggered) { // We have done something move to next iteration + continue; + } + + // Now we should found the scope that start the closest to current + // position + QRegExp *minRegexp = nullptr; // closest marker + int minPos = INT_MAX; // closest pos + int minIdx = -1; // closest scope index + for (int i = 0; i < regexps_starts.size(); i++) { + QRegExp ®exp = regexps_starts[i]; + int newPos = regexp.indexIn(text, pos); + if (newPos != -1) { + minPos = qMin(minPos, newPos); + minRegexp = ®exp; + minIdx = i; + } + } + + // Check where single line comment starts + singleLineCommentStart.indexIn(text, pos); + int singleLineCommentStartPos = singleLineCommentStart.pos(); + + if (singleLineCommentStartPos != -1 + && singleLineCommentStartPos < minPos) { + // single line comment starts earlier + setFormat(singleLineCommentStartPos, text.length() - singleLineCommentStartPos, commentFormat()); + break; + } else if (minRegexp) { + // We are going to another scope + state += flags[minIdx]; + pos = minPos + minRegexp->matchedLength(); + setFormat(minPos, minRegexp->matchedLength(), formats[minIdx]); + } else { // There is nothing to highlight + break; + } + } + + setCurrentBlockState(state); +} + +void JuliaHighlighter::updateHighlight() +{ + // Remove rules for outdated variables and functions + for (const auto &var : JuliaKeywords::instance()->removedVariables()) { + removeRule(var); + } + for (const auto &func : JuliaKeywords::instance()->removedFunctions()) { + removeRule(func); + } + + // Add actual variables and function + addVariables(JuliaKeywords::instance()->variables()); + addFunctions(JuliaKeywords::instance()->functions()); + rehighlight(); +} + +QString JuliaHighlighter::nonSeparatingCharacters() const +{ + return QLatin1String("[\\w¡-ﻼ!]"); +} diff --git a/src/backends/julia/juliahighlighter.h b/src/backends/julia/juliahighlighter.h new file mode 100644 index 0000000..a515906 --- /dev/null +++ b/src/backends/julia/juliahighlighter.h @@ -0,0 +1,60 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include "defaulthighlighter.h" + +/** + * Implementation of JuliaHighlighter + * + * Takes into account loaded symbols from scope and predefined keywords. + * There is no common regexps that bound to fail with such syntax-overloaded + * languages as Julia + */ +class JuliaHighlighter: public Cantor::DefaultHighlighter +{ + Q_OBJECT + +public: + /** + * Constructs JuliaHighlighter + * + * @param parent QObject parent + */ + explicit JuliaHighlighter(QObject *parent); + ~JuliaHighlighter() override = default; + +public Q_SLOTS: + /** + * Call this to update highlighter to the current state of keywords storage + */ + void updateHighlight(); + +protected: + /** + * @see Cantor::DefaultHighlighter::highlightBlock + */ + void highlightBlock(const QString &text) override; + + /** + * @see Cantor::DefaultHighlighter::nonSeparatingCharacters + */ + QString nonSeparatingCharacters() const override; +}; diff --git a/src/backends/julia/juliakeywords.cpp b/src/backends/julia/juliakeywords.cpp new file mode 100644 index 0000000..eec288d --- /dev/null +++ b/src/backends/julia/juliakeywords.cpp @@ -0,0 +1,95 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#include "juliakeywords.h" + +#include +#include + +JuliaKeywords::JuliaKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Julia")); + + m_keywords = definition.keywordList(QLatin1String("block_begin")); + m_keywords << definition.keywordList(QLatin1String("block_eb")); + m_keywords << definition.keywordList(QLatin1String("block_end")); + m_keywords << definition.keywordList(QLatin1String("keywords")); + + //TODO: Upstream pull request to julia.xml from KSyntaxHighlighting? + m_variables << QLatin1String("false"); + m_variables << QLatin1String("Inf"); + m_variables << QLatin1String("NaN"); + m_variables << QLatin1String("nothing"); + m_variables << QLatin1String("true"); + + m_plotShowingCommands << QLatin1String("contour"); + m_plotShowingCommands << QLatin1String("contourf"); + m_plotShowingCommands << QLatin1String("grid"); + m_plotShowingCommands << QLatin1String("grid3d"); + m_plotShowingCommands << QLatin1String("histogram"); + m_plotShowingCommands << QLatin1String("imshow"); + m_plotShowingCommands << QLatin1String("plot"); + m_plotShowingCommands << QLatin1String("plot3"); + m_plotShowingCommands << QLatin1String("polar"); + m_plotShowingCommands << QLatin1String("polyline"); + m_plotShowingCommands << QLatin1String("polyline3d"); + m_plotShowingCommands << QLatin1String("polymarker"); + m_plotShowingCommands << QLatin1String("polymarker3d"); + m_plotShowingCommands << QLatin1String("scatter"); + m_plotShowingCommands << QLatin1String("scatter3"); + m_plotShowingCommands << QLatin1String("show"); + m_plotShowingCommands << QLatin1String("surface"); +} + +JuliaKeywords *JuliaKeywords::instance() +{ + static JuliaKeywords *inst = nullptr; + if (inst == nullptr) { + inst = new JuliaKeywords(); + } + + return inst; +} + +void JuliaKeywords::addVariable(const QString &variable) +{ + if (!m_variables.contains(variable)) { + m_variables << variable; + } +} + +void JuliaKeywords::clearVariables() +{ + m_removedVariables = m_variables; + m_variables.clear(); +} + +void JuliaKeywords::addFunction(const QString &function) +{ + if (!m_functions.contains(function)) { + m_functions << function; + } +} + +void JuliaKeywords::clearFunctions() +{ + m_removedFunctions = m_functions; + m_functions.clear(); +} diff --git a/src/backends/julia/juliakeywords.h b/src/backends/julia/juliakeywords.h new file mode 100644 index 0000000..e0314d1 --- /dev/null +++ b/src/backends/julia/juliakeywords.h @@ -0,0 +1,105 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include + +/** + * Keywords storage for Julia session + * + * Class is implemented with singleton pattern + */ +class JuliaKeywords +{ +public: + /** + * @return singleton instance pointer + */ + static JuliaKeywords *instance(); + + /** + * @return list of Julia language predefined keywords + */ + const QStringList &keywords() const { return m_keywords; } + + /** + * @return list of predefined commands, that are capable to show plot + */ + const QStringList &plotShowingCommands() const + { + return m_plotShowingCommands; + } + + /** + * @return list of known variable names + */ + const QStringList &variables() const { return m_variables; } + + /** + * @return list of variables removed during the last clearVariables() call + */ + const QStringList &removedVariables() const { return m_removedVariables; } + + /** + * Clears all known variables + */ + void clearVariables(); + + /** + * Add new variable to the known list + * + * @param variable name of the variable to add + */ + void addVariable(const QString &variable); + + /** + * @return list of known function names + */ + const QStringList &functions() const { return m_functions; } + + /** + * @return list of functions removed during the last clearFunctions() call + */ + const QStringList &removedFunctions() const { return m_removedFunctions; } + + /** + * Clears all known functions + */ + void clearFunctions(); + + /** + * Add new function to the known list + * + * @param function name of the function to add + */ + void addFunction(const QString &function); + +private: + QStringList m_keywords; //< list of predefined keywords + QStringList m_plotShowingCommands; //< list of predefined plot showing cmds + QStringList m_variables; //< list of variables known at the moment + QStringList m_removedVariables; //< list of variables removed during cleaning + QStringList m_functions; //< list of known function at the moment + QStringList m_removedFunctions; //< list of functions removed during cleaning + + // We are hiding constructor and destructor for singleton + JuliaKeywords(); + ~JuliaKeywords() = default; +}; diff --git a/src/backends/julia/juliascriptloading.h b/src/backends/julia/juliascriptloading.h new file mode 100644 index 0000000..803c354 --- /dev/null +++ b/src/backends/julia/juliascriptloading.h @@ -0,0 +1,37 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include +#include + +inline QString loadScript(const QString &scriptName) +{ + QFile text( + QStandardPaths::locate( + QStandardPaths::GenericDataLocation, + QString::fromLatin1( + "cantor/juliabackend/scripts/%1.jl" + ).arg(scriptName) + ) + ); + text.open(QIODevice::ReadOnly); + return QString::fromLatin1(text.readAll()); +} diff --git a/src/backends/julia/juliaserver/CMakeLists.txt b/src/backends/julia/juliaserver/CMakeLists.txt new file mode 100644 index 0000000..7301eca --- /dev/null +++ b/src/backends/julia/juliaserver/CMakeLists.txt @@ -0,0 +1,15 @@ +add_definitions(-DJULIA_ENABLE_THREADING=1) + +set(JuliaServer_SRCS + juliaserver.cpp + main.cpp +) +add_executable(cantor_juliaserver ${JuliaServer_SRCS}) + +target_link_libraries(cantor_juliaserver + ${JULIA_LIBRARY} + Qt5::Widgets + Qt5::DBus +) + +install(TARGETS cantor_juliaserver ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/backends/julia/juliaserver/juliaserver.cpp b/src/backends/julia/juliaserver/juliaserver.cpp new file mode 100644 index 0000000..604696c --- /dev/null +++ b/src/backends/julia/juliaserver/juliaserver.cpp @@ -0,0 +1,234 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#include "juliaserver.h" + +#include +#include + +#include +#include +#include +#include +#include + +QStringList JuliaServer::INTERNAL_VARIABLES = + QStringList() << QLatin1String("__originalSTDOUT__") << QLatin1String("__originalSTDERR__"); + +JuliaServer::JuliaServer(QObject *parent) : QObject(parent), m_was_exception(false) +{ +} + +JuliaServer::~JuliaServer() +{ + jl_atexit_hook(0); +} + +void JuliaServer::login(const QString &path) const +{ +#if QT_VERSION_CHECK(JULIA_VERSION_MAJOR, JULIA_VERSION_MINOR, 0) >= QT_VERSION_CHECK(0, 6, 0) + Q_UNUSED(path) + jl_init(); +#else + QString dir_path = QFileInfo(path).dir().absolutePath(); + jl_init(dir_path.toLatin1().constData()); +#endif +} + +#if QT_VERSION_CHECK(JULIA_VERSION_MAJOR, JULIA_VERSION_MINOR, 0) >= QT_VERSION_CHECK(0, 7, 0) +#define JULIA_STDOUT "stdout" +#define JULIA_STDERR "stderr" +#else +#define JULIA_STDOUT "STDOUT" +#define JULIA_STDERR "STDOUT" +#endif +void JuliaServer::runJuliaCommand(const QString &command) +{ + // Redirect stdout, stderr to temporary files + QTemporaryFile output, error; + if (!output.open() || !error.open()) { + qFatal("Unable to create temporary files for stdout/stderr"); + return; + } + jl_eval_string("const __originalSTDOUT__ = " JULIA_STDOUT); + jl_eval_string("const __originalSTDERR__ = " JULIA_STDERR); + jl_eval_string( + QString::fromLatin1("redirect_stdout(open(\"%1\", \"w\"))") + .arg(output.fileName()).toLatin1().constData() + ); + jl_eval_string( + QString::fromLatin1("redirect_stderr(open(\"%1\", \"w\"))") + .arg(error.fileName()).toLatin1().constData() + ); + + // Run command + jl_value_t *val = static_cast( + jl_eval_string(command.toUtf8().constData()) + ); + + if (jl_exception_occurred()) { // If exception occurred + // Show it to user in stderr + jl_value_t *ex = jl_exception_in_transit; + jl_printf(JL_STDERR, "error during run:\n"); + jl_function_t *showerror = + jl_get_function(jl_base_module, "showerror"); + jl_value_t *bt = static_cast( + jl_eval_string("catch_backtrace()") + ); + jl_value_t *err_stream = static_cast( + jl_eval_string(JULIA_STDERR) + ); + jl_call3(showerror, err_stream, ex, bt); + jl_exception_clear(); + m_was_exception = true; + } else if (val) { // no exception occurred + // If last result is not nothing, show it + jl_function_t *equality = jl_get_function(jl_base_module, "=="); + jl_value_t *nothing = + static_cast(jl_eval_string("nothing")); + bool is_nothing = jl_unbox_bool( + static_cast(jl_call2(equality, nothing, val)) + ); + if (!is_nothing) { + jl_value_t *out_display = static_cast(jl_eval_string("TextDisplay(" JULIA_STDOUT ")")); + jl_function_t *display = jl_get_function(jl_base_module, "display"); + jl_call2(display, out_display, val); + } + m_was_exception = false; + } + // Clean up streams and files + jl_eval_string("flush(" JULIA_STDOUT ")"); + jl_eval_string("flush(" JULIA_STDERR ")"); + jl_eval_string("redirect_stdout(__originalSTDOUT__)"); + jl_eval_string("redirect_stderr(__originalSTDERR__)"); + + // Clean up variables + auto vars_to_remove = { + "__originalSTDOUT__", "__originalSTDERR__" + }; + for (const auto &var : vars_to_remove) { + jl_eval_string( + QString::fromLatin1("%1 = 0").arg(QLatin1String(var)) + .toLatin1().constData() + ); + } + + m_output = QString::fromUtf8(output.readAll()); + m_error = QString::fromUtf8(error.readAll()); +} + +QString JuliaServer::getError() const +{ + return m_error; +} + +QString JuliaServer::getOutput() const +{ + return m_output; +} + +bool JuliaServer::getWasException() const +{ + return m_was_exception; +} + +void JuliaServer::parseModules() +{ + parseJlModule(jl_internal_main_module); +} + +void JuliaServer::parseJlModule(jl_module_t* module) +{ + jl_function_t* jl_string_function = jl_get_function(jl_base_module, "string"); + + if (module != jl_internal_main_module) + { + const QString& moduleName = fromJuliaString(jl_call1(jl_string_function, (jl_value_t*)(module->name))); + if (parsedModules.contains(moduleName)) + return; + else + parsedModules.append(moduleName); + } + + jl_function_t* jl_names_function = jl_get_function(jl_base_module, "names"); + jl_value_t* names = jl_call1(jl_names_function, (jl_value_t*)module); + jl_value_t **data = (jl_value_t**)jl_array_data(names); + for (size_t i = 0; i < jl_array_len(names); i++) + { + bool isBindingResolved = (bool)jl_binding_resolved_p(module, (jl_sym_t*)(data[i])); + if (isBindingResolved) + { + + const QString& name = fromJuliaString(jl_call1(jl_string_function, data[i])); + jl_value_t* value = jl_get_binding_or_error(module, (jl_sym_t*)(data[i]))->value; + jl_datatype_t* datetype = (jl_datatype_t*)jl_typeof(value); + QString type = QString::fromUtf8(jl_typeof_str(value)); + // Module + if (jl_is_module(value)) + { + if (module == jl_internal_main_module && (jl_module_t*)value != jl_internal_main_module) + parseJlModule((jl_module_t*)value); + } + // Function + else if (type.startsWith(QLatin1String("#")) || type == QLatin1String("Function")) + { + if (!m_functions.contains(name)) + m_functions.append(name); + } + // Variable + else if (datetype != jl_datatype_type) // Not type + { + if (module == jl_internal_main_module && !INTERNAL_VARIABLES.contains(name)) + { + const QString& valueString = fromJuliaString(jl_call1(jl_string_function, value)); + if (m_variables.contains(name)) + { + int i = m_variables.indexOf(name); + m_variableValues[i] = valueString; + } + else + { + m_variables.append(name); + m_variableValues.append(valueString); + } + } + } + } + } +} + +QString JuliaServer::fromJuliaString(const jl_value_t* value) +{ + return QString::fromUtf8(jl_string_data(value)); +} + +QStringList JuliaServer::variablesList() +{ + return m_variables; +} + +QStringList JuliaServer::variableValuesList() +{ + return m_variableValues; +} + +QStringList JuliaServer::functionsList() +{ + return m_functions; +} diff --git a/src/backends/julia/juliaserver/juliaserver.h b/src/backends/julia/juliaserver/juliaserver.h new file mode 100644 index 0000000..98d8f4d --- /dev/null +++ b/src/backends/julia/juliaserver/juliaserver.h @@ -0,0 +1,109 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov +#include +#include +#include + +#include + +/** + * Implementation of command execution server with DBus interface for Julia + * language. + * + * Uses Julia embedding + * http://docs.julialang.org/en/release-0.4/manual/embedding/ to get results. + */ +class JuliaServer: public QObject +{ + Q_OBJECT +public: + explicit JuliaServer(QObject *parent = nullptr); + + ~JuliaServer() override; + +public Q_SLOTS: + /** + * Initializer for JuliaServer. Call this first before using it + * + * @param path path to julia executable + */ + Q_SCRIPTABLE void login(const QString &path) const; + + /** + * Runs a piece of julia code. After this returns use getOutput, getError, + * getWasException methods to retrieve execution result. + * + * @param command maybe multiline piece of julia code to run + */ + Q_SCRIPTABLE void runJuliaCommand(const QString &command); + + /** + * @return stdout output of the last command execution + */ + Q_SCRIPTABLE QString getOutput() const; + + /** + * @return stderr output of the last command execution + */ + Q_SCRIPTABLE QString getError() const; + + /** + * @return indicator that exception was triggered during last command + * execution + */ + Q_SCRIPTABLE bool getWasException() const; + + /** + * Reparse internal julia module and update list of variables and functions + */ + Q_SCRIPTABLE void parseModules(); + + /** + * @return list of variables in internal Julia's module + */ + Q_SCRIPTABLE QStringList variablesList(); + + /** + * @return corresponding list of values for variables from variablesList. + */ + Q_SCRIPTABLE QStringList variableValuesList(); + + /** + * @return list of function in internal Julia's module + */ + Q_SCRIPTABLE QStringList functionsList(); + +private: + void parseJlModule(jl_module_t* module); + + QString fromJuliaString(const jl_value_t* value); +private: + QString m_error; //< Stores last stderr output + QString m_output; //< Stores last stdout output + bool m_was_exception; //< Stores indicator of exception + QStringList parsedModules; + QStringList m_variables; + QStringList m_variableValues; + QStringList m_functions; + static QStringList INTERNAL_VARIABLES; +}; diff --git a/src/backends/julia/juliaserver/main.cpp b/src/backends/julia/juliaserver/main.cpp new file mode 100644 index 0000000..11687ec --- /dev/null +++ b/src/backends/julia/juliaserver/main.cpp @@ -0,0 +1,57 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ + +#include +#include +#include +#include +#include + +#include "juliaserver.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + if (!QDBusConnection::sessionBus().isConnected()) { + qWarning() << "Can't connect to the D-Bus session bus.\n" + "To start it, run: eval `dbus-launch --auto-syntax`"; + return 1; + } + + const QString &serviceName = + QString::fromLatin1("org.kde.Cantor.Julia-%1").arg(app.applicationPid()); + + if (!QDBusConnection::sessionBus().registerService(serviceName)) { + qWarning() << QDBusConnection::sessionBus().lastError().message(); + return 2; + } + + JuliaServer server; + QDBusConnection::sessionBus().registerObject( + QLatin1String("/"), + &server, + QDBusConnection::ExportAllSlots + ); + + QTextStream(stdout) << "ready" << endl; + + return app.exec(); +} diff --git a/src/backends/julia/juliasession.cpp b/src/backends/julia/juliasession.cpp new file mode 100644 index 0000000..13d0bbc --- /dev/null +++ b/src/backends/julia/juliasession.cpp @@ -0,0 +1,286 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#include "juliasession.h" + +#include +#include +#include +#include +#include + +#include "defaultvariablemodel.h" + +#include "juliaexpression.h" +#include "settings.h" +#include "juliahighlighter.h" +#include "juliakeywords.h" +#include "juliaextensions.h" +#include "juliabackend.h" +#include "juliacompletionobject.h" +#include + +const QRegularExpression JuliaSession::typeVariableInfo = QRegularExpression(QLatin1String("\\w+\\[")); + +JuliaSession::JuliaSession(Cantor::Backend *backend) + : Session(backend) + , m_process(nullptr) + , m_interface(nullptr) + , m_currentExpression(nullptr) + , m_variableModel(new Cantor::DefaultVariableModel(this)) +{ +} + +void JuliaSession::login() +{ + emit loginStarted(); + + if (m_process) { + m_process->deleteLater(); + } + + m_process = new KProcess(this); + m_process->setOutputChannelMode(KProcess::SeparateChannels); + + (*m_process) + << QStandardPaths::findExecutable(QLatin1String("cantor_juliaserver")); + + m_process->start(); + + m_process->waitForStarted(); + m_process->waitForReadyRead(); + QTextStream stream(m_process->readAllStandardOutput()); + + QString readyStatus = QLatin1String("ready"); + while (m_process->state() == QProcess::Running) { + const QString &rl = stream.readLine(); + if (rl == readyStatus) { + break; + } + } + + if (!QDBusConnection::sessionBus().isConnected()) { + qWarning() << "Can't connect to the D-Bus session bus.\n" + "To start it, run: eval `dbus-launch --auto-syntax`"; + return; + } + + const QString &serviceName = + QString::fromLatin1("org.kde.Cantor.Julia-%1").arg(m_process->pid()); + + m_interface = new QDBusInterface( + serviceName, + QString::fromLatin1("/"), + QString(), + QDBusConnection::sessionBus() + ); + + if (!m_interface->isValid()) { + qWarning() << QDBusConnection::sessionBus().lastError().message(); + return; + } + + m_interface->call( + QString::fromLatin1("login"), + JuliaSettings::self()->replPath().path() + ); + + listVariables(); + + // Plots integration + if (integratePlots()) { + runJuliaCommand( + QLatin1String("import GR; ENV[\"GKS_WSTYPE\"] = \"nul\"") + ); + } + + changeStatus(Session::Done); + emit loginDone(); + qDebug() << "login to julia " << JULIA_VERSION_STRING << "done"; +} + +void JuliaSession::logout() +{ + m_process->terminate(); + + JuliaKeywords::instance()->clearVariables(); + JuliaKeywords::instance()->clearFunctions(); + m_variableModel->clearVariables(); + emit updateHighlighter(); + + changeStatus(Status::Disable); +} + +void JuliaSession::interrupt() +{ + if (m_process->pid()) { + m_process->kill(); + } + + for (Cantor::Expression *e : m_runningExpressions) { + e->interrupt(); + } + + m_runningExpressions.clear(); + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression *JuliaSession::evaluateExpression( + const QString &cmd, + Cantor::Expression::FinishingBehavior behave, + bool internal) +{ + JuliaExpression *expr = new JuliaExpression(this, internal); + + changeStatus(Cantor::Session::Running); + + expr->setFinishingBehavior(behave); + expr->setCommand(cmd); + expr->evaluate(); + + return expr; +} + +Cantor::CompletionObject *JuliaSession::completionFor( + const QString &command, + int index) +{ + return new JuliaCompletionObject(command, index, this); +} + +QSyntaxHighlighter *JuliaSession::syntaxHighlighter(QObject *parent) +{ + JuliaHighlighter *highlighter = new JuliaHighlighter(parent); + QObject::connect( + this, SIGNAL(updateHighlighter()), highlighter, SLOT(updateHighlight()) + ); + return highlighter; +} + +void JuliaSession::runJuliaCommand(const QString &command) const +{ + m_interface->call(QLatin1String("runJuliaCommand"), command); +} + +void JuliaSession::runJuliaCommandAsync(const QString &command) +{ + m_interface->callWithCallback( + QLatin1String("runJuliaCommand"), + {command}, + this, + SLOT(onResultReady()) + ); +} + +void JuliaSession::onResultReady() +{ + m_currentExpression->finalize(); + m_runningExpressions.removeAll(m_currentExpression); + + listVariables(); + + changeStatus(Cantor::Session::Done); +} + +void JuliaSession::runExpression(JuliaExpression *expr) +{ + m_runningExpressions.append(expr); + m_currentExpression = expr; + runJuliaCommandAsync(expr->command()); +} + +QString JuliaSession::getStringFromServer(const QString &method) +{ + const QDBusReply &reply = m_interface->call(method); + return (reply.isValid() ? reply.value() : reply.error().message()); +} + +QString JuliaSession::getOutput() +{ + return getStringFromServer(QLatin1String("getOutput")); +} + +QString JuliaSession::getError() +{ + return getStringFromServer(QLatin1String("getError")); +} + +bool JuliaSession::getWasException() +{ + const QDBusReply &reply = + m_interface->call(QLatin1String("getWasException")); + return reply.isValid() && reply.value(); +} + +void JuliaSession::listVariables() +{ + JuliaKeywords::instance()->clearVariables(); + JuliaKeywords::instance()->clearFunctions(); + + m_interface->call(QLatin1String("parseModules")); + + const QStringList& variables = + static_cast>(m_interface->call(QLatin1String("variablesList"))).value(); + const QStringList& values = + static_cast>(m_interface->call(QLatin1String("variableValuesList"))).value(); + for (int i = 0; i < variables.size(); i++) + { + if (i >= values.size()) + { + qWarning() << "Don't have value for variable from julia server response, something wrong!"; + continue; + } + + const QString& name = variables[i]; + QString value = values[i]; + if (value != JuliaVariableManagementExtension::REMOVED_VARIABLE_MARKER) + { + // Register variable + // We use replace here, because julia return data type for some variables, and we need + // remove it to make variable view more consistent with the other backends + // More info: https://bugs.kde.org/show_bug.cgi?id=377771 + m_variableModel->addVariable(name, value.replace(typeVariableInfo,QLatin1String("["))); + JuliaKeywords::instance()->addVariable(name); + } + else + m_variableModel->removeVariable(name); + } + + const QStringList& functions = + static_cast>(m_interface->call(QLatin1String("functionsList"))).value(); + foreach (const QString& name, functions) + { + JuliaKeywords::instance()->addFunction(name); + } + + emit updateHighlighter(); +} + +QAbstractItemModel *JuliaSession::variableModel() +{ + return m_variableModel; +} + + +bool JuliaSession::integratePlots() +{ + return JuliaSettings::integratePlots(); +} + + diff --git a/src/backends/julia/juliasession.h b/src/backends/julia/juliasession.h new file mode 100644 index 0000000..a6dab98 --- /dev/null +++ b/src/backends/julia/juliasession.h @@ -0,0 +1,175 @@ +/* + 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. + + --- + Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include +#include + +#include "session.h" + +class JuliaExpression; +class JuliaCompletionObject; +class KProcess; +class QDBusInterface; +namespace Cantor { + class DefaultVariableModel; +} + +/** + * Implements a Cantor session for the Julia backend + * + * It communicates through DBus interface with JuliaServer + */ +class JuliaSession: public Cantor::Session +{ + Q_OBJECT +public: + /** + * Constructs session + * + * @param backend owning backend + */ + explicit JuliaSession(Cantor::Backend *backend); + + /** + * @see Cantor::Session::login + */ + void login() override; + + /** + * @see Cantor::Session::logout + */ + void logout() override; + + /** + * @see Cantor::Session::interrupt + */ + void interrupt() override; + + /** + * @see Cantor::Session::evaluateExpression + */ + Cantor::Expression *evaluateExpression( + const QString &command, + Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, + bool internal = false) override; + + /** + * @see Cantor::Session::completionFor + */ + Cantor::CompletionObject *completionFor( + const QString &cmd, + int index = -1) override; + + /** + * @see Cantor::Session::syntaxHighlighter + */ + QSyntaxHighlighter *syntaxHighlighter(QObject *parent) override; + + /** + * @see Cantor::Session::variableModel + */ + QAbstractItemModel *variableModel() override; + + /** + * @return indicator if config says to integrate plots into worksheet + */ + bool integratePlots(); + +Q_SIGNALS: + /** + * Emit this to update syntax highlighter + */ + void updateHighlighter(); + +private Q_SLOTS: + /** + * Called when async call to JuliaServer is finished + */ + void onResultReady(); + +private: + KProcess *m_process; //< process to run JuliaServer inside + QDBusInterface *m_interface; //< interface to JuliaServer + + /// Expressions running at the moment + QList m_runningExpressions; + JuliaExpression *m_currentExpression; //< current expression + + /// Variable management model + Cantor::DefaultVariableModel *m_variableModel; + static const QRegularExpression typeVariableInfo; + + /// Cache to speedup modules whos calls + QMap m_whos_cache; + + friend JuliaExpression; + friend JuliaCompletionObject; + + /** + * Runs Julia expression + * + * @param expression expression to run + */ + void runExpression(JuliaExpression *expression); + + /** + * Runs Julia piece of code in synchronous mode + * + * @param command command to execute + */ + void runJuliaCommand(const QString &command) const; + + /** + * Runs Julia piece of code in asynchronous mode. When finished + * onResultReady is called + * + * @param command command to execute + */ + void runJuliaCommandAsync(const QString &command); + + /** + * Helper method to get QString returning function result + * + * @param method DBus method to call + * @return result of the method + */ + QString getStringFromServer(const QString &method); + + /** + * @return stdout of the last executed command + */ + QString getOutput(); + + /** + * @return stderr of the last executed command + */ + QString getError(); + + /** + * @return indicator of exception occurred during the last command execution + */ + bool getWasException(); + + /** + * Updates variable model by querying all modules in scope with whos command + */ + void listVariables(); +}; diff --git a/src/backends/julia/scripts/variables_cleaner.jl b/src/backends/julia/scripts/variables_cleaner.jl new file mode 100644 index 0000000..334001b --- /dev/null +++ b/src/backends/julia/scripts/variables_cleaner.jl @@ -0,0 +1,11 @@ +# Variable cleaning script +for name in names(Main)[4:end] + if name == :__originalSTDOUT__ || name == :__originalSTDERR__ + continue + end + var_info = summary(eval(name)) + if var_info == "Function" || var_info == "Module" + continue + end + @eval (($name) = "%1") +end diff --git a/src/backends/julia/scripts/variables_loader.jl b/src/backends/julia/scripts/variables_loader.jl new file mode 100644 index 0000000..6daf31e --- /dev/null +++ b/src/backends/julia/scripts/variables_loader.jl @@ -0,0 +1,8 @@ +# Variable loading script. +# +# Install JLD script with `Pkg.add(JLD)` to use it +import JLD +for (var_name, value) in JLD.load("%1") + s = symbol(var_name) + @eval (($s) = ($value)) +end diff --git a/src/backends/julia/scripts/variables_saver.jl b/src/backends/julia/scripts/variables_saver.jl new file mode 100644 index 0000000..a97143c --- /dev/null +++ b/src/backends/julia/scripts/variables_saver.jl @@ -0,0 +1,16 @@ +# Variable saving script +# +# Install JLD script with `Pkg.add(JLD)` to use it +import JLD +JLD.jldopen("%1", "w") do file + for name in names(Main)[4:end] + if name == :__originalSTDOUT__ || name == :__originalSTDERR__ + continue + end + var_info = summary(eval(name)) + if var_info == "Function" || var_info == "Module" + continue + end + JLD.write(file, repr(name)[2:end], eval(name)) + end +end diff --git a/src/backends/julia/settings.kcfgc b/src/backends/julia/settings.kcfgc new file mode 100644 index 0000000..493ddf5 --- /dev/null +++ b/src/backends/julia/settings.kcfgc @@ -0,0 +1,3 @@ +File=juliabackend.kcfg +ClassName=JuliaSettings +Singleton=true diff --git a/src/backends/julia/settings.ui b/src/backends/julia/settings.ui new file mode 100644 index 0000000..1e12d5a --- /dev/null +++ b/src/backends/julia/settings.ui @@ -0,0 +1,94 @@ + + + JuliaSettingsBase + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Path to Julia REPL: + + + + + + + + + + + + Integrate Plots in Worksheet (start a new session when changed) + + + + + + + + + Inline Plots Intermediate Format: + + + + + + + + svg + + + + + eps + + + + + png + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/julia/testjulia.cpp b/src/backends/julia/testjulia.cpp new file mode 100644 index 0000000..d1a84fd --- /dev/null +++ b/src/backends/julia/testjulia.cpp @@ -0,0 +1,274 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#include "testjulia.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" +#include "textresult.h" +#include "imageresult.h" +#include "defaultvariablemodel.h" +#include "completionobject.h" + +QString TestJulia::backendName() +{ + return QLatin1String("julia"); +} + +void TestJulia::testOneLine() +{ + Cantor::Expression *e = evalExp(QLatin1String("2 + 3")); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Done); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QCOMPARE(e->result()->data().toString(), QLatin1String("5")); + QVERIFY(e->errorMessage().isEmpty()); +} + +void TestJulia::testOneLineWithPrint() +{ + Cantor::Expression *e = evalExp(QLatin1String("print(2 + 3)")); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Done); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QCOMPARE(e->result()->data().toString(), QLatin1String("5")); + QVERIFY(e->errorMessage().isEmpty()); +} + +void TestJulia::testException() +{ + Cantor::Expression *e = evalExp(QLatin1String("sqrt(-1)")); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Error); + QVERIFY(e->result()); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QVERIFY( + !e->errorMessage().isEmpty() + && e->errorMessage().contains(QLatin1String( + "sqrt will only return a complex result if called with a " + "complex argument." + )) + ); +} + +void TestJulia::testSyntaxError() +{ + Cantor::Expression *e = evalExp(QLatin1String("for i = 1:10\nprint(i)")); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Error); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QVERIFY( + !e->errorMessage().isEmpty() + && e->errorMessage().contains(QLatin1String( + "syntax: incomplete: \"for\" at none:1 requires end" + )) + ); +} + +void TestJulia::testMultilineCode() +{ + Cantor::Expression *e = evalExp(QLatin1String( + "q = 0; # comment\n" + "# sdfsdf\n" + "for i = 1:10\n" + " global q\n" + " q += i\n" + "end\n" + "print(q)" + )); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Done); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QCOMPARE(e->result()->data().toString(), QLatin1String("55")); + QVERIFY(e->errorMessage().isEmpty()); +} + +void TestJulia::testPartialResultOnException() +{ + Cantor::Expression *e = evalExp(QLatin1String( + "for i = 1:5\n" + " print(i)\n" + "end\n" + "sqrt(-1)\n" + )); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Error); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QCOMPARE(e->result()->data().toString(), QLatin1String("12345")); + QVERIFY( + !e->errorMessage().isEmpty() + && e->errorMessage().contains(QLatin1String( + "sqrt will only return a complex result if called with a " + "complex argument." + )) + ); +} + +void TestJulia::testInlinePlot() +{ + Cantor::Expression *e = evalExp(QLatin1String( + "import GR\n" + "GR.plot([-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1], sin)" + )); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Done); + QVERIFY(e->result()->type() == Cantor::ImageResult::Type); +} + +void TestJulia::testInlinePlotWithExceptionAndPartialResult() +{ + Cantor::Expression *e = evalExp(QLatin1String( + "import GR\n" + "print(\"gonna plot\")\n" + "sqrt(-1)\n" + "GR.plot([-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1], sin)\n" + )); + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Error); + QVERIFY(e->result()->type() == Cantor::TextResult::Type); + QCOMPARE(e->result()->data().toString(), QLatin1String("gonna plot")); + QVERIFY( + !e->errorMessage().isEmpty() + && e->errorMessage().contains(QLatin1String( + "sqrt will only return a complex result if called with a " + "complex argument." + )) + ); +} + +void TestJulia::testAddVariablesFromCode() +{ + evalExp(QLatin1String("a = 0; b = 1; c = 2; d = 3\n")); + + auto variableModel = session()->variableModel(); + QStringList variableNames = + QString::fromLatin1("a b c d").split(QLatin1String(" ")); + + for (int i = 0; i < variableNames.size(); i++) { + QModelIndexList matchedVariables = variableModel->match( + variableModel->index(0, 0), + Qt::DisplayRole, + QVariant::fromValue(variableNames[i]), + -1, + Qt::MatchExactly + ); + QCOMPARE(matchedVariables.size(), 1); + auto match = matchedVariables[0]; + auto valueIndex = + variableModel->index(match.row(), match.column() + 1); + QVERIFY( + valueIndex.data(Qt::DisplayRole) == + QVariant::fromValue(QString::number(i)) + ); + } +} + +void TestJulia::testAddVariablesFromManager() +{ + auto variableModel = dynamic_cast( + session()->variableModel() + ); + QStringList variableNames = + QString::fromLatin1("a b c d").split(QLatin1String(" ")); + + for (int i = 0; i < variableNames.size(); i++) { + variableModel->addVariable(variableNames[i], QString::number(i)); + + QModelIndexList matchedVariables = variableModel->match( + variableModel->index(0, 0), + Qt::DisplayRole, + QVariant::fromValue(variableNames[i]), + -1, + Qt::MatchExactly + ); + QCOMPARE(matchedVariables.size(), 1); + auto match = matchedVariables[0]; + auto valueIndex = + variableModel->index(match.row(), match.column() + 1); + QVERIFY( + valueIndex.data(Qt::DisplayRole) == + QVariant::fromValue(QString::number(i)) + ); + } +} + +void TestJulia::testRemoveVariables() +{ + auto variableModel = dynamic_cast( + session()->variableModel() + ); + QStringList variableNames = + QString::fromLatin1("a b c d").split(QLatin1String(" ")); + + for (int i = 0; i < variableNames.size(); i++) { + variableModel->addVariable(variableNames[i], QString::number(i)); + } + for (int i = 0; i < variableNames.size(); i += 2) { + variableModel->removeVariable(variableNames[i]); + } + + for (int i = 0; i < variableNames.size(); i++) { + QModelIndexList matchedVariables = variableModel->match( + variableModel->index(0, 0), + Qt::DisplayRole, + QVariant::fromValue(variableNames[i]), + -1, + Qt::MatchExactly + ); + if (i % 2 == 0) { + QVERIFY(matchedVariables.isEmpty()); + } else { + QCOMPARE(matchedVariables.size(), 1); + auto match = matchedVariables[0]; + auto valueIndex = + variableModel->index(match.row(), match.column() + 1); + QVERIFY( + valueIndex.data(Qt::DisplayRole) == + QVariant::fromValue(QString::number(i)) + ); + } + } +} + +void TestJulia::testAutoCompletion() +{ + auto prefix = QLatin1String("ex"); + auto completionObject = session()->completionFor(prefix); + // Give sometime for Qt's singleShot in fetch completions to trigger + QTest::qWait(1000); + auto completions = completionObject->completions(); + + QStringList completionsToCheck; + completionsToCheck << QLatin1String("exit"); + completionsToCheck << QLatin1String("exponent"); + completionsToCheck << QLatin1String("exp"); + + for (auto completion : completionsToCheck) { + QVERIFY(completions.contains(completion)); + } + + for (auto completion : completions) { + QVERIFY(completion.startsWith(prefix)); + } +} + +QTEST_MAIN(TestJulia) + diff --git a/src/backends/julia/testjulia.h b/src/backends/julia/testjulia.h new file mode 100644 index 0000000..ce16d03 --- /dev/null +++ b/src/backends/julia/testjulia.h @@ -0,0 +1,84 @@ +/* + * 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. + * + * --- + * Copyright (C) 2016 Ivan Lakhtanov + */ +#pragma once + +#include + +class TestJulia: public BackendTest +{ + Q_OBJECT +private Q_SLOTS: + /** + * Test simple one-line command. Check that last result is printed + */ + void testOneLine(); + /** + * Test one-line command returning `nothing`. No result is printed, except + * what `print` does + */ + void testOneLineWithPrint(); + /** + * Test command, that emits exception + */ + void testException(); + /** + * Test command consisting of multiple lines, including comments. + */ + void testMultilineCode(); + /** + * Test command with malformed syntax + */ + void testSyntaxError(); + /** + * Test that results gathered before exception occurred are shown + */ + void testPartialResultOnException(); + + /** + * Tests that inline plot is shown + */ + void testInlinePlot(); + /** + * Tests that when exception occurred and plotting is done, partial + * text results shown to user + */ + void testInlinePlotWithExceptionAndPartialResult(); + + /** + * Test registering new variables, when added by command + */ + void testAddVariablesFromCode(); + /** + * Test registering new variables, when added from variable manager + */ + void testAddVariablesFromManager(); + /** + * Test that removing variable unregisters it + */ + void testRemoveVariables(); + + /** + * Test that auto completion provides expected results + */ + void testAutoCompletion(); + +private: + QString backendName() override; +}; diff --git a/src/backends/kalgebra/CMakeLists.txt b/src/backends/kalgebra/CMakeLists.txt new file mode 100644 index 0000000..1f9ae39 --- /dev/null +++ b/src/backends/kalgebra/CMakeLists.txt @@ -0,0 +1,22 @@ +set( KAlgebraBackend_SRCS + kalgebrasyntaxhelpobject.cpp + kalgebrabackend.cpp + kalgebrasession.cpp + kalgebraexpression.cpp + kalgebracompletionobject.cpp + kalgebraextensions.cpp +) + +remove_definitions(-DQT_NO_CAST_TO_ASCII) +remove_definitions(-DQT_NO_CAST_FROM_ASCII) + +kconfig_add_kcfg_files(KAlgebraBackend_SRCS settings.kcfgc) +install(FILES kalgebrabackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(KAlgebraBackend_SRCS settings.ui) + +add_backend(kalgebrabackend ${KAlgebraBackend_SRCS}) + +target_link_libraries( cantor_kalgebrabackend KF5::Analitza KF5::AnalitzaGui ) + +install( FILES cantor_kalgebra.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) diff --git a/src/backends/kalgebra/cantor_kalgebra.knsrc b/src/backends/kalgebra/cantor_kalgebra.knsrc new file mode 100644 index 0000000..b19190c --- /dev/null +++ b/src/backends/kalgebra/cantor_kalgebra.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (KAlgebra) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/kalgebra/kalgebrabackend.cpp b/src/backends/kalgebra/kalgebrabackend.cpp new file mode 100644 index 0000000..a977ed3 --- /dev/null +++ b/src/backends/kalgebra/kalgebrabackend.cpp @@ -0,0 +1,76 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* 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 * +*************************************************************************************/ + +#include "kalgebrabackend.h" +#include "kalgebrasession.h" + +#include "settings.h" +#include "ui_settings.h" + +#include "kalgebraextensions.h" +#include "cantor_macros.h" + +KAlgebraBackend::KAlgebraBackend( QObject* parent,const QList args ) + : Cantor::Backend( parent,args ) +{ + setObjectName(QLatin1String("kalgebrabackend")); + new KAlgebraVariableManagementExtension(this); +} + +QString KAlgebraBackend::id() const +{ + return QLatin1String("kalgebra"); +} + +QString KAlgebraBackend::version() const +{ + return QLatin1String("Analitza version 5.0"); +} + +Cantor::Session* KAlgebraBackend::createSession() +{ + return new KAlgebraSession(this); +} + +Cantor::Backend::Capabilities KAlgebraBackend::capabilities() const +{ + return Cantor::Backend::Completion | Cantor::Backend::SyntaxHighlighting | Cantor::Backend::SyntaxHelp | Cantor::Backend::VariableManagement; +} + +QWidget* KAlgebraBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget=new QWidget(parent); + Ui::KAlgebraSettingsBase s; + s.setupUi(widget); + return widget; +} + +KConfigSkeleton* KAlgebraBackend::config() const +{ + return KAlgebraSettings::self(); +} + +QUrl KAlgebraBackend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation of KAlgebra, please check if there is a translated version and use the correct url", + "http://docs.kde.org/stable/en/kdeedu/kalgebra/")); +} + + +K_PLUGIN_FACTORY_WITH_JSON(kalgebrabackend, "kalgebrabackend.json", registerPlugin();) +#include "kalgebrabackend.moc" diff --git a/src/backends/kalgebra/kalgebrabackend.h b/src/backends/kalgebra/kalgebrabackend.h new file mode 100644 index 0000000..42d4fb3 --- /dev/null +++ b/src/backends/kalgebra/kalgebrabackend.h @@ -0,0 +1,42 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef KALGEBRA_BACKEND_H +#define KALGEBRA_BACKEND_H + +#include "backend.h" +class KAlgebraBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit KAlgebraBackend( QObject* parent = nullptr, const QList args = QList()); + ~KAlgebraBackend() override = default; + + QString id() const override; + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; + + QUrl helpUrl() const override; + QString version() const override; +}; + + +#endif /* _NULLBACKEND_H */ diff --git a/src/backends/kalgebra/kalgebrabackend.json b/src/backends/kalgebra/kalgebrabackend.json new file mode 100644 index 0000000..c0ebf8b --- /dev/null +++ b/src/backends/kalgebra/kalgebrabackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "KAlgebra backend for Cantor. Lets you use the same language you use in the KAlgebra application in Cantor worksheets.", + "Description[ca@valencia]": "Dorsal de KAlgebra per al Cantor. Vos permet utilitzar als fulls de treball del Cantor el mateix llenguatge que feu servir a l'aplicació KAlgebra.", + "Description[ca]": "Dorsal de KAlgebra per al Cantor. Us permet utilitzar als fulls de treball del Cantor el mateix llenguatge que feu servir a l'aplicació KAlgebra.", + "Description[cs]": "Podpůrná vrstva KAlgebra pro Cantor. Umožňuje v listech Cantoru používat stejný jazyk jako v KAlgebra.", + "Description[de]": "KAlgebra-Modul für Cantor. Damit können Sie für die Arbeitsblätter in Cantor dieselbe Sprache wie in KAlgebra verwenden.", + "Description[el]": "Σύστημα υποστήριξης KAlgebra για το Cantor. Επιτρέπει τη χρήση της ίδιας γλώσσας που ψρησιμοποιείτε στην εφαρμογή KAlgebra στα φύλλα εργασίας Cantor.", + "Description[en_GB]": "KAlgebra backend for Cantor. Lets you use the same language you use in the KAlgebra application in Cantor worksheets.", + "Description[es]": "Motor de KAlgebra para Cantor. Le permite usar el mismo lenguaje que utiliza la aplicación KAlgebra en las hojas de trabajo de Cantor.", + "Description[et]": "Cantori KAlgebra taustaprogramm. Võimaldab kasutada Cantori töölehtedel sama keelt, mida kasutab rakendus KAlgebra.", + "Description[fi]": "Cantorin KAlgebra-taustajärjestelmä. Mahdollistaa KAlgebran kielen käytön Cantorin työkirjoissa.", + "Description[fr]": "Moteur KAlgebra pour Cantor vous permettant d'utiliser le même langage que dans l'application KAlgebra pour les feuilles de calcul de Cantor.", + "Description[gl]": "Infraestrutura de KAlgebra para Cantor. Permite empregar a mesma linguaxe que no aplicativo KAlgebra nas fichas de Cantor.", + "Description[it]": "Backend KAlgebra per Cantor. Permette di usare in Cantor lo stesso linguaggio usato in KAlgebra.", + "Description[nl]": "Kalgebra backend voor Cantor. Het laat u dezelfde taal als in Kalgebra gebruiken in Cantor-werkbladen.", + "Description[nn]": "KAlgebra-motor for Cantor. Lèt deg bruka same språk som du brukar i KAlgebra-program i Cantor-arbeidsark.", + "Description[pl]": "Silnik programu KAlgebra dla Cantor. Pozwala na użycie w arkuszach Cantor tego samego języka co w programie KAlgebra.", + "Description[pt]": "Infra-estrutura do KAlgebra para o Cantor. Permite-lhe usar a mesma linguagem que usa na aplicação KAlgebra nas folhas de cálculo do Cantor.", + "Description[pt_BR]": "Infraestrutura do KAlgebra para o Cantor. Permite-lhe usar a mesma linguagem usada no aplicativo KAlgebra, nas planilhas do Cantor.", + "Description[ru]": "Модуль поддержки KAlgebra для Cantor. Позволяет использовать тот же язык, что и в KAlgebra, в документах Cantor.", + "Description[sk]": "KAlgebra backend pre Cantor. Umožní vám použiť rovnaký jazyk, ktorý používate v aplikácii KAlgebra v listoch Cantor.", + "Description[sl]": "Zaledje KAlgebre za Cantor. V delovnih listih Cantor vam omogoča uporabo istega jezika kot v KAlgebri.", + "Description[sv]": "Kalgebra bakgrundsprogram för Cantor. Låter dig använda samma språk i Cantors arbetsblad som i programmet Kalgebra.", + "Description[tr]": "Cantor için KAlgebra arka ucu. KAlgebra uygulaması içinde Cantor çalışma sayfalarında kullanılan dille aynı dili kullanmanıza izin verir.", + "Description[uk]": "Модуль KAlgebra для Cantor. Надає вам змогу використовувати мову команд програми KAlgebra на робочих аркушах Cantor.", + "Description[x-test]": "xxKAlgebra backend for Cantor. Lets you use the same language you use in the KAlgebra application in Cantor worksheets.xx", + "Description[zh_CN]": "KAlgebra 的 Cantor 后端。可供您在 Cantor 工作表里使用和 KAlgebra 一致的语言。", + "Description[zh_TW]": "KAlgebra 的 Cantor 後端介面。讓您使用與在 KAlgebra 應用程式中的 Cantor 工作表中相同的語言。", + "Icon": "kalgebrabackend", + "Id": "kalgebrabackend", + "License": "GPL", + "Name": "KAlgebra", + "Name[ca@valencia]": "KAlgebra", + "Name[ca]": "KAlgebra", + "Name[cs]": "KAlgebra", + "Name[da]": "KAlgebra", + "Name[de]": "KAlgebra", + "Name[el]": "KAlgebra", + "Name[en_GB]": "KAlgebra", + "Name[es]": "KAlgebra", + "Name[et]": "KAlgebra", + "Name[fi]": "KAlgebra", + "Name[fr]": "KAlgebra", + "Name[gl]": "KAlgebra", + "Name[it]": "KAlgebra", + "Name[nl]": "KAlgebra", + "Name[nn]": "KAlgebra", + "Name[pl]": "KAlgebra", + "Name[pt]": "KAlgebra", + "Name[pt_BR]": "KAlgebra", + "Name[ru]": "KAlgebra", + "Name[sk]": "KAlgebra", + "Name[sl]": "KAlgebra", + "Name[sv]": "Kalgebra", + "Name[tr]": "KAlgebra", + "Name[uk]": "KAlgebra", + "Name[x-test]": "xxKAlgebraxx", + "Name[zh_CN]": "KAlgebra", + "Name[zh_TW]": "數學_KAlgebra", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://edu.kde.org/kalgebra" + } +} diff --git a/src/backends/kalgebra/kalgebrabackend.kcfg b/src/backends/kalgebra/kalgebrabackend.kcfg new file mode 100644 index 0000000..94fcb6b --- /dev/null +++ b/src/backends/kalgebra/kalgebrabackend.kcfg @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/src/backends/kalgebra/kalgebracompletionobject.cpp b/src/backends/kalgebra/kalgebracompletionobject.cpp new file mode 100644 index 0000000..5bd6ec4 --- /dev/null +++ b/src/backends/kalgebra/kalgebracompletionobject.cpp @@ -0,0 +1,48 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* 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 * +*************************************************************************************/ + +#include "kalgebracompletionobject.h" + +#include + +#include "kalgebrasession.h" +#include + +KAlgebraCompletionObject::KAlgebraCompletionObject(const QString& command, int index, KAlgebraSession* session) + : Cantor::CompletionObject(session) +{ + setLine(command, index); +} + +void KAlgebraCompletionObject::fetchCompletions() +{ + OperatorsModel* opm=static_cast(session())->operatorsModel(); + + QModelIndexList idxs=opm->match(opm->index(0,0), Qt::DisplayRole, command(), 5, Qt::MatchStartsWith); + QStringList comp; + foreach(const QModelIndex& idx, idxs) + comp << idx.data().toString(); + + setCompletions(comp); + emit fetchingDone(); +} + +bool KAlgebraCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter(); +} diff --git a/src/backends/kalgebra/kalgebracompletionobject.h b/src/backends/kalgebra/kalgebracompletionobject.h new file mode 100644 index 0000000..80292f3 --- /dev/null +++ b/src/backends/kalgebra/kalgebracompletionobject.h @@ -0,0 +1,39 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef KALGEBRA_COMPLETIONOBJECT_H +#define KALGEBRA_COMPLETIONOBJECT_H + +#include "completionobject.h" + +class KAlgebraSession; + +class KAlgebraCompletionObject : public Cantor::CompletionObject +{ + public: + KAlgebraCompletionObject( const QString& command, int index, KAlgebraSession* session); + ~KAlgebraCompletionObject() override = default; + + protected: + bool mayIdentifierBeginWith(QChar c) const override; + + protected Q_SLOTS: + void fetchCompletions() override; +}; + +#endif /* _NULLCOMPLETIONOBJECT_H */ diff --git a/src/backends/kalgebra/kalgebraexpression.cpp b/src/backends/kalgebra/kalgebraexpression.cpp new file mode 100644 index 0000000..252bc69 --- /dev/null +++ b/src/backends/kalgebra/kalgebraexpression.cpp @@ -0,0 +1,62 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* 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 * +*************************************************************************************/ + +#include "kalgebraexpression.h" + +#include "textresult.h" +#include "helpresult.h" +#include "kalgebrasession.h" +#include + +#include +#include +#include + +KAlgebraExpression::KAlgebraExpression( KAlgebraSession* session, bool internal) + : Cantor::Expression(session, internal) +{} + +void KAlgebraExpression::evaluate() +{ + setStatus(Cantor::Expression::Computing); + + Analitza::Analyzer* a=static_cast(session())->analyzer(); + Analitza::Expression res; + QString cmd = command(); + QTextStream stream(&cmd); + + Analitza::ExpressionStream s(&stream); + for(; !s.atEnd();) { + a->setExpression(s.next()); + res = a->evaluate(); + + if(!a->isCorrect()) + break; + } + + if(a->isCorrect()) { + setResult(new Cantor::TextResult(res.toString())); + setStatus(Cantor::Expression::Done); + } else { + setErrorMessage(i18n("Error: %1", a->errors().join(QLatin1String("\n")))); + setStatus(Cantor::Expression::Error); + } +} + +void KAlgebraExpression::interrupt() +{} diff --git a/src/backends/kalgebra/kalgebraexpression.h b/src/backends/kalgebra/kalgebraexpression.h new file mode 100644 index 0000000..449efe2 --- /dev/null +++ b/src/backends/kalgebra/kalgebraexpression.h @@ -0,0 +1,37 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef KALGEBRA_EXPRESSION_H +#define KALGEBRA_EXPRESSION_H + +#include "expression.h" + +class KAlgebraSession; + +class KAlgebraExpression : public Cantor::Expression +{ + Q_OBJECT + public: + explicit KAlgebraExpression( KAlgebraSession* session, bool internal = false); + ~KAlgebraExpression() override = default; + + void evaluate() override; + void interrupt() override; +}; + +#endif diff --git a/src/backends/kalgebra/kalgebraextensions.cpp b/src/backends/kalgebra/kalgebraextensions.cpp new file mode 100644 index 0000000..7e15168 --- /dev/null +++ b/src/backends/kalgebra/kalgebraextensions.cpp @@ -0,0 +1,37 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#include "kalgebraextensions.h" + +KAlgebraVariableManagementExtension::KAlgebraVariableManagementExtension(QObject* parent) : Cantor::VariableManagementExtension(parent) +{ + +} + +QString KAlgebraVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + //Kalgebra uses the same command for adding and setting a variable + return setValue(name, value); +} + +QString KAlgebraVariableManagementExtension::setValue(const QString& name,const QString& value) +{ + return QString::fromLatin1("%1:=%2").arg(name, value); +} diff --git a/src/backends/kalgebra/kalgebraextensions.h b/src/backends/kalgebra/kalgebraextensions.h new file mode 100644 index 0000000..08262e0 --- /dev/null +++ b/src/backends/kalgebra/kalgebraextensions.h @@ -0,0 +1,41 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#ifndef _KALGEBRAEXTENSION_H +#define _KALGEBRAEXTENSION_H + +#include "extension.h" + +class KAlgebraVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + explicit KAlgebraVariableManagementExtension( QObject* parent ); + ~KAlgebraVariableManagementExtension() override = default; + + public Q_SLOTS: + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name, const QString& value) override; + QString removeVariable(const QString&) override { return QString(); } + QString saveVariables(const QString&) override { return QString(); } + QString loadVariables(const QString&) override { return QString(); } + QString clearVariables() override { return QString(); } +}; + +#endif /* _KALGEBRAEXTENSION_H */ diff --git a/src/backends/kalgebra/kalgebrasession.cpp b/src/backends/kalgebra/kalgebrasession.cpp new file mode 100644 index 0000000..ebdf049 --- /dev/null +++ b/src/backends/kalgebra/kalgebrasession.cpp @@ -0,0 +1,114 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* 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 * +*************************************************************************************/ + +#include "kalgebrasession.h" + +#include "settings.h" + +#include "kalgebraexpression.h" +#include "kalgebracompletionobject.h" +#include +#include +#include + +#include +#include "kalgebrasyntaxhelpobject.h" +#include +#include + +KAlgebraSession::KAlgebraSession( Cantor::Backend* backend) + : Session(backend) +{ + m_analyzer = new Analitza::Analyzer; + m_operatorsModel = new OperatorsModel; + m_variablesModel = new Analitza::VariablesModel(m_analyzer->variables()); + m_operatorsModel->setVariables(m_analyzer->variables()); +} + +KAlgebraSession::~KAlgebraSession() +{ + delete m_analyzer; +} + +void KAlgebraSession::login() +{ + emit loginStarted(); + if(!KAlgebraSettings::autorunScripts().isEmpty()){ + QString autorunScripts = KAlgebraSettings::self()->autorunScripts().join(QLatin1String("\n")); + + evaluateExpression(autorunScripts, KAlgebraExpression::DeleteOnFinish, true); + } + + changeStatus(Cantor::Session::Done); + emit loginDone(); +} + +void KAlgebraSession::logout() +{ + changeStatus(Status::Disable); +} + +void KAlgebraSession::interrupt() +{ + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression* KAlgebraSession::evaluateExpression(const QString& cmd, + Cantor::Expression::FinishingBehavior behave, + bool internal) +{ + KAlgebraExpression* expr=new KAlgebraExpression(this, internal); + expr->setFinishingBehavior(behave); + + changeStatus(Cantor::Session::Running); + expr->setCommand(cmd); + expr->evaluate(); + changeStatus(Cantor::Session::Done); + + m_operatorsModel->setVariables(m_analyzer->variables()); + m_variablesModel->updateInformation(); + return expr; +} + +Cantor::CompletionObject* KAlgebraSession::completionFor(const QString& command, int index) +{ + return new KAlgebraCompletionObject(command, index, this); +} + +Cantor::SyntaxHelpObject* KAlgebraSession::syntaxHelpFor(const QString& cmd) +{ + return new KAlgebraSyntaxHelpObject(cmd, this); +} + +OperatorsModel* KAlgebraSession::operatorsModel() +{ + return m_operatorsModel; +} + +QSyntaxHighlighter* KAlgebraSession::syntaxHighlighter(QObject* parent) +{ + Q_UNUSED(parent); + //return new AlgebraHighlighter(parent->document()); + // TODO: Think of something better here. + return new AlgebraHighlighter(nullptr); +} + +QAbstractItemModel* KAlgebraSession::variableModel() +{ + return m_variablesModel; +} diff --git a/src/backends/kalgebra/kalgebrasession.h b/src/backends/kalgebra/kalgebrasession.h new file mode 100644 index 0000000..432f38a --- /dev/null +++ b/src/backends/kalgebra/kalgebrasession.h @@ -0,0 +1,58 @@ +/************************************************************************************* +* Copyright (C) 2009 by Aleix Pol * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef KALGEBRA_SESSION_H +#define KALGEBRA_SESSION_H + +#include "session.h" + +class OperatorsModel; +class KAlgebraExpression; + +namespace Analitza { +class Analyzer; +class VariablesModel; +} + +class KAlgebraSession : public Cantor::Session +{ + Q_OBJECT + public: + explicit KAlgebraSession( Cantor::Backend* backend); + ~KAlgebraSession() override; + + void login() override; + void logout() override; + + void interrupt() override; + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& cmd, int index=-1) override; + Cantor::SyntaxHelpObject* syntaxHelpFor(const QString& cmd) override; + Analitza::Analyzer* analyzer() const { return m_analyzer; } + OperatorsModel* operatorsModel(); + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + QAbstractItemModel* variableModel() override; + + private: + Analitza::Analyzer* m_analyzer; + OperatorsModel* m_operatorsModel; + Analitza::VariablesModel* m_variablesModel; +}; + +#endif diff --git a/src/backends/kalgebra/kalgebrasyntaxhelpobject.cpp b/src/backends/kalgebra/kalgebrasyntaxhelpobject.cpp new file mode 100644 index 0000000..47e0199 --- /dev/null +++ b/src/backends/kalgebra/kalgebrasyntaxhelpobject.cpp @@ -0,0 +1,48 @@ +/************************************************************************************* + * Copyright (C) 2009 by Aleix Pol * + * * + * 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 * + *************************************************************************************/ + +#include "kalgebrasyntaxhelpobject.h" +#include "kalgebrasession.h" +#include +#include + +KAlgebraSyntaxHelpObject::KAlgebraSyntaxHelpObject(const QString& command, KAlgebraSession* session) + : SyntaxHelpObject(command, session) +{} + +void KAlgebraSyntaxHelpObject::fetchInformation() +{ + OperatorsModel* opm=static_cast(session())->operatorsModel(); + QModelIndexList idxs=opm->match(opm->index(0,0), Qt::DisplayRole, command(), 1, Qt::MatchExactly); + Q_ASSERT(idxs.size()<=1); + + if(!idxs.isEmpty()) { + QString result; + QModelIndex idx=idxs.first(); + int c=opm->columnCount(idx); + for(int i=0; i%1: %2

    ", + opm->headerData(i, Qt::Horizontal).toString(), + opm->data(idx.sibling(idx.row(), i)).toString()); + } + + setHtml(result); + emit done(); + } +} + diff --git a/src/backends/kalgebra/kalgebrasyntaxhelpobject.h b/src/backends/kalgebra/kalgebrasyntaxhelpobject.h new file mode 100644 index 0000000..aa818d9 --- /dev/null +++ b/src/backends/kalgebra/kalgebrasyntaxhelpobject.h @@ -0,0 +1,35 @@ +/************************************************************************************* + * Copyright (C) 2009 by Aleix Pol * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * + *************************************************************************************/ + +#ifndef KALGEBRASYNTAXHELPOBJECT_H +#define KALGEBRASYNTAXHELPOBJECT_H + +#include + +class KAlgebraSession; + +class KAlgebraSyntaxHelpObject : public Cantor::SyntaxHelpObject +{ + public: + KAlgebraSyntaxHelpObject( const QString& command, KAlgebraSession* session ); + + protected: + void fetchInformation() override; +}; + +#endif // KALGEBRASYNTAXHELPOBJECT_H diff --git a/src/backends/kalgebra/settings.kcfgc b/src/backends/kalgebra/settings.kcfgc new file mode 100644 index 0000000..c616bda --- /dev/null +++ b/src/backends/kalgebra/settings.kcfgc @@ -0,0 +1,3 @@ +File=kalgebrabackend.kcfg +ClassName=KAlgebraSettings +Singleton=true diff --git a/src/backends/kalgebra/settings.ui b/src/backends/kalgebra/settings.ui new file mode 100644 index 0000000..888fc82 --- /dev/null +++ b/src/backends/kalgebra/settings.ui @@ -0,0 +1,50 @@ + + + KAlgebraSettingsBase + + + + 0 + 0 + 400 + 300 + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/lua/CMakeLists.txt b/src/backends/lua/CMakeLists.txt new file mode 100644 index 0000000..407530c --- /dev/null +++ b/src/backends/lua/CMakeLists.txt @@ -0,0 +1,34 @@ +set(LuaBackend_SRCS + luabackend.cpp + luasession.cpp + luaexpression.cpp + luacompletionobject.cpp + luahelper.cpp + luakeywords.cpp + luahighlighter.cpp + luaextensions.cpp +) + +kconfig_add_kcfg_files(LuaBackend_SRCS settings.kcfgc) +install(FILES luabackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(LuaBackend_SRCS settings.ui) + +add_backend(luabackend ${LuaBackend_SRCS}) + +include_directories(${LUAJIT_INCLUDE_DIR}) + +target_link_libraries(cantor_luabackend ${LUAJIT_LIBRARY} KF5::SyntaxHighlighting) + +if(BUILD_TESTING) + add_executable( testlua testlua.cpp) + add_test(testlua testlua) + ecm_mark_as_test(testlua) + target_link_libraries( testlua + Qt5::Test + cantorlibs + cantortest + ) +endif(BUILD_TESTING) + +install(FILES cantor_lua.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) diff --git a/src/backends/lua/cantor_lua.knsrc b/src/backends/lua/cantor_lua.knsrc new file mode 100644 index 0000000..9b627a4 --- /dev/null +++ b/src/backends/lua/cantor_lua.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Lua) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/lua/luabackend.cpp b/src/backends/lua/luabackend.cpp new file mode 100644 index 0000000..557a838 --- /dev/null +++ b/src/backends/lua/luabackend.cpp @@ -0,0 +1,93 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luabackend.h" +#include "luasession.h" +#include "luaextensions.h" +#include "cantor_macros.h" + +#include "settings.h" +#include "ui_settings.h" + +#include + +LuaBackend::LuaBackend( QObject* parent,const QList args ) : Cantor::Backend( parent,args ) +{ + setObjectName(QLatin1String("LuaBackend")); + new LuaScriptExtension(this); +} + +QString LuaBackend::id() const +{ + return QLatin1String("lua"); +} + +QString LuaBackend::version() const +{ + return QLatin1String("LuaJIT 2.0"); +} + +Cantor::Session* LuaBackend::createSession() +{ + return new LuaSession(this); +} + +Cantor::Backend::Capabilities LuaBackend::capabilities() const +{ + Cantor::Backend::Capabilities cap = + Cantor::Backend::SyntaxHighlighting | + Cantor::Backend::Completion; + + return cap; +} + +bool LuaBackend::requirementsFullfilled() const +{ + return QFileInfo(LuaSettings::self()->path().toLocalFile()).isExecutable(); +} + +QUrl LuaBackend::helpUrl() const +{ + return QUrl(i18nc("Lua official documentation", "http://www.lua.org/docs.html")); +} + +QString LuaBackend::description() const +{ + return i18n("

    Lua is a fast and lightweight scripting language, with a simple procedural syntax." \ + " There are several libraries in Lua aimed at math and science.

    " + "

    This backend supports luajit 2.

    "); +} + +QWidget* LuaBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget = new QWidget(parent); + Ui::LuaSettingsBase s; + s.setupUi(widget); + + return widget; +} + +KConfigSkeleton* LuaBackend::config() const +{ + return LuaSettings::self(); +} + +K_PLUGIN_FACTORY_WITH_JSON(luabackend, "luabackend.json", registerPlugin();) +#include "luabackend.moc" diff --git a/src/backends/lua/luabackend.h b/src/backends/lua/luabackend.h new file mode 100644 index 0000000..a22584b --- /dev/null +++ b/src/backends/lua/luabackend.h @@ -0,0 +1,48 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef _LUABACKEND_H +#define _LUABACKEND_H + +#include "backend.h" + +class LuaBackend : public Cantor::Backend +{ +Q_OBJECT +public: + explicit LuaBackend( QObject* parent = nullptr, const QList args = QList()); + ~LuaBackend() override = default; + + QString id() const override; + QString version() const override; + + Cantor::Session* createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + + bool requirementsFullfilled() const override; + QUrl helpUrl() const override; + QString description() const override; + + QWidget *settingsWidget(QWidget *parent) const override; + KConfigSkeleton *config() const override; +}; + + +#endif /* _LUABACKEND_H */ diff --git a/src/backends/lua/luabackend.json b/src/backends/lua/luabackend.json new file mode 100644 index 0000000..70f92d8 --- /dev/null +++ b/src/backends/lua/luabackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for luajit", + "Description[ca@valencia]": "Dorsal pel Luajit", + "Description[ca]": "Dorsal pel Luajit", + "Description[cs]": "Podpůrná vrstva pro luajit", + "Description[de]": "Modul für luajit", + "Description[el]": "Σύστημα υποστήριξης για το luajit", + "Description[en_GB]": "Backend for luajit", + "Description[es]": "Motor para luajit", + "Description[et]": "Luajit'i taustaprogramm", + "Description[fi]": "LuaJITin taustajärjestelmä", + "Description[fr]": "Moteur pour luajit", + "Description[gl]": "Infraestrutura para luajit.", + "Description[it]": "Backend per luajit", + "Description[nl]": "Een backend voor luajit", + "Description[nn]": "Motor for LuaJIT", + "Description[pl]": "Silnik dla luajit", + "Description[pt]": "Infra-estrutura do luajit", + "Description[pt_BR]": "Infraestrutura para o luajit", + "Description[ru]": "Модуль поддержки языка Lua (компилятор LuaJIT)", + "Description[sk]": "Backend pre luajit", + "Description[sl]": "Zaledje za luajit", + "Description[sv]": "Bakgrundsprogram för luajit", + "Description[tr]": "Luajit için arka uç", + "Description[uk]": "Модуль для luajit", + "Description[x-test]": "xxBackend for luajitxx", + "Description[zh_CN]": "luajia 后端", + "Description[zh_TW]": "luajit 後端介面", + "Icon": "luabackend", + "Id": "Lua", + "License": "GPL", + "Name": "Lua", + "Name[ca@valencia]": "Lua", + "Name[ca]": "Lua", + "Name[cs]": "Lua", + "Name[da]": "Lua", + "Name[de]": "Lua", + "Name[el]": "Lua", + "Name[en_GB]": "Lua", + "Name[es]": "Lua", + "Name[et]": "Lua", + "Name[fi]": "Lua", + "Name[fr]": "Lua", + "Name[gl]": "Lua", + "Name[it]": "Lua", + "Name[nl]": "Lua", + "Name[nn]": "Lua", + "Name[pl]": "Lua", + "Name[pt]": "Lua", + "Name[pt_BR]": "Lua", + "Name[ru]": "Lua", + "Name[sk]": "Lua", + "Name[sl]": "Lua", + "Name[sv]": "Lua", + "Name[tr]": "Lua", + "Name[uk]": "Lua", + "Name[x-test]": "xxLuaxx", + "Name[zh_CN]": "Lua", + "Name[zh_TW]": "Lua", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://luajit.org" + } +} diff --git a/src/backends/lua/luabackend.kcfg b/src/backends/lua/luabackend.kcfg new file mode 100644 index 0000000..60adb58 --- /dev/null +++ b/src/backends/lua/luabackend.kcfg @@ -0,0 +1,17 @@ + + + QStandardPaths + + + + + QUrl::fromLocalFile(QStandardPaths::findExecutable(QLatin1String("luajit"))) + + + + + + diff --git a/src/backends/lua/luacompletionobject.cpp b/src/backends/lua/luacompletionobject.cpp new file mode 100644 index 0000000..7fbce77 --- /dev/null +++ b/src/backends/lua/luacompletionobject.cpp @@ -0,0 +1,74 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luacompletionobject.h" + +#include + +#include "luasession.h" +#include "luahelper.h" +#include "luakeywords.h" + +LuaCompletionObject::LuaCompletionObject(const QString& command, int index, LuaSession* session) + : Cantor::CompletionObject(session) +{ + if (session->status() != Cantor::Session::Disable) + m_L = session->getState(); + else + m_L = nullptr; + setLine(command, index); +} + +void LuaCompletionObject::fetchCompletions() +{ + if (session()->status() == Cantor::Session::Disable) + { + QStringList allCompletions; + + allCompletions << LuaKeywords::instance()->keywords(); + allCompletions << LuaKeywords::instance()->functions(); + allCompletions << LuaKeywords::instance()->variables(); + + setCompletions(allCompletions); + emit fetchingDone(); + } + else + { + QString name = command(); + int idx = name.lastIndexOf(QLatin1String("=")); + + // gets "table.next" from the expression "varname = table.next" + if(idx >= 0) + name = name.mid(idx+1).trimmed(); + + setCompletions( luahelper_completion(m_L, name) ); + emit fetchingDone(); + } +} + +bool LuaCompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_') || c == QLatin1Char('.') || c == QLatin1Char(':'); +} + +bool LuaCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c == QLatin1Char('_'); +} diff --git a/src/backends/lua/luacompletionobject.h b/src/backends/lua/luacompletionobject.h new file mode 100644 index 0000000..3c8be1b --- /dev/null +++ b/src/backends/lua/luacompletionobject.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef _LUACOMPLETIONOBJECT_H +#define _LUACOMPLETIONOBJECT_H + +#include "completionobject.h" + +class LuaSession; +class QString; +struct lua_State; + +class LuaCompletionObject : public Cantor::CompletionObject +{ +public: + LuaCompletionObject( const QString& command, int index, LuaSession* session); + ~LuaCompletionObject() override = default; + +protected Q_SLOTS: + void fetchCompletions() override; + +protected: + bool mayIdentifierContain(QChar c) const override; + bool mayIdentifierBeginWith(QChar c) const override; + +private: + lua_State* m_L; +}; + +#endif /* _LUACOMPLETIONOBJECT_H */ diff --git a/src/backends/lua/luaexpression.cpp b/src/backends/lua/luaexpression.cpp new file mode 100644 index 0000000..338e94d --- /dev/null +++ b/src/backends/lua/luaexpression.cpp @@ -0,0 +1,108 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luaexpression.h" +#include "luasession.h" +#include "luahelper.h" + +#include "textresult.h" +#include "imageresult.h" +#include "helpresult.h" + +#include + +#include +#include +#include + +LuaExpression::LuaExpression( Cantor::Session* session, bool internal) + : Cantor::Expression(session, internal) +{ +} + +void LuaExpression::evaluate() +{ + /* + * start evaluating the current expression + * set the status to computing + * decide what needs to be done if the user is trying to define a function etc + */ + setStatus(Cantor::Expression::Computing); + if (command().isEmpty()) { + setStatus(Cantor::Expression::Done); + return; + } + + LuaSession* currentSession = dynamic_cast(session()); + currentSession->runExpression(this); +} + +void LuaExpression::parseError(QString &error) +{ + qDebug() << error; + setErrorMessage(error); + setStatus(Error); +} + +void LuaExpression::parseOutput(QString &output) +{ + qDebug()<<"parsing the output " << output; + + const QStringList& inputs = command().split(QLatin1Char('\n')); + const QStringList& outputs = output.split(QLatin1Char('\n')); + QString parsedOutput; + + for (auto out : outputs) { + //remove lua's promt characters if available + if (out.startsWith(QLatin1String("> "))) + out.remove(0, 2); + else if (out.startsWith(QLatin1String(">> "))) + out.remove(0, 3); + + //for multi-line inputs lua returs the inputs as part of the output + //-> remove the input lines from the output. + //since lua doesn't always seem to preserve the spaces, compare trimmed strings + out = out.trimmed(); + bool found = false; + for (auto in : inputs) { + if (out == in.trimmed()) { + found = true; + break; + } + } + + if (!found) { + if (!parsedOutput.isEmpty()) + parsedOutput += QLatin1Char('\n'); + parsedOutput += out; + } + } + + qDebug() << "final output of the command " << command() << ": " << parsedOutput << endl; + + if (!parsedOutput.isEmpty()) + setResult(new Cantor::TextResult(parsedOutput)); + setStatus(Cantor::Expression::Done); +} + +void LuaExpression::interrupt() +{ + setStatus(Cantor::Expression::Interrupted); +} diff --git a/src/backends/lua/luaexpression.h b/src/backends/lua/luaexpression.h new file mode 100644 index 0000000..d8ecc0e --- /dev/null +++ b/src/backends/lua/luaexpression.h @@ -0,0 +1,43 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef _LUAEXPRESSION_H +#define _LUAEXPRESSION_H + +#include "expression.h" + +struct lua_State; + +class LuaExpression : public Cantor::Expression +{ + Q_OBJECT + +public: + explicit LuaExpression( Cantor::Session* session, bool internal = false); + ~LuaExpression() override = default; + + void evaluate() override; + void interrupt() override; + void parseOutput(QString& output); + void parseError(QString& error); + +}; + +#endif /* _LUAEXPRESSION_H */ diff --git a/src/backends/lua/luaextensions.cpp b/src/backends/lua/luaextensions.cpp new file mode 100644 index 0000000..e32f53a --- /dev/null +++ b/src/backends/lua/luaextensions.cpp @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luaextensions.h" +#include + +#define LUA_EXT_CDTOR(name) Lua##name##Extension::Lua##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Lua##name##Extension::~Lua##name##Extension() {} + +LUA_EXT_CDTOR(Script) + +QString LuaScriptExtension::runExternalScript(const QString& path) +{ + return QString::fromLatin1("dofile(\"%1\")").arg(path); +} + +QString LuaScriptExtension::scriptFileFilter() +{ + return i18n("Lua script file (*.lua)"); +} + +QString LuaScriptExtension::highlightingMode() +{ + return QLatin1String("lua"); +} + +QString LuaScriptExtension::commandSeparator() +{ + return QLatin1String(""); +} diff --git a/src/backends/lua/luaextensions.h b/src/backends/lua/luaextensions.h new file mode 100644 index 0000000..6eaf81c --- /dev/null +++ b/src/backends/lua/luaextensions.h @@ -0,0 +1,39 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef LUAEXTENSIONS_H +#define LUAEXTENSIONS_H + +#include + +#define LUA_EXT_CDTOR_DECL(name) Lua##name##Extension(QObject* parent); \ + ~Lua##name##Extension(); + +class LuaScriptExtension : public Cantor::ScriptExtension +{ +public: + LUA_EXT_CDTOR_DECL(Script) + QString scriptFileFilter() override; + QString highlightingMode() override; + QString runExternalScript(const QString& path) override; + QString commandSeparator() override; +}; + +#endif // LUAEXTENSIONS_H diff --git a/src/backends/lua/luahelper.cpp b/src/backends/lua/luahelper.cpp new file mode 100644 index 0000000..54ae404 --- /dev/null +++ b/src/backends/lua/luahelper.cpp @@ -0,0 +1,132 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luahelper.h" +#include "luakeywords.h" + +#include +#include +#include + +QString luahelper_tostring(lua_State* L, int idx) +{ + lua_getglobal(L, "tostring"); + lua_pushvalue(L, idx - 1); // tostring is on the top now! + lua_call(L, 1, 1); + QString str = QString::fromUtf8(lua_tostring(L, -1)); + lua_pop(L, 1); + return str; +} + +QString luahelper_dostring(lua_State* L, const QString& str) +{ + const QByteArray arr = str.toUtf8(); + bool err = ( luaL_loadbuffer(L, arr.data(), arr.size(), nullptr) || lua_pcall (L, 0, LUA_MULTRET, 0) ); + QString ret; + + if(err) + { + ret = QString::fromUtf8(lua_tostring(L, -1)); + lua_pop(L, 1); + } + + return ret; +} + +QString luahelper_getprinted(lua_State* L) +{ + luaL_loadstring(L, "return table.concat(__cantor, '\\n')"); + QString printed; + + if(!lua_pcall(L, 0, 1, 0) ) + printed = QString::fromUtf8(lua_tostring(L, -1)); + + lua_pop(L, 1); + + luaL_loadstring(L, "__cantor = {}"); // survives a __cantor = nil! + if( lua_pcall(L, 0, 0, 0) ) lua_pop(L, 1); + + return printed; +} + +static void luahelper_getkeys(lua_State* L, QStringList& list, const QString& prefix = QLatin1String("")) +{ + if(lua_type(L, -1) == LUA_TTABLE) + { + // ok, its a table, iterate the keys + lua_pushnil(L); + while (lua_next(L, -2) != 0) + { + if(lua_type(L, -2) == LUA_TSTRING) + { + QString key = QString::fromUtf8(lua_tostring(L, -2)); + list << prefix + key; + } + lua_pop(L, 1); + } + } +} + +QStringList luahelper_completion(lua_State* L, const QString& name) +{ + int top = lua_gettop(L); + + QStringList list; + + QStringList sections = name.split(QRegExp(QLatin1String("\\.|:"))); + QString table, prefix; + + if(sections.size() == 1) // global table + { + list = LuaKeywords::instance()->keywords(); + table = QLatin1String("_G"); + } + else + { + if(sections.size() == 2) + { + table = sections.first(); // table.key + prefix = name.left(sections.first().length() + 1); // table. + } + } + + if(!table.isEmpty()) + { + // get keys from the table + QByteArray arr = table.toUtf8(); + lua_getglobal(L, arr.data()); + luahelper_getkeys(L, list, prefix); + + // get keys from the metatable.__index + if( lua_getmetatable(L, -1) ) + { + lua_getfield (L, -1, "__index"); + luahelper_getkeys(L, list, prefix); + lua_pop(L, 2); + // pop metatable and metatable.__index + } + + lua_pop(L, 1); // pop table + } + + lua_settop(L, top); + + return list; +} diff --git a/src/backends/lua/luahelper.h b/src/backends/lua/luahelper.h new file mode 100644 index 0000000..0676204 --- /dev/null +++ b/src/backends/lua/luahelper.h @@ -0,0 +1,34 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef _LUAHELPER_H +#define _LUAHELPER_H + +struct lua_State; +class QString; +class QStringList; + +/* follows lua_funcname convention */ +QString luahelper_tostring (lua_State* L, int idx); +QString luahelper_dostring (lua_State* L, const QString& str); +QString luahelper_getprinted (lua_State* L); +QStringList luahelper_completion (lua_State* L, const QString& name); + +#endif /* _LUAHELPER_H */ diff --git a/src/backends/lua/luahighlighter.cpp b/src/backends/lua/luahighlighter.cpp new file mode 100644 index 0000000..cfb014d --- /dev/null +++ b/src/backends/lua/luahighlighter.cpp @@ -0,0 +1,36 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luahighlighter.h" +#include "luakeywords.h" +#include "luahelper.h" + +LuaHighlighter::LuaHighlighter(QObject* parent): DefaultHighlighter(parent) +{ + addKeywords (LuaKeywords::instance()->keywords()); + addFunctions(LuaKeywords::instance()->functions()); + addVariables(LuaKeywords::instance()->variables()); + + addRule(QRegExp(QLatin1String("[A-Za-z0-9_]+(?=\\()")) , functionFormat()); + addRule(QRegExp(QLatin1String("\"[^\"]*\"")) , stringFormat()); + addRule(QRegExp(QLatin1String("'[^\'].*'")) , stringFormat()); + addRule(QRegExp(QLatin1String("--[^\n]*")) , commentFormat()); + // did not add support for the multiline comment or multiline string +} diff --git a/src/backends/lua/luahighlighter.h b/src/backends/lua/luahighlighter.h new file mode 100644 index 0000000..c8b7afa --- /dev/null +++ b/src/backends/lua/luahighlighter.h @@ -0,0 +1,33 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef LUAHIGHLIGHTER_H +#define LUAHIGHLIGHTER_H + +#include "defaulthighlighter.h" + +class LuaHighlighter : public Cantor::DefaultHighlighter +{ +public: + explicit LuaHighlighter(QObject* parent); + ~LuaHighlighter() override = default; +}; + +#endif // LUAHIGHLIGHTER_H diff --git a/src/backends/lua/luakeywords.cpp b/src/backends/lua/luakeywords.cpp new file mode 100644 index 0000000..3563fa7 --- /dev/null +++ b/src/backends/lua/luakeywords.cpp @@ -0,0 +1,66 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita +*/ + +#include "luakeywords.h" + +#include +#include + +LuaKeywords::LuaKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Lua")); + + m_keywords = definition.keywordList(QLatin1String("keywords")); + m_keywords << definition.keywordList(QLatin1String("control")); + + m_variables = definition.keywordList(QLatin1String("basevar")); + + m_functions = definition.keywordList(QLatin1String("basefunc")); +} + +LuaKeywords* LuaKeywords::instance() +{ + static LuaKeywords* inst = nullptr; + + if(inst == nullptr){ + inst = new LuaKeywords(); + qSort(inst->m_functions); + qSort(inst->m_keywords); + qSort(inst->m_variables); + } + + return inst; +} + +const QStringList& LuaKeywords::functions() const +{ + return m_functions; +} + +const QStringList& LuaKeywords::keywords() const +{ + return m_keywords; +} + +const QStringList& LuaKeywords::variables() const +{ + return m_variables; +} diff --git a/src/backends/lua/luakeywords.h b/src/backends/lua/luakeywords.h new file mode 100644 index 0000000..f2a9a8e --- /dev/null +++ b/src/backends/lua/luakeywords.h @@ -0,0 +1,42 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita +*/ + +#ifndef _LUAKEYWORDS_H +#define _LUAKEYWORDS_H + +#include + +class LuaKeywords +{ + public: + static LuaKeywords* instance(); + + const QStringList& functions() const; + const QStringList& keywords() const; + const QStringList& variables() const; + + private: + LuaKeywords(); + ~LuaKeywords() = default; + QStringList m_functions; + QStringList m_keywords; + QStringList m_variables; +}; +#endif /* _LUAKEYWORDS_H */ diff --git a/src/backends/lua/luasession.cpp b/src/backends/lua/luasession.cpp new file mode 100644 index 0000000..c419c90 --- /dev/null +++ b/src/backends/lua/luasession.cpp @@ -0,0 +1,196 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#include "luasession.h" +#include "luaexpression.h" +#include "luacompletionobject.h" +#include "luahighlighter.h" +#include "luahelper.h" +#include +#include "ui_settings.h" + +#include + +LuaSession::LuaSession( Cantor::Backend* backend) : Session(backend), + m_L(nullptr), + m_process(nullptr), + m_currentExpression(nullptr) +{ +} + +void LuaSession::login() +{ + emit loginStarted(); + + /* + * setup Qprocess here + * load the autoscripts + */ + + m_process = new QProcess(this); + m_process->setProgram(QLatin1String("/usr/bin/lua")); + m_process->setArguments(QStringList() << QLatin1String("-i")); + + m_process->setProcessChannelMode(QProcess::SeparateChannels); + + connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readIntroMessage())); + connect(m_process, SIGNAL(started()), this, SLOT(processStarted())); + m_process->start(); + m_process->waitForStarted(); + m_process->waitForReadyRead(); + + // we need this for tab completion + m_L = luaL_newstate(); + luaL_openlibs(m_L); + + changeStatus(Cantor::Session::Done); + emit loginDone(); +} + +void LuaSession::readIntroMessage() +{ + while(m_process->bytesAvailable()) { + m_output.append(QString::fromLocal8Bit(m_process->readLine())); + } + + if(!m_output.isEmpty() && m_output.trimmed().endsWith(QLatin1String(">"))) { + qDebug() << " reading the intro message " << m_output ; + m_output.clear(); + + disconnect(m_process, SIGNAL(readyReadStandardOutput()), this , SLOT(readIntroMessage())); + connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput())); + connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readError())); + } +} + +void LuaSession::readOutput() +{ + /* + * parse the output + * clear all the garbage + * set it as output + */ + // keep reading till the output ends with '>'. + // '>' marks the end of output for a particular command; + while(m_process->bytesAvailable()) { + m_output.append(QString::fromLocal8Bit(m_process->readLine())); + } + + //merge outputs until lua's promt "> " appears, take care of the comment characters "-->" + if(m_currentExpression && !m_output.isEmpty() && m_output.endsWith(QLatin1String("> ")) + && !m_output.endsWith(QLatin1String("-> "))) + { + // we have our complete output + // clean the output and parse it and clear m_output; + m_currentExpression->parseOutput(m_output); + m_output.clear(); + + } + +} + +void LuaSession::readError() +{ + qDebug() << "readError"; + QString error = QString::fromLocal8Bit(m_process->readAllStandardError()); + if (!m_currentExpression || error.isEmpty()) + { + return; + } + m_currentExpression->parseError(error); +} + +void LuaSession::processStarted() +{ + qDebug() << m_process->program() << " pid " << m_process->processId() << " started " << endl; +} + +void LuaSession::logout() +{ + if(m_process) + m_process->kill(); + + changeStatus(Status::Disable); +} + +void LuaSession::interrupt() +{ + // Lua backend is synchronous, there is no way to currently interrupt an expression (in a clean way) + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression* LuaSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + changeStatus(Cantor::Session::Running); + + m_currentExpression = new LuaExpression(this, internal); + connect(m_currentExpression, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(expressionFinished(Cantor::Expression::Status))); + m_currentExpression->setFinishingBehavior(behave); + m_currentExpression->setCommand(cmd); + m_currentExpression->evaluate(); + + return m_currentExpression; +} + +void LuaSession::runExpression(LuaExpression *currentExpression) +{ + /* + * get the current command + * format it and write to m_process + */ + QString command = currentExpression->command(); + + command += QLatin1String("\n"); + + qDebug() << "final command to be executed " << command << endl; + + m_process->write(command.toLocal8Bit()); +} + +Cantor::CompletionObject* LuaSession::completionFor(const QString& command, int index) +{ + return new LuaCompletionObject(command, index, this); +} + +void LuaSession::expressionFinished(Cantor::Expression::Status status) +{ + switch(status) { + + case Cantor::Expression::Computing: + break; + + case Cantor::Expression::Done: + case Cantor::Expression::Error: + case Cantor::Expression::Interrupted: + changeStatus(Cantor::Session::Done); + break; + } +} + +QSyntaxHighlighter* LuaSession::syntaxHighlighter(QObject* parent) +{ + LuaHighlighter* highlighter = new LuaHighlighter(parent); + return highlighter; +} + +lua_State* LuaSession::getState() const +{ + return m_L; +} diff --git a/src/backends/lua/luasession.h b/src/backends/lua/luasession.h new file mode 100644 index 0000000..5bfaacd --- /dev/null +++ b/src/backends/lua/luasession.h @@ -0,0 +1,65 @@ +/* + 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. + + --- + Copyright (C) 2014 Lucas Hermann Negri + */ + +#ifndef _LUASESSION_H +#define _LUASESSION_H + +#include "session.h" +#include + +class LuaExpression; +class QProcess; + +class LuaSession : public Cantor::Session +{ + Q_OBJECT +public: + explicit LuaSession( Cantor::Backend* backend); + ~LuaSession() override = default; + + void login() override; + void logout() override; + + void interrupt() override; + + void runExpression(LuaExpression* currentExpression); + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& cmd, int index=-1) override; + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + lua_State* getState() const; + +public Q_SLOTS: + void readIntroMessage(); + void readOutput(); + void readError(); + void processStarted(); + +private Q_SLOTS: + void expressionFinished(Cantor::Expression::Status status); + +private: + lua_State* m_L; + QProcess* m_process; + LuaExpression* m_currentExpression; + QString m_output; +}; + +#endif /* _LUASESSION_H */ diff --git a/src/backends/lua/settings.kcfgc b/src/backends/lua/settings.kcfgc new file mode 100644 index 0000000..592749a --- /dev/null +++ b/src/backends/lua/settings.kcfgc @@ -0,0 +1,3 @@ +File=luabackend.kcfg +ClassName=LuaSettings +Singleton=true diff --git a/src/backends/lua/settings.ui b/src/backends/lua/settings.ui new file mode 100644 index 0000000..3a33d4c --- /dev/null +++ b/src/backends/lua/settings.ui @@ -0,0 +1,64 @@ + + + LuaSettingsBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Path to luajit command: + + + + + + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/lua/testlua.cpp b/src/backends/lua/testlua.cpp new file mode 100644 index 0000000..f7d6e3c --- /dev/null +++ b/src/backends/lua/testlua.cpp @@ -0,0 +1,113 @@ +/* + 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. + + --- + Copyright (C) 2018 Nikita Sirgienko + */ + +#include "testlua.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" +#include "imageresult.h" +#include "epsresult.h" + +#include "luaexpression.h" + +#include + +QString TestLua::backendName() +{ + return QLatin1String("lua"); +} + +void TestLua::testSimpleCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("print(2+2)\n") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput( e->result()->toHtml() ), QLatin1String("4") ); +} + +void TestLua::testMultilineCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("print(4+4); print(2-1)") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput(e->result()->toHtml()), QLatin1String("8\n1") ); +} + +void TestLua::testVariableDefinition() +{ + Cantor::Expression* e=evalExp( QLatin1String("num = 42; print(num)") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput(e->result()->toHtml()), QLatin1String("42") ); +} + +void TestLua::testInvalidSyntax() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2*+.") ); + + QVERIFY( e!=nullptr ); + QCOMPARE( e->status(), Cantor::Expression::Error ); +} + +void TestLua::testIfElseCondition() +{ + QSKIP("Skip, until problem with multiline input for lua backends not will be solved"); + QLatin1String cmd( + "if 12 > 50 then" + " print('true')" + "else" + " print('false')" + "end"); + + Cantor::Expression* e=evalExp(cmd); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput(e->result()->toHtml()), QLatin1String("false") ); +} + +void TestLua::testForLoop() +{ + QSKIP("Skip, until problem with multiline input for lua backends not will be solved"); + QLatin1String cmd( + "karlSum = 0""\n" + "for i = 1, 100 do""\n" + " karlSum = karlSum + i""\n" + "end""\n" + "print(karlSum)"); + + Cantor::Expression* e=evalExp(cmd); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput(e->result()->toHtml()), QLatin1String("5050") ); +} + +QTEST_MAIN( TestLua ) diff --git a/src/backends/lua/testlua.h b/src/backends/lua/testlua.h new file mode 100644 index 0000000..f9625fb --- /dev/null +++ b/src/backends/lua/testlua.h @@ -0,0 +1,52 @@ +/* + 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. + + --- + Copyright (C) 2018 Nikita Sirgienko + */ + +#ifndef _TESTLUA_H +#define _TESTLUA_H + +#include "backendtest.h" + +/** This class test some of the basic functions of the Lua backend + The different tests represent some general expressions for preventing possible future regression +**/ +class TestLua : public BackendTest +{ + Q_OBJECT + +private Q_SLOTS: + //tests evaluating a simple command + void testSimpleCommand(); + //tests a command, containing more than 1 line + void testMultilineCommand(); + //tests simple variable definition + void testVariableDefinition(); + //tests a syntax error (not closing bracket) + void testInvalidSyntax(); + //tests if-else condition + void testIfElseCondition(); + //tests 'for' loop + void testForLoop(); + +private: + QString backendName() override; +}; + +#endif /* _TESTLUA_H */ + diff --git a/src/backends/maxima/CMakeLists.txt b/src/backends/maxima/CMakeLists.txt new file mode 100644 index 0000000..8ad1e96 --- /dev/null +++ b/src/backends/maxima/CMakeLists.txt @@ -0,0 +1,33 @@ +set( MaximaBackend_SRCS + maximabackend.cpp + maximasession.cpp + maximaexpression.cpp + maximaextensions.cpp + maximahighlighter.cpp + maximakeywords.cpp + maximacompletionobject.cpp + maximasyntaxhelpobject.cpp + maximavariablemodel.cpp +) + +kconfig_add_kcfg_files(MaximaBackend_SRCS settings.kcfgc) +install(FILES maximabackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(MaximaBackend_SRCS settings.ui) + +add_backend(maximabackend ${MaximaBackend_SRCS}) + +target_link_libraries(cantor_maximabackend KF5::SyntaxHighlighting) + +if(BUILD_TESTING) + add_executable( testmaxima testmaxima.cpp) + add_test(NAME testmaxima COMMAND testmaxima) + target_link_libraries( testmaxima + Qt5::Test + cantorlibs + cantortest + ) +endif() + +install( FILES cantor_maxima.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) +install( FILES cantor-initmaxima.lisp DESTINATION ${KDE_INSTALL_DATADIR}/cantor/maximabackend) diff --git a/src/backends/maxima/DESIGN b/src/backends/maxima/DESIGN new file mode 100644 index 0000000..7fc7149 --- /dev/null +++ b/src/backends/maxima/DESIGN @@ -0,0 +1,25 @@ +This backend allows Cantor to use the Maxima Computer Algebra System. + +It works by starting a Tcp Server on an open port (it just tries some, until one is +open), and then letting maxima connect to it(see setup-client command of maxima). +Once maxima has connected, the backend sends the commands through the socket, and +parses the delivered output. +The parsing itself is a bit tricky, as Maxima output can have different formattings. +1) it contains an output prompt. +2) no prompt: this means that either maxima has asked a question, or there has happened an + error. To determine which of the two it is, Cantor uses a timer, if for more than 100ms + no new output arrives it assumes that it's a question. This works fairly well, as this + case is rather seldom, and when an error occurs, maxima will soon deliver a new input prompt. +3) it contains a new input prompt: This means the computation is finished. If running the timer + from 2) is stopped, and the read output is prepared to be put into a Result. + +To allow embedding of plots, the backend watches if the commands contain a plot command +(using some regexp magic), sets a flag, and sends a slightly altered plot command to +maxima that contains a temporary target file. + +SyntaxHighlighting and TabCompletion are implemented in a very simplistic way, +by just using a static list of known functions/keywords. + +To allow SyntaxHelp and Typesetting, it launches a separate maxima process, that +then evaluates "? command" or "tex(expr)", and then the output is parsed. + diff --git a/src/backends/maxima/cantor-initmaxima.lisp b/src/backends/maxima/cantor-initmaxima.lisp new file mode 100644 index 0000000..65197e7 --- /dev/null +++ b/src/backends/maxima/cantor-initmaxima.lisp @@ -0,0 +1,87 @@ +;;this file is partially based on similar files from the WxMaxima and Texmacs projects + +(in-package :maxima) +#+clisp (defvar *old-suppress-check-redefinition* + custom:*suppress-check-redefinition*) +#+clisp (setf custom:*suppress-check-redefinition* t) +(setf *alt-display2d* 'cantor-latex-print) +(setf *alt-display1d* 'cantor-regular-print) +(setf *prompt-prefix* "") +;;the newline at the end of the next line is needed, as we otherwise might run into +;;weird issues with KPtyProcess caching the line of the prompt, and sending it twice +;;to readStdOut() +(setf *prompt-suffix* " +") +;(setf *general-display-prefix* "DISPLAY_PREFIX") +(setf *maxima-prolog* "Hello World") +(setf *maxima-epilog* "Bye!") + +(setf $display2d nil) + +;#-gcl(setf *debug-io* (make-two-way-stream *standard-input* *standard-output*)) +;#+(or cmu sbcl scl) +;(setf *terminal-io* (make-two-way-stream *standard-input* *standard-output*)) + +;; Small changes to mactex.lisp for interfacing with TeXmacs +;; Andrey Grozin, 2001-2006 + +;(defun main-prompt () +; (format () "~A(~A~D) ~A" *prompt-prefix* +; (tex-stripdollar $inchar) $linenum *prompt-suffix*)) + +(declare-top + (special lop rop ccol $gcprint $inchar) + (*expr tex-lbp tex-rbp)) +(defconstant texport *standard-output*) + +(defun tex-stripdollar (x) + (let ((s (quote-% (maybe-invert-string-case (symbol-name (stripdollar x)))))) + (if (> (length s) 1) + (concatenate 'string "\\mathrm{" s "}") + s))) + +(defprop mtimes ("\\*") texsym) + + +(defun cantor-latex-print (x) + (princ "") + (princ "") + (linear-displa x ) + (princ "") + + (let ((ccol 1)) + (mapc #'princ + (tex x '("") '("") 'mparen 'mparen))) + + (princ "") +) + +(defun cantor-regular-print (x) + (princ "") + (princ "") + (linear-displa x) + (princ "") + (princ "") +) + +(defun cantor-inspect (var) + ($disp var) + (mapc #'(lambda (x) + ($disp (eval x)) + ($disp "-cantor-value-separator-") + ) + (cdr var) + ) +) + +;; Fix bug with maxima tex output, LaTeX and amsmath, until Maxima team don't solve it +;; More info: https://sourceforge.net/p/maxima/bugs/3432/ +(defun tex-matrix(x l r) + (append l `("\\begin{pmatrix}") + (mapcan #'(lambda(y) + (tex-list (cdr y) nil (list "\\\\ ") "&")) + (cdr x)) + '("\\end{pmatrix}") r)) + +#+clisp (setf custom:*suppress-check-redefinition* + *old-suppress-check-redefinition*) diff --git a/src/backends/maxima/cantor_maxima.knsrc b/src/backends/maxima/cantor_maxima.knsrc new file mode 100644 index 0000000..e30d69f --- /dev/null +++ b/src/backends/maxima/cantor_maxima.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Maxima) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/maxima/maximabackend.cpp b/src/backends/maxima/maximabackend.cpp new file mode 100644 index 0000000..f7b3712 --- /dev/null +++ b/src/backends/maxima/maximabackend.cpp @@ -0,0 +1,121 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "maximabackend.h" + +#include "maximasession.h" +#include "settings.h" +#include "ui_settings.h" +#include "maximaextensions.h" + +#include +#include + +#include "cantor_macros.h" + + +MaximaBackend::MaximaBackend( QObject* parent,const QList args ) : Cantor::Backend( parent,args ) +{ + setObjectName(QLatin1String("maximabackend")); + qDebug()<<"Creating MaximaBackend"; + //initialize the supported extensions + new MaximaHistoryExtension(this); + new MaximaScriptExtension(this); + new MaximaCASExtension(this); + new MaximaCalculusExtension(this); + new MaximaLinearAlgebraExtension(this); + new MaximaPlotExtension(this); + new MaximaVariableManagementExtension(this); +} + +MaximaBackend::~MaximaBackend() +{ + qDebug()<<"Destroying MaximaBackend"; +} + +QString MaximaBackend::id() const +{ + return QLatin1String("maxima"); +} + +QString MaximaBackend::version() const +{ + return QLatin1String("5.41 and 5.42"); +} + +Cantor::Session* MaximaBackend::createSession() +{ + qDebug()<<"Spawning a new Maxima session"; + + return new MaximaSession(this); +} + +Cantor::Backend::Capabilities MaximaBackend::capabilities() const +{ + qDebug()<<"Requesting capabilities of MaximaSession"; + Cantor::Backend::Capabilities cap= + Cantor::Backend::LaTexOutput | + Cantor::Backend::InteractiveMode| + Cantor::Backend::SyntaxHighlighting| + Cantor::Backend::Completion | + Cantor::Backend::SyntaxHelp; + if(MaximaSettings::self()->variableManagement()) + cap|=Cantor::Backend::VariableManagement; + + return cap; +} + +bool MaximaBackend::requirementsFullfilled() const +{ + QFileInfo info(MaximaSettings::self()->path().toLocalFile()); + return info.isExecutable(); +} + +QUrl MaximaBackend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation of Maxima, please check if there is a translated version and use the correct url", + "http://maxima.sourceforge.net/docs/manual/en/maxima.html")); +} + +QWidget* MaximaBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget=new QWidget(parent); + Ui::MaximaSettingsBase s; + s.setupUi(widget); + return widget; +} + +KConfigSkeleton* MaximaBackend::config() const +{ + return MaximaSettings::self(); +} + +QString MaximaBackend::description() const +{ + return i18n("Maxima is a system for the manipulation of symbolic and numerical expressions, "\ + "including differentiation, integration, Taylor series, Laplace transforms, "\ + "ordinary differential equations, systems of linear equations, polynomials, and sets, "\ + "lists, vectors, matrices, and tensors. Maxima yields high precision numeric results "\ + "by using exact fractions, arbitrary precision integers, and variable precision "\ + "floating point numbers. Maxima can plot functions and data in two and three dimensions. "); +} + +K_PLUGIN_FACTORY_WITH_JSON(maximabackend, "maximabackend.json", registerPlugin();) +#include "maximabackend.moc" diff --git a/src/backends/maxima/maximabackend.h b/src/backends/maxima/maximabackend.h new file mode 100644 index 0000000..a4dfaaa --- /dev/null +++ b/src/backends/maxima/maximabackend.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _MAXIMABACKEND_H +#define _MAXIMABACKEND_H + +#include "backend.h" + +class MaximaBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit MaximaBackend( QObject* parent = nullptr,const QList args = QList()); + ~MaximaBackend() override; + + QString id() const override; + QString version() const override; + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + bool requirementsFullfilled() const override; + + QUrl helpUrl() const override; + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; + + QString description() const override; +}; + + +#endif /* _MAXIMABACKEND_H */ diff --git a/src/backends/maxima/maximabackend.json b/src/backends/maxima/maximabackend.json new file mode 100644 index 0000000..3b6e5ea --- /dev/null +++ b/src/backends/maxima/maximabackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for the Maxima Computer Algebra System", + "Description[ca@valencia]": "Dorsal per al Maxima: un sistema d'àlgebra per ordinador", + "Description[ca]": "Dorsal per al Maxima: un sistema d'àlgebra per ordinador", + "Description[cs]": "Podpůrná vrstva pro počítačový systém algebry Maxima", + "Description[de]": "„Maxima Computer Algebra System“-Modul für Cantor", + "Description[el]": "Σύστημα υποστήριξης για το σύστημα υπολογιστικής άλγεβρας Maxima", + "Description[en_GB]": "Backend for the Maxima Computer Algebra System", + "Description[es]": "Motor para el sistema algebraico computacional Maxima", + "Description[et]": "Maxima kompuuter-algebrasüsteemi taustaprogramm", + "Description[fi]": "Maxima-tietokonealgebrajärjestelmän taustajärjestelmä", + "Description[fr]": "Moteur pour le système de calcul formel « Maxima »", + "Description[gl]": "Infraestrutura do Sistema de álxebra informática Maxima", + "Description[it]": "Backend per il sistema di calcolo algebrico Maxima", + "Description[nl]": "Backend voor het Maxima Computer Algebra System", + "Description[nn]": "Motor for algebrasystemet Maxima", + "Description[pl]": "Silnik dla systemu algebry komputerowej Maxima", + "Description[pt]": "Infra-Estrutura do Sistema de Álgebra Computacional Maxima", + "Description[pt_BR]": "Infraestrutura para o Maxima Computer Algebra System", + "Description[ru]": "Модуль поддержки системы компьютерной алгебры Maxima", + "Description[sk]": "Backend pre Maxima Computer Algebra System", + "Description[sl]": "Zaledje za računalniški algebraični sistem Maxima", + "Description[sv]": "Bakgrundsprogram för datoralgebrasystemet Maxima", + "Description[tr]": "Maxima Computer Algebra System için arka uç", + "Description[uk]": "Модуль системи комп’ютерної алгебри Maxima", + "Description[x-test]": "xxBackend for the Maxima Computer Algebra Systemxx", + "Description[zh_CN]": "Maxima 计算器代数系统后端", + "Description[zh_TW]": "Maxima 電腦代數系統的後端介面", + "Icon": "maximabackend", + "Id": "Maxima", + "License": "GPL", + "Name": "Maxima", + "Name[ca@valencia]": "Maxima", + "Name[ca]": "Maxima", + "Name[cs]": "Maxima", + "Name[da]": "Maxima", + "Name[de]": "Maxima", + "Name[el]": "Maxima", + "Name[en_GB]": "Maxima", + "Name[es]": "Maxima", + "Name[et]": "Maxima", + "Name[fi]": "Maxima", + "Name[fr]": "Maxima", + "Name[gl]": "Maxima", + "Name[it]": "Maxima", + "Name[nl]": "Maxima", + "Name[nn]": "Maxima", + "Name[pl]": "Maxima", + "Name[pt]": "Maxima", + "Name[pt_BR]": "Maxima", + "Name[ru]": "Maxima", + "Name[sk]": "Maxima", + "Name[sl]": "Maxima", + "Name[sv]": "Maxima", + "Name[tr]": "Maxima", + "Name[uk]": "Maxima", + "Name[x-test]": "xxMaximaxx", + "Name[zh_CN]": "Maxima", + "Name[zh_TW]": "Maxima", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://maxima.sourceforge.net/" + } +} diff --git a/src/backends/maxima/maximabackend.kcfg b/src/backends/maxima/maximabackend.kcfg new file mode 100644 index 0000000..ef03582 --- /dev/null +++ b/src/backends/maxima/maximabackend.kcfg @@ -0,0 +1,25 @@ + + + QStandardPaths + + + + + QUrl::fromLocalFile(QStandardPaths::findExecutable( QLatin1String("maxima") )) + + + + true + + + + true + + + + + + diff --git a/src/backends/maxima/maximacompletionobject.cpp b/src/backends/maxima/maximacompletionobject.cpp new file mode 100644 index 0000000..b85eac2 --- /dev/null +++ b/src/backends/maxima/maximacompletionobject.cpp @@ -0,0 +1,82 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#include "maximacompletionobject.h" + +#include + +#include "maximasession.h" +#include "maximakeywords.h" +#include "maximavariablemodel.h" + +MaximaCompletionObject::MaximaCompletionObject(const QString& command, int index,MaximaSession* session) : Cantor::CompletionObject(session) +{ + qDebug() << "MaximaCompletionObject constructor"; + setLine(command, index); +} + +void MaximaCompletionObject::fetchIdentifierType() +{ + MaximaVariableModel* model=static_cast(session()->variableModel()); + QStringList userVariableNames=model->variableNames(); + QStringList userFunctionNames=model->functionNames(true); + if (qBinaryFind(userVariableNames.begin(), userVariableNames.end(), identifier()) + != userVariableNames.end()) + emit fetchingTypeDone(VariableType); + else if (qBinaryFind(userFunctionNames.begin(), userFunctionNames.end(), identifier()) + != userFunctionNames.end()) + emit fetchingTypeDone(FunctionType); + else if (qBinaryFind(MaximaKeywords::instance()->functions().begin(), + MaximaKeywords::instance()->functions().end(), identifier()) + != MaximaKeywords::instance()->functions().end()) + emit fetchingTypeDone(FunctionType); + else if (qBinaryFind(MaximaKeywords::instance()->keywords().begin(), + MaximaKeywords::instance()->keywords().end(), identifier()) + != MaximaKeywords::instance()->keywords().end()) + emit fetchingTypeDone(KeywordType); + else + emit fetchingTypeDone(VariableType); +} + +void MaximaCompletionObject::fetchCompletions() +{ + MaximaVariableModel* model=static_cast(session()->variableModel()); + + QStringList allCompletions; + allCompletions<variables(); + allCompletions<functions(); + allCompletions<keywords(); + allCompletions<variableNames(); + allCompletions<functionNames(true); + + setCompletions(allCompletions); + + emit fetchingDone(); +} + +bool MaximaCompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_') || c == QLatin1Char('%'); +} + +bool MaximaCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c == QLatin1Char('_') || c == QLatin1Char('%'); +} diff --git a/src/backends/maxima/maximacompletionobject.h b/src/backends/maxima/maximacompletionobject.h new file mode 100644 index 0000000..a584477 --- /dev/null +++ b/src/backends/maxima/maximacompletionobject.h @@ -0,0 +1,43 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _MAXIMACOMPLETIONOBJECT_H +#define _MAXIMACOMPLETIONOBJECT_H + +#include "completionobject.h" + +class MaximaSession; + +class MaximaCompletionObject : public Cantor::CompletionObject +{ + public: + MaximaCompletionObject( const QString& cmd, int index, MaximaSession* session ); + ~MaximaCompletionObject() override = default; + + protected: + bool mayIdentifierContain(QChar c) const override; + bool mayIdentifierBeginWith(QChar c) const override; + + protected Q_SLOTS: + void fetchCompletions() override; + void fetchIdentifierType() override; +}; + +#endif /* _MAXIMACOMPLETIONOBJECT_H */ diff --git a/src/backends/maxima/maximaexpression.cpp b/src/backends/maxima/maximaexpression.cpp new file mode 100644 index 0000000..45b7298 --- /dev/null +++ b/src/backends/maxima/maximaexpression.cpp @@ -0,0 +1,445 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#include "maximaexpression.h" + +#include + +#include "maximasession.h" +#include "textresult.h" +#include "epsresult.h" +#include "imageresult.h" +#include "helpresult.h" +#include "latexresult.h" +#include "settings.h" + +#include +#include + +#include +#include +#include +#include +#include +#include + +// MaximaExpression use real id from Maxima as expression id, so we don't know id before executing +MaximaExpression::MaximaExpression( Cantor::Session* session, bool internal ) : Cantor::Expression(session, internal, -1), + m_tempFile(nullptr), + m_isHelpRequest(false), + m_isHelpRequestAdditional(false), + m_isPlot(false), + m_plotResult(nullptr), + m_plotResultIndex(-1), + m_gotErrorContent(false) +{ +} + +MaximaExpression::~MaximaExpression() { + if(m_tempFile) + delete m_tempFile; +} + +void MaximaExpression::evaluate() +{ + m_isHelpRequest=false; + m_gotErrorContent=false; + + if(m_tempFile) + { + delete m_tempFile; + m_tempFile = nullptr; + m_isPlot = false; + m_plotResult = nullptr; + m_plotResultIndex = -1; + } + + //check if this is a ?command + if(command().startsWith(QLatin1String("??")) + || command().startsWith(QLatin1String("describe(")) + || command().startsWith(QLatin1String("example(")) + || command().startsWith(QLatin1String(":lisp(cl-info::info-exact"))) + m_isHelpRequest=true; + + if(command().contains(QRegExp(QLatin1String("(?:plot2d|plot3d|contour_plot)\\s*\\([^\\)]"))) && MaximaSettings::self()->integratePlots() && !command().contains(QLatin1String("ps_file"))) + { + m_isPlot=true; +#ifdef WITH_EPS + m_tempFile=new QTemporaryFile(QDir::tempPath() + QLatin1String("/cantor_maxima-XXXXXX.eps" )); +#else + m_tempFile=new QTemporaryFile(QDir::tempPath() + QLatin1String("/cantor_maxima-XXXXXX.png")); +#endif + m_tempFile->open(); + + m_fileWatch.removePaths(m_fileWatch.files()); + m_fileWatch.addPath(m_tempFile->fileName()); + connect(&m_fileWatch, &QFileSystemWatcher::fileChanged, this, &MaximaExpression::imageChanged, Qt::UniqueConnection); + } + + const QString& cmd=command(); + + bool isComment = true; + int commentLevel = 0; + bool inString = false; + for (int i = 0; i < cmd.size(); ++i) { + if (cmd[i] == QLatin1Char('\\')) { + ++i; // skip the next character + if (commentLevel == 0 && !inString) { + isComment = false; + } + } else if (cmd[i] == QLatin1Char('"') && commentLevel == 0) { + inString = !inString; + isComment = false; + } else if (cmd.mid(i,2) == QLatin1String("/*") && !inString) { + ++commentLevel; + ++i; + } else if (cmd.mid(i,2) == QLatin1String("*/") && !inString) { + if (commentLevel == 0) { + qDebug() << "Comments mismatched!"; + setErrorMessage(i18n("Error: Too many */")); + setStatus(Cantor::Expression::Error); + return; + } + ++i; + --commentLevel; + } else if (isComment && commentLevel == 0 && !cmd[i].isSpace()) { + isComment = false; + } + } + + if (commentLevel > 0) { + qDebug() << "Comments mismatched!"; + setErrorMessage(i18n("Error: Too many /*")); + setStatus(Cantor::Expression::Error); + return; + } + if (inString) { + qDebug() << "String not closed"; + setErrorMessage(i18n("Error: expected \" before ;")); + setStatus(Cantor::Expression::Error); + return; + } + if(isComment) + { + setStatus(Cantor::Expression::Done); + return; + } + + session()->enqueueExpression(this); +} + +void MaximaExpression::interrupt() +{ + qDebug()<<"interrupting"; + setStatus(Cantor::Expression::Interrupted); +} + +QString MaximaExpression::internalCommand() +{ + QString cmd=command(); + + if(m_isPlot) + { + if(!m_tempFile) + { + qDebug()<<"plotting without tempFile"; + return QString(); + } + QString fileName = m_tempFile->fileName(); + +#ifdef WITH_EPS + const QString psParam=QLatin1String("[gnuplot_ps_term_command, \"set size 1.0, 1.0; set term postscript eps color solid \"]"); + const QString plotParameters = QLatin1String("[ps_file, \"")+ fileName+QLatin1String("\"],")+psParam; +#else + const QString plotParameters = QLatin1String("[gnuplot_term, \"png size 500,340\"], [gnuplot_out_file, \"")+fileName+QLatin1String("\"]"); + +#endif + cmd.replace(QRegExp(QLatin1String("((plot2d|plot3d|contour_plot)\\s*\\(.*)\\)([;\n$]|$)")), QLatin1String("\\1, ")+plotParameters+QLatin1String(");")); + + } + + if (!cmd.endsWith(QLatin1Char('$'))) + { + if (!cmd.endsWith(QLatin1String(";"))) + cmd+=QLatin1Char(';'); + } + + //replace all newlines with spaces, as maxima isn't sensitive about + //whitespaces, and without newlines the whole command + //is executed at once, without outputting an input + //prompt after each line + cmd.replace(QLatin1Char('\n'), QLatin1Char(' ')); + + //lisp-quiet doesn't print a prompt after the command + //is completed, which causes the parsing to hang. + //replace the command with the non-quiet version + cmd.replace(QRegExp(QLatin1String("^:lisp-quiet")), QLatin1String(":lisp")); + + return cmd; +} + +void MaximaExpression::forceDone() +{ + qDebug()<<"forcing Expression state to DONE"; + setResult(nullptr); + setStatus(Cantor::Expression::Done); +} + +/*! + example output for the simple expression '5+5': + latex mode - "\n(%o1) 10\n\\mbox{\\tt\\red(\\mathrm{\\%o1}) \\black}10\n(%i2) \n" + text mode - "\n(%o1) 10\n\n(%i2) \n" + */ +bool MaximaExpression::parseOutput(QString& out) +{ + const int promptStart = out.indexOf(QLatin1String("")); + const int promptEnd = out.indexOf(QLatin1String("")); + const QString prompt = out.mid(promptStart + 15, promptEnd - promptStart - 15).simplified(); + + //check whether the result is part of the promt - this is the case when additional input is required from the user + if (prompt.contains(QLatin1String(""))) + { + //text part of the output + const int textContentStart = prompt.indexOf(QLatin1String("")); + const int textContentEnd = prompt.indexOf(QLatin1String("")); + QString textContent = prompt.mid(textContentStart + 13, textContentEnd - textContentStart - 13).trimmed(); + + qDebug()<<"asking for additional input for " << textContent; + emit needsAdditionalInformation(textContent); + return true; + } + + qDebug()<<"new input label: " << prompt; + + QString errorContent; + + //parse the results + int resultStart = out.indexOf(QLatin1String("")); + if (resultStart != -1) + errorContent += out.mid(0, resultStart); + + while (resultStart != -1) + { + int resultEnd = out.indexOf(QLatin1String(""), resultStart + 15); + const QString resultContent = out.mid(resultStart + 15, resultEnd - resultStart - 15); + parseResult(resultContent); + + //search for the next openning tag after the current closing tag + resultStart = out.indexOf(QLatin1String(""), resultEnd + 16); + } + + //parse the error message, the part outside of the tags + int lastResultEnd = out.lastIndexOf(QLatin1String("")); + if (lastResultEnd != -1) + lastResultEnd += 16; + else + lastResultEnd = 0; + + errorContent += out.mid(lastResultEnd, promptStart - lastResultEnd).trimmed(); + if (errorContent.isEmpty()) + { + // For plots we set Done status in imageChanged + if (!m_isPlot || m_plotResult) + setStatus(Cantor::Expression::Done); + } + else + { + qDebug() << "error content: " << errorContent; + + if (out.contains(QLatin1String("cantor-value-separator"))) + { + //when fetching variables, in addition to the actual result with variable names and values, + //Maxima also writes out the names of the variables to the error buffer. + //we don't interpret this as an error. + setStatus(Cantor::Expression::Done); + } + else if(m_isHelpRequest || m_isHelpRequestAdditional) //help messages are also part of the error output + { + //we've got help result, but maybe additional input is required -> check this + const int index = MaximaSession::MaximaInputPrompt.indexIn(prompt.trimmed()); + if (index == -1) { + // No input label found in the prompt -> additional info is required + qDebug()<<"asking for additional input for the help request" << prompt; + m_isHelpRequestAdditional = true; + emit needsAdditionalInformation(prompt); + } + + //set the help result + errorContent.prepend(QLatin1Char(' ')); + Cantor::HelpResult* result = new Cantor::HelpResult(errorContent); + setResult(result); + + //if a new input prompt was found, no further input is expected and we're done + if (index != -1) { + m_isHelpRequestAdditional = false; + setStatus(Cantor::Expression::Done); + } + } + else + { + errorContent = errorContent.replace(QLatin1String("\n\n"), QLatin1String("
    ")); + errorContent = errorContent.replace(QLatin1String("\n"), QLatin1String("
    ")); + setErrorMessage(errorContent); + setStatus(Cantor::Expression::Error); + } + } + + return true; +} + +void MaximaExpression::parseResult(const QString& resultContent) +{ + //in case we asked for additional input for the help request, + //no need to process the result - we're not done yet and maxima is waiting for further input + if (m_isHelpRequestAdditional) + return; + + qDebug()<<"result content: " << resultContent; + + //text part of the output + const int textContentStart = resultContent.indexOf(QLatin1String("")); + const int textContentEnd = resultContent.indexOf(QLatin1String("")); + QString textContent = resultContent.mid(textContentStart + 13, textContentEnd - textContentStart - 13).trimmed(); + qDebug()<<"text content: " << textContent; + + //output label can be a part of the text content -> determine it + const QRegExp regex = QRegExp(MaximaSession::MaximaOutputPrompt.pattern()); + const int index = regex.indexIn(textContent); + QString outputLabel; + if (index != -1) // No match, so output don't contain output label + outputLabel = textContent.mid(index, regex.matchedLength()).trimmed(); + qDebug()<<"output label: " << outputLabel; + + //extract the expression id + bool ok; + QString idString = outputLabel.mid(3, outputLabel.length()-4); + int id = idString.toInt(&ok); + if (ok) + setId(id); + + qDebug()<<"expression id: " << this->id(); + + //remove the output label from the text content + textContent = textContent.remove(outputLabel).trimmed(); + + //determine the actual result + Cantor::Result* result = nullptr; + + const int latexContentStart = resultContent.indexOf(QLatin1String("")); + //Handle system maxima output for plotting commands + if (m_isPlot && textContent.endsWith(QString::fromLatin1("\"%1\"]").arg(m_tempFile->fileName()))) + { + m_plotResultIndex = results().size(); + // Gnuplot could generate plot before we parse text output from maxima and after + // If we already have plot result, just add it + // Else set info message, and replace it by real result in imageChanged function later + if (m_plotResult) + result = m_plotResult; + else + result = new Cantor::TextResult(i18n("Waiting for the plot result")); + } + else if (latexContentStart != -1) + { + //latex output is available + const int latexContentEnd = resultContent.indexOf(QLatin1String("")); + QString latexContent = resultContent.mid(latexContentStart + 14, latexContentEnd - latexContentStart - 14).trimmed(); + qDebug()<<"latex content: " << latexContent; + + Cantor::TextResult* textResult; + //replace the \mbox{} environment, if available, by the eqnarray environment + if (latexContent.indexOf(QLatin1String("\\mbox{")) != -1) + { + int i; + int pcount=0; + for(i = latexContent.indexOf(QLatin1String("\\mbox{"))+5; i < latexContent.size(); ++i) + { + if(latexContent[i]==QLatin1Char('{')) + pcount++; + else if(latexContent[i]==QLatin1Char('}')) + pcount--; + + if(pcount==0) + break; + } + + QString modifiedLatexContent = latexContent.mid(i+1); + if(modifiedLatexContent.trimmed().isEmpty()) + { + //empty content in the \mbox{} environment (e.g. for print() outputs), use the latex string outside of the \mbox{} environment + modifiedLatexContent = latexContent.left(latexContent.indexOf(QLatin1String("\\mbox{"))); + } + + modifiedLatexContent.prepend(QLatin1String("\\begin{eqnarray*}")); + modifiedLatexContent.append(QLatin1String("\\end{eqnarray*}")); + textResult = new Cantor::TextResult(modifiedLatexContent, textContent); + qDebug()<<"modified latex content: " << modifiedLatexContent; + } + else + { + //no \mbox{} available, use what we've got. + textResult = new Cantor::TextResult(latexContent, textContent); + } + + textResult->setFormat(Cantor::TextResult::LatexFormat); + result = textResult; + } + else + { + //no latex output is availabe, the actual result is part of the textContent string + result = new Cantor::TextResult(textContent); + } + + addResult(result); +} + +void MaximaExpression::parseError(const QString& out) +{ + m_errorBuffer.append(out); +} + +void MaximaExpression::addInformation(const QString& information) +{ + qDebug()<<"adding information"; + QString inf=information; + if(!inf.endsWith(QLatin1Char(';'))) + inf+=QLatin1Char(';'); + Cantor::Expression::addInformation(inf); + + dynamic_cast(session())->sendInputToProcess(inf+QLatin1Char('\n')); +} + +void MaximaExpression::imageChanged() +{ + if(m_tempFile->size()>0) + { +#ifdef WITH_EPS + m_plotResult = new Cantor::EpsResult( QUrl::fromLocalFile(m_tempFile->fileName()) ); +#else + m_plotResult = new Cantor::ImageResult( QUrl::fromLocalFile(m_tempFile->fileName()) ); +#endif + // Check, that we already parse maxima output for this plot, and if not, keep it up to this moment + // If it's true, replace text info result by real plot and set status as Done + if (m_plotResultIndex != -1) + { + replaceResult(m_plotResultIndex, m_plotResult); + setStatus(Cantor::Expression::Done); + } + } +} diff --git a/src/backends/maxima/maximaexpression.h b/src/backends/maxima/maximaexpression.h new file mode 100644 index 0000000..b33b792 --- /dev/null +++ b/src/backends/maxima/maximaexpression.h @@ -0,0 +1,72 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#ifndef _MAXIMAEXPRESSION_H +#define _MAXIMAEXPRESSION_H + +#include "expression.h" +#include +#include + +class QTemporaryFile; + +class MaximaExpression : public Cantor::Expression +{ + Q_OBJECT + +public: + explicit MaximaExpression(Cantor::Session*, bool internal = false); + ~MaximaExpression() override; + + void evaluate() override; + void interrupt() override; + + //returns the command that should be send to + //the Maxima process, it's different from the + //command() for example to allow plot embedding + QString internalCommand(); + + //Forces the status of this Expression to done + void forceDone(); + + //reads from @param out until a prompt indicates that a new expression has started + bool parseOutput(QString&); + void parseError(const QString&); + + void addInformation(const QString&) override; + +private Q_SLOTS: + void imageChanged(); + +private: + void parseResult(const QString&); + + QTemporaryFile *m_tempFile; + QFileSystemWatcher m_fileWatch; + bool m_isHelpRequest; + bool m_isHelpRequestAdditional; + bool m_isPlot; + Cantor::Result* m_plotResult; + int m_plotResultIndex; + QString m_errorBuffer; + bool m_gotErrorContent; +}; + +#endif /* _MAXIMAEXPRESSION_H */ diff --git a/src/backends/maxima/maximaextensions.cpp b/src/backends/maxima/maximaextensions.cpp new file mode 100644 index 0000000..55a8e87 --- /dev/null +++ b/src/backends/maxima/maximaextensions.cpp @@ -0,0 +1,219 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#include "maximaextensions.h" +#include +#include + +#define MAXIMA_EXTENSION_CONSTRUCTORS(name) Maxima##name##Extension::Maxima##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Maxima##name##Extension::~Maxima##name##Extension() {} + +//History Extension +MAXIMA_EXTENSION_CONSTRUCTORS(History) + +QString MaximaHistoryExtension::lastResult() +{ + return QLatin1String("%"); +} + +//Script +MAXIMA_EXTENSION_CONSTRUCTORS(Script) + +QString MaximaScriptExtension::runExternalScript(const QString& file) +{ + return QString::fromLatin1("batch(\"%1\")$").arg(file); +} + +QString MaximaScriptExtension::scriptFileFilter() +{ + return i18n("Maxima batch file (*.mac)"); +} + +QString MaximaScriptExtension::highlightingMode() +{ + return QLatin1String("maxima"); +} + +QString MaximaScriptExtension::commentStartingSequence() +{ + return QLatin1String("/* "); +} + +QString MaximaScriptExtension::commentEndingSequence() +{ + return QLatin1String(" */"); +} + +//CAS Extension +MAXIMA_EXTENSION_CONSTRUCTORS(CAS) + +QString MaximaCASExtension::solve(const QStringList& equations, const QStringList& variables) +{ + QString eqstr=QString::fromLatin1("[%1]").arg(equations.join(QLatin1String(","))); + + QString variablestr=QString::fromLatin1("[%1]").arg(variables.join(QLatin1String(","))); + + return QString::fromLatin1("solve(%1,%2);").arg(eqstr, variablestr); +} + +QString MaximaCASExtension::simplify(const QString& expression) +{ + return QString::fromLatin1("simplify(%1);").arg(expression); +} + +QString MaximaCASExtension::expand(const QString& expression) +{ + return QString::fromLatin1("expand(%1);").arg(expression); +} + +//Calculus Extension +MAXIMA_EXTENSION_CONSTRUCTORS(Calculus) + +QString MaximaCalculusExtension::limit(const QString& expression, const QString& variable, const QString& limit) +{ + return QString::fromLatin1("limit(%1, %2=%3);").arg(expression, variable, limit); +} + +QString MaximaCalculusExtension::differentiate(const QString& function,const QString& variable, int times) +{ + return QString::fromLatin1("diff(%1, %2, %3);").arg(function, variable, QString::number(times)); +} + +QString MaximaCalculusExtension::integrate(const QString& function, const QString& variable) +{ + return QString::fromLatin1("integrate(%1, %2);").arg(function, variable); +} + +QString MaximaCalculusExtension::integrate(const QString& function,const QString& variable, const QString& left, const QString& right) +{ + return QString::fromLatin1("integrate(%1, %2, %3, %4);").arg(function, variable, left, right); +} + +//Linear Algebra Extension +MAXIMA_EXTENSION_CONSTRUCTORS(LinearAlgebra) + +//Commands to create Vectors/Matrices +QString MaximaLinearAlgebraExtension::createVector(const QStringList& entries, VectorType type) +{ + QString list=entries.join(QLatin1String(",")); + + if(type==Cantor::LinearAlgebraExtension::ColumnVector) + return QString::fromLatin1("columnvector([%1]);").arg(list); + else + return QString::fromLatin1("rowvector([%1]);").arg(list); +} + +QString MaximaLinearAlgebraExtension::createMatrix(const Matrix& matrix) +{ + QString cmd=QLatin1String("matrix("); + for (const QStringList& row : matrix) + { + cmd+=QLatin1Char('['); + for (const QString& entry : row) + cmd+=entry+QLatin1Char(','); + cmd.chop(1); + cmd+=QLatin1String("],"); + } + cmd.chop(1); + cmd+=QLatin1String(");"); + + return cmd; +} + +QString MaximaLinearAlgebraExtension::identityMatrix(int size) +{ + return QString::fromLatin1("ident(%1);").arg(size); +} + +//basic functions +QString MaximaLinearAlgebraExtension::rank(const QString& matrix) +{ + return QString::fromLatin1("rank(%1);").arg(matrix); +} + +QString MaximaLinearAlgebraExtension::invertMatrix(const QString& matrix) +{ + return QString::fromLatin1("invert(%1);").arg(matrix); +} + +QString MaximaLinearAlgebraExtension::charPoly(const QString& matrix) +{ + return QString::fromLatin1("charpoly(%1,x);").arg(matrix); +} + +QString MaximaLinearAlgebraExtension::eigenVectors(const QString& matrix) +{ + return QString::fromLatin1("eigenvectors(%1);").arg(matrix); +} + +QString MaximaLinearAlgebraExtension::eigenValues(const QString& matrix) +{ + return QString::fromLatin1("eigenvalues(%1);").arg(matrix); +} + +//Plotting +MAXIMA_EXTENSION_CONSTRUCTORS(Plot) + +QString MaximaPlotExtension::plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) +{ + return QString::fromLatin1("plot2d(%1,[%2,%3,%4])").arg(function, variable, left, right); +} + +QString MaximaPlotExtension::plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) +{ + const Interval& int1=var1.second; + const Interval& int2=var2.second; + return QString::fromLatin1("plot3d(%1,[%2,%3,%4],[%6,%7,%8])").arg(function, + var1.first, int1.first, int1.second, + var2.first, int2.first, int2.second); +} + +//Variable Management +MAXIMA_EXTENSION_CONSTRUCTORS(VariableManagement) + +QString MaximaVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + return QString::fromLatin1("%1: %2").arg(name).arg(value); +} + +QString MaximaVariableManagementExtension::setValue(const QString& name,const QString& value) +{ + return QString::fromLatin1("%1: %2").arg(name).arg(value); +} + +QString MaximaVariableManagementExtension::removeVariable(const QString& name) +{ + return QString::fromLatin1("kill(%1)").arg(name); +} + +QString MaximaVariableManagementExtension::saveVariables(const QString& fileName) +{ + return QString::fromLatin1("save(\"%1\", values,functions)").arg(fileName); +} + +QString MaximaVariableManagementExtension::loadVariables(const QString& fileName) +{ + return QString::fromLatin1("load(\"%1\")").arg(fileName); +} + +QString MaximaVariableManagementExtension::clearVariables() +{ + return QLatin1String("kill(all)"); +} diff --git a/src/backends/maxima/maximaextensions.h b/src/backends/maxima/maximaextensions.h new file mode 100644 index 0000000..434c14c --- /dev/null +++ b/src/backends/maxima/maximaextensions.h @@ -0,0 +1,125 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#ifndef _MAXIMAEXTENSIONS_H +#define _MAXIMAEXTENSIONS_H + +#include "extension.h" + +class MaximaHistoryExtension : public Cantor::HistoryExtension +{ + public: + explicit MaximaHistoryExtension( QObject* parent ); + ~MaximaHistoryExtension() override; + public Q_SLOTS: + QString lastResult() override; +}; + +class MaximaScriptExtension : public Cantor::ScriptExtension +{ + public: + explicit MaximaScriptExtension(QObject* parent); + ~MaximaScriptExtension() override; + public Q_SLOTS: + QString runExternalScript(const QString& file) override; + QString scriptFileFilter() override; + QString highlightingMode() override; + QString commentStartingSequence() override; + QString commentEndingSequence() override; +}; + + +class MaximaCASExtension : public Cantor::CASExtension +{ + public: + explicit MaximaCASExtension( QObject* parent); + ~MaximaCASExtension() override; + + public Q_SLOTS: + QString solve(const QStringList& equations, const QStringList& variables) override; + QString simplify(const QString& expression) override; + QString expand(const QString& expression) override; + +}; + +class MaximaCalculusExtension : public Cantor::CalculusExtension +{ + public: + explicit MaximaCalculusExtension( QObject* parent); + ~MaximaCalculusExtension() override; + + public Q_SLOTS: + QString limit(const QString& expression, const QString& variable, const QString& limit) override; + QString differentiate(const QString& function,const QString& variable, int times) override; + QString integrate(const QString& function, const QString& variable) override; + QString integrate(const QString& function,const QString& variable, const QString& left, const QString& right) override; +}; + +/** An extension for basic Linear Algebra + **/ +class MaximaLinearAlgebraExtension : public Cantor::LinearAlgebraExtension +{ + public: + explicit MaximaLinearAlgebraExtension(QObject* parent); + ~MaximaLinearAlgebraExtension() override; + + public Q_SLOTS: + //Commands to create Vectors/Matrices + QString createVector(const QStringList& entries, VectorType type) override; + QString createMatrix(const Matrix& matrix) override; + QString identityMatrix(int size) override; + + //basic functions + QString rank(const QString& matrix) override; + QString invertMatrix(const QString& matrix) override; + QString charPoly(const QString& matrix) override; + QString eigenVectors(const QString& matrix) override; + QString eigenValues(const QString& matrix) override; + +}; + +class MaximaPlotExtension : public Cantor::PlotExtension +{ + public: + explicit MaximaPlotExtension(QObject* parent); + ~MaximaPlotExtension() override; + public Q_SLOTS: + QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) override; + QString plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) override; +}; + +class MaximaVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + explicit MaximaVariableManagementExtension( QObject* parent ); + ~MaximaVariableManagementExtension() override; + + public Q_SLOTS: + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name,const QString& value) override; + QString removeVariable(const QString& name) override; + + QString saveVariables(const QString& fileName) override; + QString loadVariables(const QString& fileName) override; + QString clearVariables() override; +}; + + +#endif /* _MAXIMAEXTENSIONS_H */ diff --git a/src/backends/maxima/maximahighlighter.cpp b/src/backends/maxima/maximahighlighter.cpp new file mode 100644 index 0000000..87d51ea --- /dev/null +++ b/src/backends/maxima/maximahighlighter.cpp @@ -0,0 +1,147 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#include "maximahighlighter.h" +#include "maximakeywords.h" +#include "maximasession.h" +#include "maximavariablemodel.h" + +MaximaHighlighter::MaximaHighlighter(QObject* parent, MaximaSession* session) : Cantor::DefaultHighlighter(parent) +{ + //addRule(QRegExp("\\b[A-Za-z0-9_]+(?=\\()"), functionFormat()); + + //Code highlighting the different keywords + addKeywords(MaximaKeywords::instance()->keywords()); + + addRule(QLatin1String("FIXME"), commentFormat()); + addRule(QLatin1String("TODO"), commentFormat()); + + addFunctions(MaximaKeywords::instance()->functions()); + addVariables(MaximaKeywords::instance()->variables()); + + //addRule(QRegExp("\".*\""), stringFormat()); + //addRule(QRegExp("'.*'"), stringFormat()); + + commentStartExpression = QRegExp(QLatin1String("/\\*")); + commentEndExpression = QRegExp(QLatin1String("\\*/")); + + connect(session->variableModel(), SIGNAL(variablesAdded(QStringList)), this, SLOT(addUserVariables(QStringList))); + connect(session->variableModel(), SIGNAL(variablesRemoved(QStringList)), this, SLOT(removeUserVariables(QStringList))); + connect(session->variableModel(), SIGNAL(functionsAdded(QStringList)), this, SLOT(addUserFunctions(QStringList))); + connect(session->variableModel(), SIGNAL(functionsRemoved(QStringList)), this, SLOT(removeUserFunctions(QStringList))); + + MaximaVariableModel* model=static_cast(session->variableModel()); + addUserVariables(model->variableNames()); + addUserFunctions(model->functionNames()); +} + +void MaximaHighlighter::highlightBlock(const QString& text) +{ + if (skipHighlighting(text)) + return; + + //Do some backend independent highlighting (brackets etc.) + DefaultHighlighter::highlightBlock(text); + + setCurrentBlockState(-1); + + int commentLevel = 0; + bool inString = false; + int startIndex = -1; + + if (previousBlockState() > 0) { + commentLevel = previousBlockState(); + startIndex = 0; + } else if (previousBlockState() < -1) { + inString = true; + startIndex = 0; + } + + for (int i = 0; i < text.size(); ++i) { + if (text[i] == QLatin1Char('\\')) { + ++i; // skip the next character + } else if (text[i] == QLatin1Char('"') && commentLevel == 0) { + if (!inString) + startIndex = i; + else + setFormat(startIndex, i - startIndex + 1, stringFormat()); + inString = !inString; + } else if (text.mid(i,2) == QLatin1String("/*") && !inString) { + if (commentLevel == 0) + startIndex = i; + ++commentLevel; + ++i; + } else if (text.mid(i,2) == QLatin1String("*/") && !inString) { + if (commentLevel == 0) { + setFormat(i, 2, errorFormat()); + // undo the --commentLevel below, so we stay at 0 + ++commentLevel; + } else if (commentLevel == 1) { + setFormat(startIndex, i - startIndex + 2, commentFormat()); + } + ++i; + --commentLevel; + } + } + + if (inString) { + setCurrentBlockState(-2); + setFormat(startIndex, text.size() - startIndex, stringFormat()); + } else if (commentLevel > 0) { + setCurrentBlockState(commentLevel); + setFormat(startIndex, text.size() - startIndex, commentFormat()); + } +} + +void MaximaHighlighter::addUserVariables(const QStringList variables) +{ + addVariables(variables); +} + +void MaximaHighlighter::removeUserVariables(const QStringList variables) +{ + for (const QString& var : variables) + removeRule(var); +} + +void MaximaHighlighter::addUserFunctions(const QStringList functions) +{ + //remove the trailing (x) + for (const QString& func : functions) + { + int idx=func.lastIndexOf(QLatin1Char('(')); + addRule(func.left(idx), functionFormat()); + } +} + +void MaximaHighlighter::removeUserFunctions(const QStringList functions) +{ + //remove the trailing (x) + for (const QString& func : functions) + { + int idx=func.lastIndexOf(QLatin1Char('(')); + removeRule(func.left(idx)); + } +} + +QString MaximaHighlighter::nonSeparatingCharacters() const +{ + return QLatin1String("%"); +} diff --git a/src/backends/maxima/maximahighlighter.h b/src/backends/maxima/maximahighlighter.h new file mode 100644 index 0000000..27d573d --- /dev/null +++ b/src/backends/maxima/maximahighlighter.h @@ -0,0 +1,50 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _MAXIMAHIGHLIGHTER_H +#define _MAXIMAHIGHLIGHTER_H + +#include "defaulthighlighter.h" +class MaximaSession; + +class MaximaHighlighter : public Cantor::DefaultHighlighter +{ + Q_OBJECT + public: + MaximaHighlighter( QObject* parent, MaximaSession* session); + ~MaximaHighlighter() override = default; + + protected: + void highlightBlock(const QString &text) override; + + QString nonSeparatingCharacters() const override; + private Q_SLOTS: + void addUserVariables(const QStringList variables); + void removeUserVariables(const QStringList variables); + + void addUserFunctions(const QStringList functions); + void removeUserFunctions(const QStringList functions); + + private: + QRegExp commentStartExpression; + QRegExp commentEndExpression; +}; + +#endif /* _MAXIMAHIGHLIGHTER_H */ diff --git a/src/backends/maxima/maximakeywords.cpp b/src/backends/maxima/maximakeywords.cpp new file mode 100644 index 0000000..b8d09a3 --- /dev/null +++ b/src/backends/maxima/maximakeywords.cpp @@ -0,0 +1,76 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "maximakeywords.h" + +#include + +#include +#include + +MaximaKeywords* MaximaKeywords::instance() +{ + static MaximaKeywords* inst=nullptr; + if(inst==nullptr) + { + inst=new MaximaKeywords(); + inst->loadKeywords(); + } + + return inst; +} + +void MaximaKeywords::loadKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Maxima")); + m_keywords = definition.keywordList(QLatin1String("MaximaKeyword")); + m_functions = definition.keywordList(QLatin1String("MaximaFunction")); + m_variables = definition.keywordList(QLatin1String("MaximaVariable")); + + // This is missing in KSyntaxHighlighting. + // TODO: send upstream pull request with this + m_variables << QLatin1String("%pi") << QLatin1String("%e") << QLatin1String(" %i") + << QLatin1String("%gamma") << QLatin1String("ind") << QLatin1String("inf") + << QLatin1String("infinity") << QLatin1String("minf") << QLatin1String("%phi") + << QLatin1String("und") << QLatin1String("zeroa") << QLatin1String("zerob"); + + m_functions << QLatin1String("celine"); + + // We use qBinarySearch with this lists + qSort(m_keywords); + qSort(m_functions); + qSort(m_variables); +} + +const QStringList& MaximaKeywords::variables() const +{ + return m_variables; +} + +const QStringList& MaximaKeywords::functions() const +{ + return m_functions; +} + +const QStringList& MaximaKeywords::keywords() const +{ + return m_keywords; +} diff --git a/src/backends/maxima/maximakeywords.h b/src/backends/maxima/maximakeywords.h new file mode 100644 index 0000000..398e3d4 --- /dev/null +++ b/src/backends/maxima/maximakeywords.h @@ -0,0 +1,50 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _MAXIMAKEYWORDS_H +#define _MAXIMAKEYWORDS_H + +#include + +/* + Class storing a list of names, known to maxima + used for syntax highlighting and tab completion + */ +class MaximaKeywords +{ + private: + MaximaKeywords() = default; + ~MaximaKeywords() = default; + public: + static MaximaKeywords* instance(); + + const QStringList& functions() const; + const QStringList& keywords() const; + const QStringList& variables() const; + + private: + void loadKeywords(); + + private: + QStringList m_functions; + QStringList m_keywords; + QStringList m_variables; +}; +#endif /* _MAXIMAKEYWORDS_H */ diff --git a/src/backends/maxima/maximasession.cpp b/src/backends/maxima/maximasession.cpp new file mode 100644 index 0000000..3cb1928 --- /dev/null +++ b/src/backends/maxima/maximasession.cpp @@ -0,0 +1,350 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + Copyright (C) 2017-2018 Alexander Semke (alexander.semke@web.de) + */ + +#include "maximasession.h" +#include "maximaexpression.h" +#include "maximacompletionobject.h" +#include "maximasyntaxhelpobject.h" +#include "maximahighlighter.h" +#include "maximavariablemodel.h" +#include "result.h" +#include "settings.h" + +#include +#include +#include + +#include +#include + +#ifndef Q_OS_WIN +#include +#endif + + +//NOTE: the \\s in the expressions is needed, because Maxima seems to sometimes insert newlines/spaces between the letters +//maybe this is caused by some behaviour if the Prompt is split into multiple "readStdout" calls +//the Expressions are encapsulated in () to allow capturing for the text +const QRegExp MaximaSession::MaximaOutputPrompt=QRegExp(QLatin1String("(\\(\\s*%\\s*o\\s*[0-9\\s]*\\))")); //Text, maxima outputs, before any output +const QRegExp MaximaSession::MaximaInputPrompt = QRegExp(QLatin1String("(\\(\\s*%\\s*i\\s*[0-9\\s]*\\))")); + + +MaximaSession::MaximaSession( Cantor::Backend* backend ) : Session(backend), + m_process(nullptr), + m_variableModel(new MaximaVariableModel(this)), + m_justRestarted(false) +{ +} + +void MaximaSession::login() +{ + qDebug()<<"login"; + + if (m_process) + return; //TODO: why do we call login() again?!? + + emit loginStarted(); + QStringList arguments; + arguments << QLatin1String("--quiet"); //Suppress Maxima start-up message + const QString initFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("cantor/maximabackend/cantor-initmaxima.lisp")); + arguments << QLatin1String("--init-lisp=") + initFile; //Set the name of the Lisp initialization file + + m_process = new QProcess(this); + m_process->start(MaximaSettings::self()->path().toLocalFile(), arguments); + m_process->waitForStarted(); + + QString input; + // Wait until first maxima prompt + while (!input.contains(QLatin1String(""))) + { + m_process->waitForReadyRead(); + input += QString::fromLatin1(m_process->readAllStandardOutput()); + qDebug() << input; + } + + connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(restartMaxima())); + connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readStdOut())); + connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readStdErr())); + connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(reportProcessError(QProcess::ProcessError))); + + if(!MaximaSettings::self()->autorunScripts().isEmpty()){ + QString autorunScripts = MaximaSettings::self()->autorunScripts().join(QLatin1String(";")); + autorunScripts.append(QLatin1String(";kill(labels)")); // Reset labels after running autorun scripts + evaluateExpression(autorunScripts, MaximaExpression::DeleteOnFinish, true); + } + + changeStatus(Session::Done); + emit loginDone(); + qDebug()<<"login done"; +} + +void MaximaSession::logout() +{ + qDebug()<<"logout"; + + if(!m_process) + return; + + disconnect(m_process, nullptr, this, nullptr); + +// if(status()==Cantor::Session::Running) + //TODO: terminate the running expressions first + + write(QLatin1String("quit();\n")); + qDebug()<<"waiting for maxima to finish"; + m_process->waitForFinished(); + qDebug()<<"maxima exit finished"; + + if(m_process->state() != QProcess::NotRunning) + { + m_process->kill(); + qDebug()<<"maxima still running, process kill enforced"; + } + + expressionQueue().clear(); + delete m_process; + m_process = nullptr; + m_variableModel->clear(); + + changeStatus(Status::Disable); + + qDebug()<<"logout done"; +} + +Cantor::Expression* MaximaSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + qDebug() << "evaluating: " << cmd; + MaximaExpression* expr = new MaximaExpression(this, internal); + expr->setFinishingBehavior(behave); + expr->setCommand(cmd); + expr->evaluate(); + + return expr; +} + +void MaximaSession::readStdErr() +{ + qDebug()<<"reading stdErr"; + if (!m_process) + return; + QString out=QLatin1String(m_process->readAllStandardError()); + + if(expressionQueue().size()>0) + { + MaximaExpression* expr = static_cast(expressionQueue().first()); + expr->parseError(out); + } +} + +void MaximaSession::readStdOut() +{ + QString out = QLatin1String(m_process->readAllStandardOutput()); + m_cache += out; + + //collect the multi-line output until Maxima has finished the calculation and returns a new promt + if ( !out.contains(QLatin1String("")) ) + return; + + if(expressionQueue().isEmpty()) + { + //queue is empty, interrupt was called, nothing to do here + qDebug()<(expressionQueue().first()); + if (!expr) + return; //should never happen + + qDebug()<<"output: " << m_cache; + expr->parseOutput(m_cache); + m_cache.clear(); +} + +void MaximaSession::reportProcessError(QProcess::ProcessError e) +{ + qDebug()<<"process error"<command())&&!exp2.exactMatch(expression->command())) + { + m_variableModel->checkForNewFunctions(); + m_variableModel->checkForNewVariables(); + }else + { + changeStatus(Cantor::Session::Done); + } + + }else + { + runFirstExpression(); + } + } +} + +void MaximaSession::runFirstExpression() +{ + qDebug()<<"running next expression"; + if (!m_process) + return; + + if(!expressionQueue().isEmpty()) + { + MaximaExpression* expr = static_cast(expressionQueue().first()); + QString command=expr->internalCommand(); + connect(expr, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(currentExpressionChangedStatus(Cantor::Expression::Status))); + + expr->setStatus(Cantor::Expression::Computing); + if(command.isEmpty()) + { + qDebug()<<"empty command"; + expr->forceDone(); + } + else + { + m_cache.clear(); + write(command + QLatin1Char('\n')); + } + } +} + +void MaximaSession::interrupt() +{ + if(!expressionQueue().isEmpty()) + { + qDebug()<<"interrupting " << expressionQueue().first()->command(); + if(m_process->state() != QProcess::NotRunning) + { +#ifndef Q_OS_WIN + const int pid=m_process->pid(); + kill(pid, SIGINT); +#else + ; //TODO: interrupt the process on windows +#endif + } + expressionQueue().first()->interrupt(); + expressionQueue().removeFirst(); + foreach (Cantor::Expression* expression, expressionQueue()) + expression->setStatus(Cantor::Expression::Done); + expressionQueue().clear(); + + qDebug()<<"done interrupting"; + } + + changeStatus(Cantor::Session::Done); + m_cache.clear(); +} + +void MaximaSession::sendInputToProcess(const QString& input) +{ + write(input); +} + +void MaximaSession::restartMaxima() +{ + qDebug()<<"restarting maxima cooldown: "<write(exp.toUtf8()); +} diff --git a/src/backends/maxima/maximasession.h b/src/backends/maxima/maximasession.h new file mode 100644 index 0000000..612f6fa --- /dev/null +++ b/src/backends/maxima/maximasession.h @@ -0,0 +1,75 @@ +/* + Tims 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#ifndef _MAXIMASESSION_H +#define _MAXIMASESSION_H + +#include "session.h" +#include "expression.h" +#include + +class MaximaExpression; +class MaximaVariableModel; + +class MaximaSession : public Cantor::Session +{ + Q_OBJECT + public: + static const QRegExp MaximaOutputPrompt; + static const QRegExp MaximaInputPrompt; + + explicit MaximaSession( Cantor::Backend* backend); + + void login() override; + void logout() override; + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + + void interrupt() override; + void sendInputToProcess(const QString&); + + void setTypesettingEnabled(bool) override; + + Cantor::CompletionObject* completionFor(const QString& command, int index=-1) override; + Cantor::SyntaxHelpObject* syntaxHelpFor(const QString& command) override; + QSyntaxHighlighter* syntaxHighlighter(QObject*) override; + QAbstractItemModel* variableModel() override; + void runFirstExpression() override; + + public Q_SLOTS: + void readStdOut(); + void readStdErr(); + + private Q_SLOTS: + void currentExpressionChangedStatus(Cantor::Expression::Status); + void restartMaxima(); + void restartsCooledDown(); + void reportProcessError(QProcess::ProcessError); + + private: + void write(const QString&); + + QProcess* m_process; + QString m_cache; + MaximaVariableModel* m_variableModel; + bool m_justRestarted; +}; + +#endif /* _MAXIMASESSION_H */ diff --git a/src/backends/maxima/maximasyntaxhelpobject.cpp b/src/backends/maxima/maximasyntaxhelpobject.cpp new file mode 100644 index 0000000..f9b6c83 --- /dev/null +++ b/src/backends/maxima/maximasyntaxhelpobject.cpp @@ -0,0 +1,118 @@ +/* + 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. + + --- + Copyright (C) 2009-2012 Alexander Rieder + */ + +#include "maximasyntaxhelpobject.h" +#include "maximakeywords.h" + +#include "maximasession.h" +#include "maximaexpression.h" + +#include "result.h" + +#include + +MaximaSyntaxHelpObject::MaximaSyntaxHelpObject(const QString& cmd, MaximaSession* session) : Cantor::SyntaxHelpObject(cmd, session) +{ + m_expression=nullptr; +} + +void MaximaSyntaxHelpObject::fetchInformation() +{ + bool isValid=false; + for (const QString& func : MaximaKeywords::instance()->functions()) + { + if(command()==func) + { + isValid=true; + break; + } + } + + if(isValid) + { + if (session()->status() != Cantor::Session::Disable) + { + if (m_expression) + return; + + //use the lisp command, instead of directly calling the + //maxima function "describe" to avoid generating a new + //output label that would mess up history + QString cmd=QLatin1String(":lisp(cl-info::info-exact \"%1\")"); + + m_expression=session()->evaluateExpression(cmd.arg(command()), Cantor::Expression::FinishingBehavior::DoNotDelete, true); + + connect(m_expression, &Cantor::Expression::statusChanged, this, &MaximaSyntaxHelpObject::expressionChangedStatus); + } + else + // We can't get function's detailed description, because session not login yet, so do nothing + emit done(); + + }else + { + qDebug()<<"invalid syntax request"; + emit done(); + } +} + +void MaximaSyntaxHelpObject::expressionChangedStatus(Cantor::Expression::Status status) +{ + switch(status) + { + case Cantor::Expression::Done: + { + qDebug()<<"expr done"; + QString text=m_expression->result()->toHtml(); + QStringList lines=text.split(QLatin1Char('\n')); + + QString syntax; + for (QString line : lines) + { + if(line.endsWith(QLatin1Char('\r'))) + line.chop(1); + if(line.startsWith(QLatin1String("-- Function:"))) + { + line.remove(QLatin1String("-- Function:")); + line.remove(QLatin1String("
    ")); + } + syntax+=line; + qDebug() << "line: " << line; + } + + setHtml(QLatin1String("

    ")+syntax+QLatin1String("

    ")); + emit done(); + + m_expression->deleteLater(); + m_expression=nullptr; + break; + } + case Cantor::Expression::Error: + { + qWarning() << "syntax object error" << m_expression->result()->toHtml(); + emit done(); + + m_expression->deleteLater(); + m_expression=nullptr; + break; + } + default: + break; + } +} diff --git a/src/backends/maxima/maximasyntaxhelpobject.h b/src/backends/maxima/maximasyntaxhelpobject.h new file mode 100644 index 0000000..ce0151e --- /dev/null +++ b/src/backends/maxima/maximasyntaxhelpobject.h @@ -0,0 +1,46 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _MAXIMASYNTAXHELPOBJECT_H +#define _MAXIMASYNTAXHELPOBJECT_H + +#include "syntaxhelpobject.h" + +#include "expression.h" + +class MaximaSession; + +class MaximaSyntaxHelpObject : public Cantor::SyntaxHelpObject +{ + Q_OBJECT + public: + MaximaSyntaxHelpObject( const QString& command, MaximaSession* session ); + ~MaximaSyntaxHelpObject() override = default; + + protected Q_SLOTS: + void fetchInformation() override; + private Q_SLOTS: + void expressionChangedStatus(Cantor::Expression::Status status); + + private: + Cantor::Expression* m_expression; +}; + +#endif /* _MAXIMASYNTAXHELPOBJECT_H */ diff --git a/src/backends/maxima/maximavariablemodel.cpp b/src/backends/maxima/maximavariablemodel.cpp new file mode 100644 index 0000000..3dae7a1 --- /dev/null +++ b/src/backends/maxima/maximavariablemodel.cpp @@ -0,0 +1,278 @@ +/* + 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. + + --- + Copyright (C) 2012 Alexander Rieder + */ + +#include "maximavariablemodel.h" + +#include "maximasession.h" +#include "maximaexpression.h" +#include "textresult.h" +#include "latexresult.h" + +#include +#include + +//command used to inspect a maxima variable. %1 is the name of that variable +const QString MaximaVariableModel::inspectCommand=QLatin1String(":lisp($disp $%1)"); +const QString MaximaVariableModel::variableInspectCommand=QLatin1String(":lisp(cantor-inspect $%1)"); + +MaximaVariableModel::MaximaVariableModel( MaximaSession* session) : Cantor::DefaultVariableModel(session) +{ + +} + +void MaximaVariableModel::clear() +{ + emit functionsRemoved(functionNames()); + emit variablesRemoved(variableNames()); + m_functions.clear(); + m_variables.clear(); + DefaultVariableModel::clearVariables(); +} + +void MaximaVariableModel::checkForNewVariables() +{ + qDebug()<<"checking for new variables"; + const QString& cmd=variableInspectCommand.arg(QLatin1String("values")); + Cantor::Expression* expr=session()->evaluateExpression(cmd, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(expr, &Cantor::Expression::statusChanged, this, &MaximaVariableModel::parseNewVariables); +} + +void MaximaVariableModel::checkForNewFunctions() +{ + qDebug()<<"checking for new functions"; + const QString& cmd=inspectCommand.arg(QLatin1String("functions")); + Cantor::Expression* expr=session()->evaluateExpression(cmd, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + + connect(expr, &Cantor::Expression::statusChanged, this, &MaximaVariableModel::parseNewFunctions); +} + +QList parse(MaximaExpression* expr) +{ + if(!expr || expr->status()!=Cantor::Expression::Done || expr->results().isEmpty()) { + return QList(); + } + + //for parsing of names and values below (old code) we need to combine multiple results back to one string + QString text; + for (auto* result : expr->results()) + { + if(result->type()==Cantor::TextResult::Type) + text += dynamic_cast(result)->plain(); + else if(expr->result()->type()==Cantor::LatexResult::Type) + text += dynamic_cast(result)->plain(); + } + + const int nameIndex=text.indexOf(QLatin1Char(']')); + QString namesString=text.left(nameIndex); + //namesString.chop(1); + namesString=namesString.mid(1); + namesString=namesString.trimmed(); + + qDebug()<<"variable names: "<(); + + QStringList variableNames; + QString valuesString; + bool hasValues = false; + QStringList variableValues; + if ( namesString.contains(QLatin1Char(')')) ) + { + //function definition(s): e.g + //text = "[f1(x),f2(x,y),f3(x,y,z)]\n$DONE" + //nameString = f1(x),f2(x,y),f3(x,y,z) + //variableString = "\n$DONE" + variableNames = namesString.split(QLatin1String("),")); + } + else + { + //variable definition(s): e.g. + //text = "[a,b]\n1\n\"-cantor-value-separator-\"\n2\n\"-cantor-value-separator-\"\n($A $B)" + //nameString = "[a,b]" + //variableString = "\n1\n\"-cantor-value-separator-\"\n2\n\"-cantor-value-separator-\"\n($A $B)" + variableNames = namesString.split(QLatin1Char(',')); + valuesString = text.mid(nameIndex+1).trimmed(); + valuesString = valuesString.remove(QLatin1String("\n")); //lists with many elements have line breaks, remove them + variableValues = valuesString.split(QLatin1String("\"-cantor-value-separator-\"")); + hasValues = variableValues.isEmpty(); + } + + qDebug()< variables; + variables.reserve(variableNames.size()); + for(int i=0;ii) + { + var.value=variableValues.at(i).trimmed(); + var.value=var.value.remove(QLatin1String("\n")); //lists with many elements have line breaks, remove them + } + else + var.value=QLatin1String("unknown"); + + variables<(sender()); + + QList newVars=parse(expr); + QStringList addedVars; + QStringList removedVars; + //remove the old variables + for (const Variable& var : m_variables) + { + //check if this var is present in the new variables + bool found=false; + for (const Variable& var2 : newVars) + { + if(var.name==var2.name) + { + found=true; + break; + } + } + + if(!found) + { + removeVariable(var); + removedVars<deleteLater(); + + emit variablesAdded(addedVars); + emit variablesRemoved(removedVars); +} + +void MaximaVariableModel::parseNewFunctions(Cantor::Expression::Status status) +{ + if (status != Cantor::Expression::Done && status != Cantor::Expression::Error) + return; + + qDebug()<<"parsing functions"; + MaximaExpression* expr=dynamic_cast(sender()); + + QList newVars=parse(expr); + QStringList addedVars; + QStringList removedVars; + + //remove the old variables + for (const Variable& var : m_functions) + { + //check if this var is present in the new variables + bool found=false; + for (const Variable& var2 : newVars) + { + if(var.name==var2.name) + { + found=true; + break; + } + } + + if(!found) + { + removeVariable(var); + removedVars<deleteLater(); + + emit functionsAdded(addedVars); + emit functionsRemoved(removedVars); +} + +MaximaSession* MaximaVariableModel::maximaSession() +{ + return static_cast (session()); +} + +QList MaximaVariableModel::variables() +{ + return m_variables; +} + +QList MaximaVariableModel::functions() +{ + return m_functions; +} + +QStringList MaximaVariableModel::variableNames() +{ + QStringList names; + for (const Cantor::DefaultVariableModel::Variable& var : m_variables) + names< + */ + +#ifndef _MAXIMAVARIABLEMODEL_H +#define _MAXIMAVARIABLEMODEL_H + +#include "defaultvariablemodel.h" +#include + +class MaximaSession; + +class MaximaVariableModel : public Cantor::DefaultVariableModel +{ + Q_OBJECT + public: + static const QString inspectCommand; + static const QString variableInspectCommand; + + explicit MaximaVariableModel( MaximaSession* session); + ~MaximaVariableModel() override = default; + + void clear(); + + QList variables(); + QList functions(); + + QStringList variableNames(); + QStringList functionNames(bool stripParameters=false); + + public Q_SLOTS: + void checkForNewVariables(); + void checkForNewFunctions(); + + private Q_SLOTS: + void parseNewVariables(Cantor::Expression::Status status); + void parseNewFunctions(Cantor::Expression::Status status); + + Q_SIGNALS: + void variablesAdded(const QStringList variables); + void variablesRemoved(const QStringList variables); + + void functionsAdded(const QStringList variables); + void functionsRemoved(const QStringList variables); + + private: + MaximaSession* maximaSession(); + + private: + QList m_variables; + QList m_functions; + +}; + +#endif /* _MAXIMAVARIABLEMODEL_H */ diff --git a/src/backends/maxima/settings.kcfgc b/src/backends/maxima/settings.kcfgc new file mode 100644 index 0000000..a434969 --- /dev/null +++ b/src/backends/maxima/settings.kcfgc @@ -0,0 +1,3 @@ +File=maximabackend.kcfg +ClassName=MaximaSettings +Singleton=true diff --git a/src/backends/maxima/settings.ui b/src/backends/maxima/settings.ui new file mode 100644 index 0000000..90c979c --- /dev/null +++ b/src/backends/maxima/settings.ui @@ -0,0 +1,81 @@ + + + MaximaSettingsBase + + + + 0 + 0 + 414 + 231 + + + + + + + + + Path to Maxima: + + + + + + + + + + + + Integrate Plots in Worksheet + + + + + + + Let Cantor follow the creation/destruction of variables + + + Enable Variable Management + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/maxima/testmaxima.cpp b/src/backends/maxima/testmaxima.cpp new file mode 100644 index 0000000..e117e9c --- /dev/null +++ b/src/backends/maxima/testmaxima.cpp @@ -0,0 +1,296 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "testmaxima.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" +#include "imageresult.h" +#include "epsresult.h" +#include "syntaxhelpobject.h" + +#include + +#include + +QString TestMaxima::backendName() +{ + return QLatin1String("maxima"); +} + + +void TestMaxima::testSimpleCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput( e->result()->toHtml() ), QLatin1String("4") ); +} + +void TestMaxima::testMultilineCommand() +{ + Cantor::Expression* e = evalExp( QLatin1String("2+2;3+3") ); + + QVERIFY(e != nullptr); + QVERIFY(e->results().size() == 2); + + QString result = e->results().at(0)->toHtml(); + QCOMPARE(result, QLatin1String("4")); + + result = e->results().at(1)->toHtml(); + QCOMPARE(result, QLatin1String("6")); +} + +//WARNING: for this test to work, Integration of Plots must be enabled +//and CantorLib must be compiled with EPS-support +void TestMaxima::testPlot() +{ + if(QStandardPaths::findExecutable(QLatin1String("gnuplot")).isNull()) + { + QSKIP("gnuplot not found, maxima needs it for plotting", SkipSingle); + } + + Cantor::Expression* e=evalExp( QLatin1String("plot2d(sin(x), [x, -10,10])") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + if(e->result()->type()!= Cantor::EpsResult::Type) + { + waitForSignal(e, SIGNAL(gotResult())); + } + +#ifdef WITH_EPS + QCOMPARE( e->result()->type(), (int)Cantor::EpsResult::Type ); +#else + QCOMPARE( e->result()->type(), (int)Cantor::ImageResult::Type ); +#endif + QVERIFY( !e->result()->data().isNull() ); + QVERIFY( e->errorMessage().isNull() ); +} + +void TestMaxima::testPlotWithAnotherTextResults() +{ + if(QStandardPaths::findExecutable(QLatin1String("gnuplot")).isNull()) + { + QSKIP("gnuplot not found, maxima needs it for plotting", SkipSingle); + } + + Cantor::Expression* e=evalExp( QLatin1String( + "2*2; \n" + "plot2d(sin(x), [x, -10,10]); \n" + "4*4;" + )); + + QVERIFY( e!=nullptr ); + QVERIFY( e->errorMessage().isNull() ); + QCOMPARE(e->results().size(), 3); + + QCOMPARE(e->results()[0]->toHtml(), QLatin1String("4")); + +#ifdef WITH_EPS + QCOMPARE( e->results()[1]->type(), (int)Cantor::EpsResult::Type ); +#else + QCOMPARE( e->results()[1]->type(), (int)Cantor::ImageResult::Type ); +#endif + QVERIFY( !e->results()[1]->data().isNull() ); + + QCOMPARE(e->results()[2]->toHtml(), QLatin1String("16")); +} + +void TestMaxima::testInvalidSyntax() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2*(") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->status()==Cantor::Expression::Error ); +} + +void TestMaxima::testExprNumbering() +{ + Cantor::Expression* e=evalExp( QLatin1String("kill(labels)") ); //first reset the labels + + e=evalExp( QLatin1String("2+2") ); + QVERIFY( e!=nullptr ); + int id=e->id(); + QCOMPARE( id, 1 ); + + e=evalExp( QString::fromLatin1("%o%1+1" ).arg( id ) ); + QVERIFY( e != nullptr ); + QVERIFY( e->result()!=nullptr ); + QCOMPARE( cleanOutput( e->result()->toHtml() ), QLatin1String( "5" ) ); +} + +void TestMaxima::testCommandQueue() +{ + //only wait for the last Expression to return, so the queue gets + //actually filled + + Cantor::Expression* e1=session()->evaluateExpression(QLatin1String("0+1")); + Cantor::Expression* e2=session()->evaluateExpression(QLatin1String("1+1")); + Cantor::Expression* e3=evalExp(QLatin1String("1+2")); + + QVERIFY(e1!=nullptr); + QVERIFY(e2!=nullptr); + QVERIFY(e3!=nullptr); + + QVERIFY(e1->result()); + QVERIFY(e2->result()); + QVERIFY(e3->result()); + + QCOMPARE(cleanOutput(e1->result()->toHtml()), QLatin1String("1")); + QCOMPARE(cleanOutput(e2->result()->toHtml()), QLatin1String("2")); + QCOMPARE(cleanOutput(e3->result()->toHtml()), QLatin1String("3")); +} + +void TestMaxima::testSimpleExpressionWithComment() +{ + Cantor::Expression* e=evalExp(QLatin1String("/*this is a comment*/2+2")); + QVERIFY(e!=nullptr); + QVERIFY(e->result()!=nullptr); + + QCOMPARE(cleanOutput(e->result()->toHtml()), QLatin1String("4")); +} + +void TestMaxima::testCommentExpression() +{ + Cantor::Expression* e=evalExp(QLatin1String("/*this is a comment*/")); + QVERIFY(e!=nullptr); + QVERIFY(e->result()==nullptr||e->result()->toHtml().isEmpty()); +} + +void TestMaxima::testNestedComment() +{ + Cantor::Expression* e=evalExp(QLatin1String("/*/*this is still a comment*/*/2+2/*still/*a*/comment*//**/")); + QVERIFY(e!=nullptr); + QVERIFY(e->result()!=nullptr); + + QCOMPARE(cleanOutput(e->result()->toHtml()), QLatin1String("4")); +} + +void TestMaxima::testUnmatchedComment() +{ + Cantor::Expression* e=evalExp(QLatin1String("/*this comment doesn't end here!")); + QVERIFY(e!=nullptr); + QVERIFY(e->result()==nullptr); + QVERIFY(e->status()==Cantor::Expression::Error); +} + +void TestMaxima::testInvalidAssignment() +{ + Cantor::Expression* e=evalExp(QLatin1String("0:a")); + QVERIFY(e!=nullptr); + //QVERIFY(e->result()==0); + //QVERIFY(e->status()==Cantor::Expression::Error); + + if(session()->status()==Cantor::Session::Running) + waitForSignal(session(), SIGNAL(statusChanged(Cantor::Session::Status))); + + //make sure we didn't screw up the session + Cantor::Expression* e2=evalExp(QLatin1String("2+2")); + QVERIFY(e2!=nullptr); + QVERIFY(e2->result()!=nullptr); + + QCOMPARE(cleanOutput(e2->result()->toHtml()), QLatin1String("4")); +} + +void TestMaxima::testInformationRequest() +{ + Cantor::Expression* e=session()->evaluateExpression(QLatin1String("integrate(x^n,x)")); + QVERIFY(e!=nullptr); + waitForSignal(e, SIGNAL(needsAdditionalInformation(QString))); + e->addInformation(QLatin1String("N")); + + waitForSignal(e, SIGNAL(statusChanged(Cantor::Expression::Status))); + QVERIFY(e->result()!=nullptr); + + QCOMPARE(cleanOutput(e->result()->toHtml()), QLatin1String("x^(n+1)/(n+1)")); +} + +void TestMaxima::testSyntaxHelp() +{ + Cantor::SyntaxHelpObject* help = session()->syntaxHelpFor(QLatin1String("simplify_sum")); + help->fetchSyntaxHelp(); + waitForSignal(help, SIGNAL(done())); + + qWarning()<toHtml(); + QVERIFY(help->toHtml().contains(QLatin1String("simplify_sum"))); +} + +void TestMaxima::testHelpRequest() +{ + //execute "??print" + Cantor::Expression* e = session()->evaluateExpression(QLatin1String("??print")); + QVERIFY(e != nullptr); + + //help result will be shown, but maxima still expects further input + waitForSignal(e, SIGNAL(needsAdditionalInformation(QString))); + QVERIFY(e->status() != Cantor::Expression::Done); + + //ask for help for the first flag of the print command + e->addInformation(QLatin1String("0")); + + //no further input is required, we're done + waitForSignal(session(), SIGNAL(statusChanged(Cantor::Session::Status))); + QVERIFY(e->status() == Cantor::Expression::Done); +} + +void TestMaxima::testVariableModel() +{ + QAbstractItemModel* model = session()->variableModel(); + QVERIFY(model != nullptr); + + Cantor::Expression* e1=evalExp(QLatin1String("a: 15")); + Cantor::Expression* e2=evalExp(QLatin1String("a: 15; b: \"Hello, world!\"")); + Cantor::Expression* e3=evalExp(QLatin1String("l: [1,2,3]")); + QVERIFY(e1!=nullptr); + QVERIFY(e2!=nullptr); + QVERIFY(e3!=nullptr); + + if(session()->status()==Cantor::Session::Running) + waitForSignal(session(), SIGNAL(statusChanged(Cantor::Session::Status))); + + QCOMPARE(3, model->rowCount()); + + QVariant name = model->index(0,0).data(); + QCOMPARE(name.toString(),QLatin1String("a")); + + QVariant value = model->index(0,1).data(); + QCOMPARE(value.toString(),QLatin1String("15")); + + QVariant name1 = model->index(1,0).data(); + QCOMPARE(name1.toString(),QLatin1String("b")); + + QVariant value1 = model->index(1,1).data(); + QCOMPARE(value1.toString(),QLatin1String("\"Hello, world!\"")); + + QVariant name2 = model->index(2,0).data(); + QCOMPARE(name2.toString(),QLatin1String("l")); + + QVariant value2 = model->index(2,1).data(); + QCOMPARE(value2.toString(),QLatin1String("[1,2,3]")); +} + +QTEST_MAIN( TestMaxima ) + diff --git a/src/backends/maxima/testmaxima.h b/src/backends/maxima/testmaxima.h new file mode 100644 index 0000000..f71c6a6 --- /dev/null +++ b/src/backends/maxima/testmaxima.h @@ -0,0 +1,68 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _TESTMAXIMA_H +#define _TESTMAXIMA_H + +#include "backendtest.h" + +/** This class test some of the basic functions of the maxima backend + The different tests represent some general expressions, as well + as expressions, that are known to have caused problems in earlier + versions +**/ +class TestMaxima : public BackendTest +{ + Q_OBJECT + +private Q_SLOTS: + //tests evaluating a simple command + void testSimpleCommand(); + //tests a command, containing more than 1 line + void testMultilineCommand(); + //tests if the command queue works correcly + void testCommandQueue(); + //tests doing a plot + void testPlot(); + void testPlotWithAnotherTextResults(); + + //tests a syntax error (not closing bracket) + void testInvalidSyntax(); + //tests if the expression numbering works + void testExprNumbering(); + + //some tests to see if comments are working correctly + void testSimpleExpressionWithComment(); + void testCommentExpression(); + void testNestedComment(); + void testUnmatchedComment(); + + void testInvalidAssignment(); + + void testInformationRequest(); + void testHelpRequest(); + void testSyntaxHelp(); + + void testVariableModel(); +private: + QString backendName() override; +}; + +#endif /* _TESTMAXIMA_H */ diff --git a/src/backends/null/CMakeLists.txt b/src/backends/null/CMakeLists.txt new file mode 100644 index 0000000..5e0634d --- /dev/null +++ b/src/backends/null/CMakeLists.txt @@ -0,0 +1,8 @@ +set( NullBackend_SRCS + nullbackend.cpp + nullsession.cpp + nullexpression.cpp + nullcompletionobject.cpp +) + +add_backend(nullbackend ${NullBackend_SRCS}) diff --git a/src/backends/null/nullbackend.cpp b/src/backends/null/nullbackend.cpp new file mode 100644 index 0000000..58d1010 --- /dev/null +++ b/src/backends/null/nullbackend.cpp @@ -0,0 +1,61 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "nullbackend.h" + +#include "nullsession.h" + +#include + +#include "cantor_macros.h" + + +NullBackend::NullBackend( QObject* parent, const QList& args ) : Cantor::Backend( parent,args ) +{ + setObjectName(QLatin1String("nullbackend")); + qDebug()<<"Creating NullBackend"; + setEnabled(false); +} + +NullBackend::~NullBackend() +{ + qDebug()<<"Destroying NullBackend"; +} + +QString NullBackend::id() const +{ + return QLatin1String("null"); +} + +Cantor::Session* NullBackend::createSession() +{ + qDebug()<<"Spawning a new Null session"; + + return new NullSession(this); +} + +Cantor::Backend::Capabilities NullBackend::capabilities() const +{ + qDebug()<<"Requesting capabilities of NullSession"; + return Cantor::Backend::Nothing; +} + +K_PLUGIN_FACTORY_WITH_JSON(nullbackend, "nullbackend.json", registerPlugin();) +#include "nullbackend.moc" diff --git a/src/backends/null/nullbackend.h b/src/backends/null/nullbackend.h new file mode 100644 index 0000000..b559756 --- /dev/null +++ b/src/backends/null/nullbackend.h @@ -0,0 +1,41 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _NULLBACKEND_H +#define _NULLBACKEND_H + +#include "backend.h" + +class NullBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit NullBackend( QObject* parent = nullptr, const QList& args = QList()); + ~NullBackend() override; + + QString id() const override; + + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + +}; + + +#endif /* _NULLBACKEND_H */ diff --git a/src/backends/null/nullbackend.json b/src/backends/null/nullbackend.json new file mode 100644 index 0000000..9e9d053 --- /dev/null +++ b/src/backends/null/nullbackend.json @@ -0,0 +1,64 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for Cantor for testing purposes", + "Description[ca@valencia]": "Dorsal per al Cantor, per a fer proves", + "Description[ca]": "Dorsal per al Cantor, per a fer proves", + "Description[cs]": "Podpůrná vrstva pro Cantor pro účely testování", + "Description[de]": "Cantor-Modul für Testzwecke", + "Description[el]": "Σύστημα υποστήριξης για το Cantor για δοκιμές", + "Description[en_GB]": "Backend for Cantor for testing purposes", + "Description[es]": "Motor para Cantor pensado para hacer pruebas", + "Description[et]": "Cantori taustaprogramm testimiseks", + "Description[fi]": "Cantorin testaukseen tarkoitettu taustajärjestelmä", + "Description[fr]": "Moteur pour Cantor permettant d'effectuer des tests", + "Description[gl]": "Infraestrutura de Cantor para probas", + "Description[it]": "Backend di test per Cantor", + "Description[nl]": "Backend voor Cantor voor testdoeleinden", + "Description[nn]": "Motor for testing av Cantor", + "Description[pl]": "Silnik dla Cantor do celów testowych ", + "Description[pt]": "Infra-estrutura para testes do Cantor", + "Description[pt_BR]": "Infraestrutura para fins de testes do Cantor", + "Description[ru]": "Модуль компьютерной алгебры для Cantor, предназначенный для тестирования", + "Description[sk]": "Backend pre Cantor na testovacie účely", + "Description[sl]": "Zaledje namenjeno preizkušanju", + "Description[sv]": "Bakgrundsprogram för Cantor i testsyfte", + "Description[tr]": "Test amaçlı kullanılmak üzere Cantor arka ucu", + "Description[uk]": "Тестовий модуль Cantor", + "Description[x-test]": "xxBackend for Cantor for testing purposesxx", + "Description[zh_CN]": "Cantor 测试后端", + "Description[zh_TW]": "Cantor 測試用的後端介面", + "Id": "nullbackend", + "License": "GPL", + "Name": "nullbackend", + "Name[ca@valencia]": "DorsalNul", + "Name[ca]": "DorsalNul", + "Name[cs]": "žádná podpůrná vrstva", + "Name[de]": "Null-Modul", + "Name[el]": "nullbackend", + "Name[en_GB]": "nullbackend", + "Name[es]": "nullbackend", + "Name[et]": "nullbackend", + "Name[fi]": "null-taustajärjestelmä", + "Name[fr]": "Moteur vide", + "Name[gl]": "nullbackend", + "Name[it]": "Backend vuoto", + "Name[nl]": "nullbackend", + "Name[nn]": "Nullmotor", + "Name[pl]": "zerowy silnik", + "Name[pt]": "infra-estrutura nula", + "Name[pt_BR]": "infraestrutura vazia", + "Name[ru]": "Тестовый модуль компьютерной алгебры", + "Name[sk]": "nullbackend", + "Name[sl]": "nullbackend", + "Name[sv]": "Nollbakgrundsprogram", + "Name[tr]": "belirsiz arka uç", + "Name[uk]": "nullbackend", + "Name[x-test]": "xxnullbackendxx", + "Name[zh_CN]": "空后端", + "Name[zh_TW]": "nullbackend", + "ServiceTypes": [ + "Cantor/Backend" + ] + } +} diff --git a/src/backends/null/nullcompletionobject.cpp b/src/backends/null/nullcompletionobject.cpp new file mode 100644 index 0000000..970c36e --- /dev/null +++ b/src/backends/null/nullcompletionobject.cpp @@ -0,0 +1,41 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "nullcompletionobject.h" + +#include +#include + +#include "nullsession.h" + +NullCompletionObject::NullCompletionObject(const QString& command, int index, NullSession* session) : Cantor::CompletionObject(session) +{ + setLine(command, index); +} + +void NullCompletionObject::fetchCompletions() +{ + qDebug()<<"fetching..."; + QStringList comp; + for (int i=0;i<5;i++) + comp< + */ + +#ifndef _NULLCOMPLETIONOBJECT_H +#define _NULLCOMPLETIONOBJECT_H + +#include "completionobject.h" + +class NullSession; + +class NullCompletionObject : public Cantor::CompletionObject +{ + public: + NullCompletionObject( const QString& command, int index, NullSession* session); + ~NullCompletionObject() override = default; + + protected Q_SLOTS: + void fetchCompletions() override; + +}; + +#endif /* _NULLCOMPLETIONOBJECT_H */ diff --git a/src/backends/null/nullexpression.cpp b/src/backends/null/nullexpression.cpp new file mode 100644 index 0000000..46380ee --- /dev/null +++ b/src/backends/null/nullexpression.cpp @@ -0,0 +1,62 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "nullexpression.h" + +#include "textresult.h" +#include "imageresult.h" +#include "helpresult.h" +#include +#include +#include + +NullExpression::NullExpression( Cantor::Session* session, bool internal ) : Cantor::Expression(session, internal) +{ + m_timer=new QTimer(this); + m_timer->setSingleShot(true); + connect(m_timer, &QTimer::timeout, this, &NullExpression::evalFinished); +} + +void NullExpression::evaluate() +{ + qDebug()<<"evaluating "<start(1000); +} + +void NullExpression::interrupt() +{ + qDebug()<<"interruptinging command"; + m_timer->stop(); + setStatus(Cantor::Expression::Interrupted); +} + +void NullExpression::evalFinished() +{ + qDebug()<<"evaluation finished"; + if ( command()==QLatin1String("img") ) + setResult( new Cantor::ImageResult( QUrl::fromLocalFile(KIconLoader::global()->iconPath(QLatin1String("kde"), KIconLoader::Desktop)), QLatin1String("alternative") ) ); + else + setResult(new Cantor::TextResult(QLatin1String("result: ")+command())); + + setStatus(Cantor::Expression::Done); +} + diff --git a/src/backends/null/nullexpression.h b/src/backends/null/nullexpression.h new file mode 100644 index 0000000..2df7d2e --- /dev/null +++ b/src/backends/null/nullexpression.h @@ -0,0 +1,45 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _NULLEXPRESSION_H +#define _NULLEXPRESSION_H + +#include "expression.h" + +class QTimer; + +class NullExpression : public Cantor::Expression +{ + Q_OBJECT + public: + explicit NullExpression( Cantor::Session* session, bool internal = false); + ~NullExpression() override = default; + + void evaluate() override; + void interrupt() override; + + public Q_SLOTS: + void evalFinished(); + + private: + QTimer* m_timer; +}; + +#endif /* _NULLEXPRESSION_H */ diff --git a/src/backends/null/nullsession.cpp b/src/backends/null/nullsession.cpp new file mode 100644 index 0000000..f1b8bf8 --- /dev/null +++ b/src/backends/null/nullsession.cpp @@ -0,0 +1,88 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "nullsession.h" +#include "nullexpression.h" +#include "nullcompletionobject.h" + +#include + +NullSession::NullSession( Cantor::Backend* backend) : Session(backend) +{ +} + +void NullSession::login() +{ + qDebug()<<"login"; + emit loginStarted(); + changeStatus(Session::Done); + emit loginDone(); +} + +void NullSession::logout() +{ + qDebug()<<"logout"; + + changeStatus(Status::Disable); +} + +void NullSession::interrupt() +{ + qDebug()<<"interrupt"; + foreach(Cantor::Expression* e, m_runningExpressions) + e->interrupt(); + m_runningExpressions.clear(); + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression* NullSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + qDebug()<<"evaluating: "<setFinishingBehavior(behave); + connect(expr, &NullExpression::statusChanged, this, &NullSession::expressionFinished); + expr->setCommand(cmd); + expr->evaluate(); + + if(m_runningExpressions.isEmpty()) + changeStatus(Cantor::Session::Running); + m_runningExpressions.append(expr); + + + return expr; +} + +Cantor::CompletionObject* NullSession::completionFor(const QString& command, int index) +{ + qDebug()<<"tab completion for "<(sender()); + m_runningExpressions.removeAll(expression); + qDebug()<<"size: "< + */ + +#ifndef _NULLSESSION_H +#define _NULLSESSION_H + +#include "session.h" + + +class NullExpression; + +class NullSession : public Cantor::Session +{ + Q_OBJECT + public: + explicit NullSession( Cantor::Backend* backend); + ~NullSession() override = default; + + void login() override; + void logout() override; + + void interrupt() override; + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& cmd, int index=-1) override; + + private Q_SLOTS: + void expressionFinished(); + + private: + QList m_runningExpressions; +}; + +#endif /* _NULLSESSION_H */ diff --git a/src/backends/octave/CMakeLists.txt b/src/backends/octave/CMakeLists.txt new file mode 100644 index 0000000..93feabf --- /dev/null +++ b/src/backends/octave/CMakeLists.txt @@ -0,0 +1,43 @@ +set( OctaveBackend_SRCS + octavebackend.cpp + octavesession.cpp + octaveexpression.cpp + octaveextensions.cpp + octavehighlighter.cpp + octavekeywords.cpp + octavecompletionobject.cpp + octavesyntaxhelpobject.cpp +) + +set (OCTAVE_SCRIPT_INSTALL_DIR ${KDE_INSTALL_DATADIR}/cantor/octavebackend) +set (OCTAVE_SCRIPT_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/${OCTAVE_SCRIPT_INSTALL_DIR}/) +configure_file (octave-backend-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/octave-backend-config.h ) +add_subdirectory(scripts) + +kconfig_add_kcfg_files(OctaveBackend_SRCS settings.kcfgc) +install(FILES octavebackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(OctaveBackend_SRCS settings.ui) + +add_backend(octavebackend ${OctaveBackend_SRCS}) + +target_link_libraries(cantor_octavebackend + KF5::KIOCore + KF5::ConfigCore + KF5::ConfigGui + KF5::SyntaxHighlighting +) + + +if(BUILD_TESTING) + add_executable( testoctave testoctave.cpp) + add_test(testoctave testoctave) + ecm_mark_as_test(testoctave) + target_link_libraries( testoctave + Qt5::Test + cantorlibs + cantortest + ) +endif(BUILD_TESTING) + +install(FILES cantor_octave.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) diff --git a/src/backends/octave/cantor_octave.knsrc b/src/backends/octave/cantor_octave.knsrc new file mode 100644 index 0000000..3ac33de --- /dev/null +++ b/src/backends/octave/cantor_octave.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Octave) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/octave/cmake.patch b/src/backends/octave/cmake.patch new file mode 100644 index 0000000..e30a244 --- /dev/null +++ b/src/backends/octave/cmake.patch @@ -0,0 +1,10 @@ +Index: CMakeLists.txt +=================================================================== +--- CMakeLists.txt (revision 1124619) ++++ CMakeLists.txt (working copy) +@@ -12,3 +12,5 @@ + if(R_FOUND) + macro_optional_add_subdirectory(R) + endif(R_FOUND) ++ ++add_subdirectory(octave) diff --git a/src/backends/octave/octave-backend-config.h.cmake b/src/backends/octave/octave-backend-config.h.cmake new file mode 100644 index 0000000..025cce8 --- /dev/null +++ b/src/backends/octave/octave-backend-config.h.cmake @@ -0,0 +1 @@ +const QString octaveScriptInstallDir = QLatin1String("${OCTAVE_SCRIPT_INSTALL_PATH}"); diff --git a/src/backends/octave/octavebackend.cpp b/src/backends/octave/octavebackend.cpp new file mode 100644 index 0000000..6b387c0 --- /dev/null +++ b/src/backends/octave/octavebackend.cpp @@ -0,0 +1,94 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octavebackend.h" +#include "octavesession.h" +#include "octaveextensions.h" +#include "settings.h" + +#include "cantor_macros.h" + +#include +#include + +#include "ui_settings.h" + +OctaveBackend::OctaveBackend(QObject* parent, const QList& args): Backend(parent, args) +{ + new OctaveHistoryExtension(this); + new OctaveScriptExtension(this); + new OctavePlotExtension(this); + new OctaveLinearAlgebraExtension(this); + new OctaveVariableManagementExtension(this); + new OctavePackagingExtension(this); +} + + +QString OctaveBackend::id() const +{ + return QLatin1String("octave"); +} + +QString OctaveBackend::version() const +{ + return QLatin1String("4.0 and 4.2"); +} + +Cantor::Backend::Capabilities OctaveBackend::capabilities() const +{ + return SyntaxHighlighting | Completion | SyntaxHelp | VariableManagement; +} + +Cantor::Session* OctaveBackend::createSession() +{ + return new OctaveSession(this); +} + +bool OctaveBackend::requirementsFullfilled() const +{ + return QFileInfo(OctaveSettings::path().toLocalFile()).isExecutable(); +} + +QUrl OctaveBackend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation of Octave, please check if there is a translated version (currently Czech and Japanese) and use the correct url", + "http://www.gnu.org/software/octave/doc/interpreter/")); +} + +QString OctaveBackend::description() const +{ + return i18n("GNU Octave is a high-level language, primarily intended for numerical computations.
    " + "It provides a convenient command line interface for solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with Matlab."); +} + +QWidget* OctaveBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget = new QWidget(parent); + Ui::OctaveSettingsBase ui; + ui.setupUi(widget); + return widget; +} + +KConfigSkeleton* OctaveBackend::config() const +{ + return OctaveSettings::self(); +} + +K_PLUGIN_FACTORY_WITH_JSON(octavebackend, "octavebackend.json", registerPlugin();) +#include "octavebackend.moc" diff --git a/src/backends/octave/octavebackend.h b/src/backends/octave/octavebackend.h new file mode 100644 index 0000000..39563e0 --- /dev/null +++ b/src/backends/octave/octavebackend.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef CANTOR_OCTAVE_BACKEND_H +#define CANTOR_OCTAVE_BACKEND_H + +#include + +class OctaveBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit OctaveBackend( QObject* parent = nullptr,const QList& args = QList()); + ~OctaveBackend() override = default; + QString id() const override; + QString version() const override; + Cantor::Backend::Capabilities capabilities() const override; + Cantor::Session* createSession() override; + + bool requirementsFullfilled() const override; + QUrl helpUrl() const override; + QString description() const override; + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; +}; + +#endif diff --git a/src/backends/octave/octavebackend.json b/src/backends/octave/octavebackend.json new file mode 100644 index 0000000..8f97229 --- /dev/null +++ b/src/backends/octave/octavebackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for GNU Octave", + "Description[ca@valencia]": "Un dorsal per al GNU Octave", + "Description[ca]": "Un dorsal per al GNU Octave", + "Description[cs]": "Podpůrná vrstva pro GNU Octave", + "Description[de]": "Modul für GNU Octave", + "Description[el]": "Σύστημα υποστήριξης για το GNU Octave", + "Description[en_GB]": "Backend for GNU Octave", + "Description[es]": "Motor para GNU Octave", + "Description[et]": "GNU Octave'i taustaprogramm", + "Description[fi]": "GNU Octaven taustajärjestelmä", + "Description[fr]": "Moteur GNU « Octave »", + "Description[gl]": "Infraestrutura para GNU Octave", + "Description[it]": "Backend per GNU Octave", + "Description[nl]": "Een backend voor GNU Octave", + "Description[nn]": "Motor for GNU Octave", + "Description[pl]": "Silnik dla GNU Octave", + "Description[pt]": "Infra-estrutura para o GNU Octave", + "Description[pt_BR]": "Infraestrutura para o GNU Octave", + "Description[ru]": "Модуль поддержки Octave", + "Description[sk]": "Backend pre GNU Octave", + "Description[sl]": "Zaledje za GNU Octave", + "Description[sv]": "Ett bakgrundsprogram för GNU Octave", + "Description[tr]": "GNU Octave için arka uç", + "Description[uk]": "Модуль GNU Octave", + "Description[x-test]": "xxBackend for GNU Octavexx", + "Description[zh_CN]": "GNU Octave 后端", + "Description[zh_TW]": "GNU Octave 後端介面", + "Icon": "octavebackend", + "Id": "Octave", + "License": "GPL", + "Name": "Octave", + "Name[ca@valencia]": "Octave", + "Name[ca]": "Octave", + "Name[cs]": "Octave", + "Name[da]": "Octave", + "Name[de]": "Octave", + "Name[el]": "Octave", + "Name[en_GB]": "Octave", + "Name[es]": "Octave", + "Name[et]": "Octave", + "Name[fi]": "Octave", + "Name[fr]": "Octave", + "Name[gl]": "Octave", + "Name[it]": "Octave", + "Name[nl]": "Octave", + "Name[nn]": "Octave", + "Name[pl]": "Octave", + "Name[pt]": "Octave", + "Name[pt_BR]": "Octave", + "Name[ru]": "Octave", + "Name[sk]": "Octave", + "Name[sl]": "Octave", + "Name[sv]": "Octave", + "Name[tr]": "Octave", + "Name[uk]": "Octave", + "Name[x-test]": "xxOctavexx", + "Name[zh_CN]": "Octave", + "Name[zh_TW]": "Octave", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://www.octave.org/" + } +} diff --git a/src/backends/octave/octavebackend.kcfg b/src/backends/octave/octavebackend.kcfg new file mode 100644 index 0000000..8edecc8 --- /dev/null +++ b/src/backends/octave/octavebackend.kcfg @@ -0,0 +1,21 @@ + + + QStandardPaths + + + + + QUrl::fromLocalFile(QStandardPaths::findExecutable( QLatin1String("octave-cli") )) + + + + true + + + + + + diff --git a/src/backends/octave/octavecompletionobject.cpp b/src/backends/octave/octavecompletionobject.cpp new file mode 100644 index 0000000..f42bf6c --- /dev/null +++ b/src/backends/octave/octavecompletionobject.cpp @@ -0,0 +1,164 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octavecompletionobject.h" +#include "octavekeywords.h" + +#include "session.h" +#include "result.h" + +#include + +OctaveCompletionObject::OctaveCompletionObject(const QString& command, int index, Cantor::Session* parent): CompletionObject(parent) +{ + setLine(command, index); + m_expression = nullptr; +} + +void OctaveCompletionObject::fetchCompletions() +{ + if (session()->status() == Cantor::Session::Disable) + { + QStringList allCompletions; + + allCompletions << OctaveKeywords::instance()->functions(); + allCompletions << OctaveKeywords::instance()->keywords(); + + setCompletions(allCompletions); + + emit fetchingDone(); + } + else + { + if (m_expression) + return; + qDebug() << "Fetching completions for" << command(); + QString expr = QString::fromLatin1("completion_matches('%1')").arg(command()); + m_expression = session()->evaluateExpression(expr,Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::statusChanged, this, &OctaveCompletionObject::extractCompletions); + } +} + +void OctaveCompletionObject::extractCompletions(Cantor::Expression::Status status) +{ + if (!m_expression) + return; + + switch(status) + { + case Cantor::Expression::Done: + { + Cantor::Result* result = m_expression->result(); + if (result) + { + QString res = result->toHtml(); + QStringList completions = res.split(QLatin1String("
    \n"), QString::SkipEmptyParts); + qDebug() << "Adding" << completions.size() << "completions"; + setCompletions( completions ); + } + + m_expression->deleteLater(); + m_expression = nullptr; + emit fetchingDone(); + break; + } + case Cantor::Expression::Interrupted: + case Cantor::Expression::Error: + { + qDebug() << "fetching expression finished with status" << (status == Cantor::Expression::Error? "Error" : "Interrupted"); + + m_expression->deleteLater(); + m_expression=nullptr; + emit fetchingDone(); + break; + } + default: + break; + } +} + +void OctaveCompletionObject::fetchIdentifierType() +{ + if (session()->status() == Cantor::Session::Disable) + { + qDebug() << "Fetching type of " << identifier(); + if (OctaveKeywords::instance()->keywords().contains(identifier())) + emit fetchingTypeDone(KeywordType); + else if (OctaveKeywords::instance()->functions().contains(identifier())) + emit fetchingTypeDone(FunctionType); + else + emit fetchingTypeDone(UnknownType); + } + else + { + if (m_expression) + return; + qDebug() << "Fetching type of " << identifier(); + QString expr = QString::fromLatin1("__cantor_tmp__ = [exist('%1'), iskeyword('%1')], clear __cantor_tmp__").arg(identifier()); + m_expression = session()->evaluateExpression(expr, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::statusChanged, this, &OctaveCompletionObject::extractIdentifierType); + } +} + +void OctaveCompletionObject::extractIdentifierType(Cantor::Expression::Status status) +{ + if (!m_expression) + return; + switch(status) + { + case Cantor::Expression::Error: + qDebug() << "Error with OctaveCompletionObject" << m_expression->errorMessage(); + emit fetchingTypeDone(UnknownType); + break; + + case Cantor::Expression::Interrupted: + qDebug() << "OctaveCompletionObject was interrupted"; + emit fetchingTypeDone(UnknownType); + break; + + case Cantor::Expression::Done: + if (m_expression->result()) + { + QString res = m_expression->result()->data().toString(); + // Remove '__cantor_tmp__ = \n' from result string + // size("__cantor_tmp__ = \n") == 18 + res.remove(0,18); + + const QStringList& ints = res.split(QLatin1String(" "), QString::SkipEmptyParts); + if (ints.size() != 2) + emit fetchingTypeDone(UnknownType); + else if (ints[1].toInt() == 1) + emit fetchingTypeDone(KeywordType); + else if (ints[0].toInt() == 1) + emit fetchingTypeDone(VariableType); + else if (ints[0].toInt() == 5 || ints[0].toInt() == 103) + emit fetchingTypeDone(FunctionType); + else + emit fetchingTypeDone(UnknownType); + } + break; + + default: + return; + } + + m_expression->deleteLater(); + m_expression = nullptr; + return; +} diff --git a/src/backends/octave/octavecompletionobject.h b/src/backends/octave/octavecompletionobject.h new file mode 100644 index 0000000..71463dc --- /dev/null +++ b/src/backends/octave/octavecompletionobject.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef OCTAVECOMPLETIONOBJECT_H +#define OCTAVECOMPLETIONOBJECT_H + +#include "completionobject.h" +#include "expression.h" + +class OctaveCompletionObject : public Cantor::CompletionObject +{ + Q_OBJECT +public: + OctaveCompletionObject(const QString& command, int index, Cantor::Session* parent); + ~OctaveCompletionObject() override = default; + +protected: + void fetchCompletions() override; + void fetchIdentifierType() override; +private Q_SLOTS: + void extractCompletions(Cantor::Expression::Status status); + void extractIdentifierType(Cantor::Expression::Status status); + + private: + Cantor::Expression* m_expression; + +}; + +#endif // OCTAVECOMPLETIONOBJECT_H diff --git a/src/backends/octave/octaveexpression.cpp b/src/backends/octave/octaveexpression.cpp new file mode 100644 index 0000000..aea518d --- /dev/null +++ b/src/backends/octave/octaveexpression.cpp @@ -0,0 +1,188 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octaveexpression.h" +#include "octavesession.h" +#include "defaultvariablemodel.h" + +#include "textresult.h" + +#include +#include +#include + + +static const char* printCommand = "cantor_print();"; + +OctaveExpression::OctaveExpression(Cantor::Session* session, bool internal): Expression(session, internal), + m_plotPending(false), + m_finished(false), + m_appendPlotCommand(false), + m_appendDot(false) +{ + m_plotCommands << QLatin1String("plot") << QLatin1String("semilogx") << QLatin1String("semilogy") << QLatin1String("loglog") + << QLatin1String("polar") << QLatin1String("contour") << QLatin1String("bar") + << QLatin1String("stairs") << QLatin1String("errorbar") << QLatin1String("sombrero") + << QLatin1String("hist") << QLatin1String("fplot") << QLatin1String("imshow") + << QLatin1String("stem") << QLatin1String("stem3") << QLatin1String("scatter") << QLatin1String("pareto") << QLatin1String("rose") + << QLatin1String("pie") << QLatin1String("quiver") << QLatin1String("compass") << QLatin1String("feather") + << QLatin1String("pcolor") << QLatin1String("area") << QLatin1String("fill") << QLatin1String("comet") + << QLatin1String("plotmatrix") + /* 3d-plots */ + << QLatin1String("plot3") + << QLatin1String("mesh") << QLatin1String("meshc") << QLatin1String("meshz") + << QLatin1String("surf") << QLatin1String("surfc") << QLatin1String("surfl") << QLatin1String("surfnorm") + << QLatin1String("isosurface")<< QLatin1String("isonormals") << QLatin1String("isocaps") + /* 3d-plots defined by a function */ + << QLatin1String("ezplot3") << QLatin1String("ezmesh") << QLatin1String("ezmeshc") << QLatin1String("ezsurf") << QLatin1String("ezsurfc"); + m_plotCommands << QLatin1String("cantor_plot2d") << QLatin1String("cantor_plot3d"); +} + +void OctaveExpression::interrupt() +{ + qDebug() << "interrupt"; + + if (m_appendPlotCommand) + removeAppendedPlotCommand(); + + setStatus(Interrupted); +} + +void OctaveExpression::evaluate() +{ + qDebug() << "evaluate"; + QString cmd = command(); + QStringList cmdWords = cmd.split(QRegExp(QLatin1String("\\b")), QString::SkipEmptyParts); + if (!cmdWords.contains(QLatin1String("help")) && !cmdWords.contains(QLatin1String("completion_matches"))) + { + foreach (const QString& plotCmd, m_plotCommands) + { + if (cmdWords.contains(plotCmd)) + { + setPlotPending(true); + qDebug() << "Executing a plot command"; + break; + } + } + } + if ( m_plotPending && !cmd.contains(QLatin1String("cantor_plot")) && !cmd.contains(QLatin1String(printCommand))) + { + // This was a manual plot, we have to add a print command + if (!cmd.endsWith(QLatin1Char(';')) && !cmd.endsWith(QLatin1Char(','))) + { + cmd += QLatin1Char(','); + m_appendDot = true; + } + cmd += QLatin1String(printCommand); + setCommand(cmd); + m_appendPlotCommand = true; + } + m_finished = false; + session()->enqueueExpression(this); +} + + +void OctaveExpression::parseOutput(const QString& output) +{ + qDebug() << "parseOutput: " << output; + + if (m_appendPlotCommand) + removeAppendedPlotCommand(); + + if (!output.trimmed().isEmpty()) + { + // TODO: what about help in comment? printf with '... help ...'? + // This must be corrected. + if (command().contains(QLatin1String("help"))) + { + setResult(new Cantor::HelpResult(output)); + } + else + { + setResult(new Cantor::TextResult(output)); + } + } + + // TODO: remove this, then there is method for notify both Highlighter and variable model about new variable + foreach ( const QString& line, output.simplified().split(QLatin1Char('\n'), QString::SkipEmptyParts) ) + { + if ((output.contains(QLatin1Char('='))) && !(command().startsWith(QLatin1String("help("))) + && !(command().contains(QLatin1String("help "))) && !(command().contains(QLatin1String("type(")))) + { + qDebug() << line; + // Probably a new variable + QStringList parts = line.split(QLatin1Char('=')); + if (parts.size() >= 2) + { + Cantor::DefaultVariableModel* model = dynamic_cast(session()->variableModel()); + if (model) + { + const QString varname = parts.first().trimmed(); + if (varname != QLatin1String("__cantor_tmp__")) + model->addVariable(varname, parts.last().trimmed()); + } + } + } + } + + m_finished = true; + if (!m_plotPending) + setStatus(Done); +} + +void OctaveExpression::parseError(const QString& error) +{ + setErrorMessage(error); + setStatus(Error); +} + +void OctaveExpression::parsePlotFile(const QString& file) +{ + qDebug() << "parsePlotFile"; + if (QFile::exists(file)) + { + qDebug() << "OctaveExpression::parsePlotFile: " << file; + + setResult(new OctavePlotResult(QUrl::fromLocalFile(file))); + setPlotPending(false); + + if (m_finished) + { + setStatus(Done); + } + } +} + +void OctaveExpression::setPlotPending(bool plot) +{ + m_plotPending = plot; +} + +void OctaveExpression::removeAppendedPlotCommand() +{ + QString cmd = command(); + cmd.remove(cmd.length()-strlen(printCommand),strlen(printCommand)); + m_appendPlotCommand = false; + if (m_appendDot) + { + cmd.remove(cmd.length()-1,1); + m_appendDot = false; + } + setCommand(cmd); +} diff --git a/src/backends/octave/octaveexpression.h b/src/backends/octave/octaveexpression.h new file mode 100644 index 0000000..ed18609 --- /dev/null +++ b/src/backends/octave/octaveexpression.h @@ -0,0 +1,64 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef OCTAVEEXPRESSION_H +#define OCTAVEEXPRESSION_H + +#include + +#include +#include + +#ifdef WITH_EPS +#include "epsresult.h" +using OctavePlotResult = Cantor::EpsResult; +#else +#include "imageresult.h" +typedef Cantor::ImageResult OctavePlotResult; +#endif + + +class OctaveExpression : public Cantor::Expression +{ + Q_OBJECT + +public: + explicit OctaveExpression(Cantor::Session*, bool internal = false); + + void interrupt() override; + void evaluate() override; + void parseOutput(const QString&); + void parseError(const QString&); + void parsePlotFile(const QString&); + + void setPlotPending(bool); + +private: + void removeAppendedPlotCommand(); + +private: + QString m_resultString; + bool m_plotPending; + bool m_finished; + bool m_appendPlotCommand; + bool m_appendDot; + QStringList m_plotCommands; +}; + +#endif // OCTAVEEXPRESSION_H diff --git a/src/backends/octave/octaveextensions.cpp b/src/backends/octave/octaveextensions.cpp new file mode 100644 index 0000000..4ee7e8e --- /dev/null +++ b/src/backends/octave/octaveextensions.cpp @@ -0,0 +1,214 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octaveextensions.h" +#include +#include + +#define OCTAVE_EXT_CDTOR(name) Octave##name##Extension::Octave##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Octave##name##Extension::~Octave##name##Extension() {} + + +const QList octaveMatrixOperators = QList() << QLatin1Char('*') << QLatin1Char('/') << QLatin1Char('^'); +const QString octavePrintFileCommand = QLatin1String("print('-depsc',strcat(tempname(tempdir,'c-ob-'),'.eps')); "); + +OCTAVE_EXT_CDTOR(History) + +QString OctaveHistoryExtension::lastResult() +{ + return QLatin1String("ans"); +} + +OCTAVE_EXT_CDTOR(Script) + +QString OctaveScriptExtension::runExternalScript(const QString& path) +{ + return QString::fromLatin1("source \"%1\"").arg(path); +} + +QString OctaveScriptExtension::scriptFileFilter() +{ + return i18n("Octave script file (*.m)"); +} + +QString OctaveScriptExtension::highlightingMode() +{ + return QLatin1String("octave"); +} + +QString OctaveScriptExtension::commandSeparator() +{ + return QLatin1String(";"); +} + +OCTAVE_EXT_CDTOR(Plot) + +QString OctavePlotExtension::plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) +{ + return QString::fromLatin1("cantor_plot2d('%1','%2',%3,%4);") + .arg(function) + .arg(variable) + .arg(left) + .arg(right); +} + +QString OctavePlotExtension::plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) +{ + return QString::fromLatin1("cantor_plot3d('%1','%2',%3,%4,'%5',%6,%7);") + .arg(function) + .arg(var1.first) + .arg(var1.second.first) + .arg(var1.second.second) + .arg(var2.first) + .arg(var2.second.first) + .arg(var2.second.second); +} + + +OCTAVE_EXT_CDTOR(LinearAlgebra) + +QString OctaveLinearAlgebraExtension::charPoly(const QString& matrix) +{ + return QString::fromLatin1("poly(%1)").arg(matrix); +} + +QString OctaveLinearAlgebraExtension::createMatrix(const Cantor::LinearAlgebraExtension::Matrix& matrix) +{ + QString command; + command += QLatin1Char('['); + foreach (const QStringList row, matrix) + { + foreach (const QString entry, row) + { + command += entry; + command += QLatin1String(", "); + } + command.chop(2); // Removes the last comma + command += QLatin1String("; "); + } + command.chop(2); // Removes the last semicolon + command += QLatin1Char(']'); + return command; +} + +QString OctaveLinearAlgebraExtension::createVector(const QStringList& entries, Cantor::LinearAlgebraExtension::VectorType type) +{ + QString separator; + if (type == ColumnVector) + { + separator = QLatin1String("; "); + } + else + { + separator = QLatin1String(", "); + } + QString command; + command += QLatin1Char('['); + foreach (const QString& entry, entries) + { + command += entry; + command += separator; + } + command.chop(1); + command += QLatin1Char(']'); + return command; +} + +QString OctaveLinearAlgebraExtension::eigenValues(const QString& matrix) +{ + return QString::fromLatin1("eig(%1)").arg(matrix); +} + +QString OctaveLinearAlgebraExtension::eigenVectors(const QString& matrix) +{ + return QString::fromLatin1("cantor_eigenvectors(%1)").arg(matrix); +} + +QString OctaveLinearAlgebraExtension::identityMatrix(int size) +{ + return QString::fromLatin1("eye(%1)").arg(size); +} + +QString OctaveLinearAlgebraExtension::invertMatrix(const QString& matrix) +{ + return QString::fromLatin1("inv(%1)").arg(matrix); +} + +QString OctaveLinearAlgebraExtension::nullMatrix(int rows, int columns) +{ + return QString::fromLatin1("zeros(%1,%2)").arg(rows).arg(columns); +} + +QString OctaveLinearAlgebraExtension::nullVector(int size, Cantor::LinearAlgebraExtension::VectorType type) +{ + QString command = QLatin1String("zeros(%1,%2)"); + switch (type) + { + case ColumnVector: + return command.arg(size).arg(1); + case RowVector: + return command.arg(1).arg(size); + default: + return Cantor::LinearAlgebraExtension::nullVector(size, type); + } +} + +QString OctaveLinearAlgebraExtension::rank(const QString& matrix) +{ + return QString::fromLatin1("rank(%1)").arg(matrix); +} + +OCTAVE_EXT_CDTOR(VariableManagement) + +QString OctaveVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + return setValue(name,value); +} + +QString OctaveVariableManagementExtension::setValue(const QString& name, const QString& value) +{ + return QString::fromLatin1("%1 = %2").arg(name).arg(value); +} + +QString OctaveVariableManagementExtension::removeVariable(const QString& name) +{ + return QString::fromLatin1("clear %1;").arg(name); +} + +QString OctaveVariableManagementExtension::clearVariables() +{ + return QLatin1String("clear;"); +} + +QString OctaveVariableManagementExtension::saveVariables(const QString& fileName) +{ + return QString::fromLatin1("save %1;").arg(fileName); +} + +QString OctaveVariableManagementExtension::loadVariables(const QString& fileName) +{ + return QString::fromLatin1("load %1;").arg(fileName); +} + +OCTAVE_EXT_CDTOR(Packaging) + +QString OctavePackagingExtension::importPackage(const QString& package) +{ + return QString::fromLatin1("pkg load %1").arg(package); +} diff --git a/src/backends/octave/octaveextensions.h b/src/backends/octave/octaveextensions.h new file mode 100644 index 0000000..0883226 --- /dev/null +++ b/src/backends/octave/octaveextensions.h @@ -0,0 +1,88 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef OCTAVEEXTENSIONS_H +#define OCTAVEEXTENSIONS_H + +#include + +#define OCTAVE_EXT_CDTOR_DECL(name) Octave##name##Extension(QObject* parent); \ + ~Octave##name##Extension(); + +class OctaveHistoryExtension : public Cantor::HistoryExtension +{ + public: + OCTAVE_EXT_CDTOR_DECL(History) + QString lastResult() override; +}; + +class OctaveScriptExtension : public Cantor::ScriptExtension +{ + public: + OCTAVE_EXT_CDTOR_DECL(Script) + QString scriptFileFilter() override; + QString highlightingMode() override; + QString runExternalScript(const QString& path) override; + QString commandSeparator() override; +}; + +class OctavePlotExtension : public Cantor::PlotExtension +{ + public: + OCTAVE_EXT_CDTOR_DECL(Plot) + QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) override; + QString plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) override; +}; + +class OctaveLinearAlgebraExtension : public Cantor::LinearAlgebraExtension +{ + public: + OCTAVE_EXT_CDTOR_DECL(LinearAlgebra) + QString createVector(const QStringList& entries, VectorType type) override; + QString nullVector(int size, VectorType type) override; + QString createMatrix(const Cantor::LinearAlgebraExtension::Matrix& matrix) override; + QString identityMatrix(int size) override; + QString nullMatrix(int rows, int columns) override; + QString rank(const QString& matrix) override; + QString invertMatrix(const QString& matrix) override; + QString charPoly(const QString& matrix) override; + QString eigenVectors(const QString& matrix) override; + QString eigenValues(const QString& matrix) override; +}; + +class OctaveVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + OCTAVE_EXT_CDTOR_DECL(VariableManagement) + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name, const QString& value) override; + QString removeVariable(const QString& name) override; + QString saveVariables(const QString& fileName) override; + QString loadVariables(const QString& fileName) override; + QString clearVariables() override; +}; + +class OctavePackagingExtension : public Cantor::PackagingExtension +{ + public: + OCTAVE_EXT_CDTOR_DECL(Packaging) + QString importPackage(const QString& package) override; +}; + +#endif // OCTAVEEXTENSIONS_H diff --git a/src/backends/octave/octavehighlighter.cpp b/src/backends/octave/octavehighlighter.cpp new file mode 100644 index 0000000..f23aeb0 --- /dev/null +++ b/src/backends/octave/octavehighlighter.cpp @@ -0,0 +1,95 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octavehighlighter.h" +#include "octavekeywords.h" +#include "result.h" + +#include +#include + +using namespace Cantor; + +OctaveHighlighter::OctaveHighlighter(QObject* parent, Session* session): DefaultHighlighter(parent), m_session(session) +{ + addKeywords(OctaveKeywords::instance()->keywords()); + addFunctions(OctaveKeywords::instance()->functions()); + + QStringList operators; + operators + << QLatin1String("+") << QLatin1String("-") << QLatin1String("*") << QLatin1String("/") + << QLatin1String(".+") << QLatin1String(".-") << QLatin1String(".*") << QLatin1String("./") + << QLatin1String("=") << QLatin1String("or") << QLatin1String("and") << QLatin1String("xor") + << QLatin1String("not") << QLatin1String("||") << QLatin1String("&&") << QLatin1String("=="); + addRules(operators, operatorFormat()); + + addRule(QRegExp(QLatin1String("\"[^\"]*\"")), stringFormat()); + addRule(QRegExp(QLatin1String("'[^']*'")), stringFormat()); + + addRule(QRegExp(QLatin1String("#[^\n]*")), commentFormat()); + addRule(QRegExp(QLatin1String("%[^\n]*")), commentFormat()); + + rehighlight(); +} + +void OctaveHighlighter::updateVariables() +{ + Expression* expr = m_session->evaluateExpression(QLatin1String("who"), Expression::FinishingBehavior::DoNotDelete, true); + connect(expr, &Expression::statusChanged, [this, expr](Expression::Status status) + { + if (status != Expression::Done && status != Expression::Error) + return; + + if (status == Expression::Done && expr->result()) + { + QString res = expr->result()->toHtml(); + res.replace(QLatin1String("
    "),QLatin1String(" ")); + res.remove(0, res.indexOf(QLatin1Char('\n'))); + res.remove(QLatin1Char('\n')); + res = res.trimmed(); + + QStringList newVariables; + foreach ( const QString& var, res.split(QLatin1Char(' '), QString::SkipEmptyParts)) + { + newVariables << var.trimmed(); + } + qDebug() << "Received" << newVariables.size() << "variables"; + + for (const QString& newVariable: newVariables) + if (!m_variables.contains(newVariable)) + addRule(newVariable, variableFormat()); + + for (const QString& variable: m_variables) + if (!newVariables.contains(variable)) + removeRule(variable); + + m_variables = std::move(newVariables); + rehighlight(); + } + expr->deleteLater(); + }); +} + +void OctaveHighlighter::sessionStatusChanged(Cantor::Session::Status status) +{ + if (status == Cantor::Session::Status::Disable) + for (const QString& variable: m_variables) + removeRule(variable); + rehighlight(); +} diff --git a/src/backends/octave/octavehighlighter.h b/src/backends/octave/octavehighlighter.h new file mode 100644 index 0000000..1849441 --- /dev/null +++ b/src/backends/octave/octavehighlighter.h @@ -0,0 +1,48 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef OCTAVEHIGHLIGHTER_H +#define OCTAVEHIGHLIGHTER_H + +#include "defaulthighlighter.h" +#include + +namespace Cantor +{ + class Expression; +} + +class OctaveHighlighter : public Cantor::DefaultHighlighter +{ + Q_OBJECT + + public: + OctaveHighlighter(QObject* parent, Cantor::Session* session); + ~OctaveHighlighter() override = default; + + public Q_SLOTS: + void updateVariables(); + void sessionStatusChanged(Cantor::Session::Status status); + + private: + Cantor::Session* m_session; + QStringList m_variables; +}; + +#endif // OCTAVEHIGHLIGHTER_H diff --git a/src/backends/octave/octavekeywords.cpp b/src/backends/octave/octavekeywords.cpp new file mode 100644 index 0000000..68e70fb --- /dev/null +++ b/src/backends/octave/octavekeywords.cpp @@ -0,0 +1,90 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita +*/ + +#include "octavekeywords.h" + +#include +#include + +OctaveKeywords::OctaveKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Octave")); + + //TODO: KSyntaxHighlighting provides "keywords", "functions", "forge", "builtin" and "commands". + //we use "keywords" and "functions" at the moment. decide what to do with "forge", "builtin" and "commands". + m_keywords = definition.keywordList(QLatin1String("keywords")); + + //TODO: the list of keywords in KSyntaxHighlighting doesn't have all the keywords added here. + //add the missing keywords to KSyntaxHighlighting and remove the custom handling for them here later. + m_keywords + << QLatin1String("function") << QLatin1String("endfunction") + << QLatin1String("for") << QLatin1String("endfor") + << QLatin1String("while") << QLatin1String("endwhile") + << QLatin1String("if") << QLatin1String("endif") << QLatin1String("else") + << QLatin1String("elseif") << QLatin1String("endswitch") + << QLatin1String("switch") << QLatin1String("case") + << QLatin1String("end") << QLatin1String("otherwise"); + + m_functions = definition.keywordList(QLatin1String("functions")); + //TODO: the list of keywords in KSyntaxHighlighting doesn't have all the functions for plotting that we take care of in the constructor of OctaveExpression. + //add the missing functions to KSyntaxHighlighting and remove the custom handling for them here later. + m_functions + << QLatin1String("plot") << QLatin1String("semilogx") << QLatin1String("semilogy") + << QLatin1String("loglog") << QLatin1String("polar") << QLatin1String("contour") + << QLatin1String("stairs") << QLatin1String("errorbar") << QLatin1String("sombrero") + << QLatin1String("hist") << QLatin1String("fplot") << QLatin1String("imshow") + << QLatin1String("stem") << QLatin1String("stem3") << QLatin1String("scatter") + << QLatin1String("pie") << QLatin1String("quiver") << QLatin1String("compass") + << QLatin1String("pareto") << QLatin1String("rose") << QLatin1String("feather") + << QLatin1String("pcolor") << QLatin1String("area") << QLatin1String("fill") + << QLatin1String("plotmatrix") << QLatin1String("bar") << QLatin1String("comet") + /* 3d-plots */ + << QLatin1String("plot3") << QLatin1String("isocaps") << QLatin1String("isonormals") + << QLatin1String("mesh") << QLatin1String("meshc") << QLatin1String("meshz") + << QLatin1String("surf") << QLatin1String("surfc") << QLatin1String("surfl") + << QLatin1String("surfnorm") << QLatin1String("isosurface") + /* 3d-plots defined by a function */ + << QLatin1String("ezplot3") << QLatin1String("ezmesh") << QLatin1String("ezmeshc") + << QLatin1String("ezsurf") << QLatin1String("ezsurfc"); +} + +OctaveKeywords* OctaveKeywords::instance() +{ + static OctaveKeywords* inst = nullptr; + + if(inst == nullptr){ + inst = new OctaveKeywords(); + qSort(inst->m_functions); + qSort(inst->m_keywords); + } + + return inst; +} + +const QStringList& OctaveKeywords::functions() const +{ + return m_functions; +} + +const QStringList& OctaveKeywords::keywords() const +{ + return m_keywords; +} diff --git a/src/backends/octave/octavekeywords.h b/src/backends/octave/octavekeywords.h new file mode 100644 index 0000000..a8c1647 --- /dev/null +++ b/src/backends/octave/octavekeywords.h @@ -0,0 +1,40 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita +*/ + +#ifndef _OCTAVEKEYWORDS_H +#define _OCTAVEKEYWORDS_H + +#include + +class OctaveKeywords +{ + public: + static OctaveKeywords* instance(); + + const QStringList& functions() const; + const QStringList& keywords() const; + + private: + OctaveKeywords(); + ~OctaveKeywords() = default; + QStringList m_functions; + QStringList m_keywords; +}; +#endif /* _OCTAVEKEYWORDS_H */ diff --git a/src/backends/octave/octavesession.cpp b/src/backends/octave/octavesession.cpp new file mode 100644 index 0000000..b958996 --- /dev/null +++ b/src/backends/octave/octavesession.cpp @@ -0,0 +1,400 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octavesession.h" +#include "octaveexpression.h" +#include "octavecompletionobject.h" +#include "octavesyntaxhelpobject.h" +#include "octavehighlighter.h" +#include "result.h" +#include "textresult.h" + +#include "settings.h" +#include "octave-backend-config.h" +#include "octavehighlighter.h" + +#include +#include +#include + +#include +#include + +#ifndef Q_OS_WIN +#include +#endif + +#include + +const QRegExp OctaveSession::PROMPT_UNCHANGEABLE_COMMAND = QRegExp(QLatin1String("(,|;)+")); + +OctaveSession::OctaveSession ( Cantor::Backend* backend ) : Session ( backend ), +m_process(nullptr), +m_prompt(QLatin1String("CANTOR_OCTAVE_BACKEND_PROMPT:([0-9]+)> ")), +m_subprompt(QLatin1String("CANTOR_OCTAVE_BACKEND_SUBPROMPT:([0-9]+)> ")), +m_previousPromptNumber(1), +m_watch(nullptr), +m_loginFinish(false), +m_syntaxError(false), +m_variableModel(new Cantor::DefaultVariableModel(this)) +{ + qDebug() << octaveScriptInstallDir; +} + +void OctaveSession::login() +{ + qDebug() << "login"; + emit loginStarted(); + + m_process = new KProcess ( this ); + QStringList args; + args << QLatin1String("--silent"); + args << QLatin1String("--interactive"); + args << QLatin1String("--persist"); + + // Setting prompt and subprompt + args << QLatin1String("--eval"); + args << QLatin1String("PS1('CANTOR_OCTAVE_BACKEND_PROMPT:\\#> ');"); + args << QLatin1String("--eval"); + args << QLatin1String("PS2('CANTOR_OCTAVE_BACKEND_SUBPROMPT:\\#> ');"); + + // Add the cantor script directory to search path + args << QLatin1String("--eval"); + args << QString::fromLatin1("addpath %1;").arg(octaveScriptInstallDir); + + if (OctaveSettings::integratePlots()) + { + // Do not show the popup when plotting, rather only print to a file + args << QLatin1String("--eval"); + args << QLatin1String("graphics_toolkit gnuplot;"); + args << QLatin1String("--eval"); + args << QLatin1String("set (0, \"defaultfigurevisible\",\"off\");"); + } + else + { + args << QLatin1String("--eval"); + args << QLatin1String("set (0, \"defaultfigurevisible\",\"on\");"); + } + + // Do not show extra text in help commands + args << QLatin1String("--eval"); + args << QLatin1String("suppress_verbose_help_message(1);"); + + // Print the temp dir, used for plot files + args << QLatin1String("--eval"); + args << QLatin1String("____TMP_DIR____ = tempdir"); + + if (OctaveSettings::integratePlots()) + { + m_watch = new KDirWatch(this); + m_watch->setObjectName(QLatin1String("OctaveDirWatch")); + connect (m_watch, SIGNAL(dirty(QString)), SLOT(plotFileChanged(QString)) ); + } + + // connect the signal and slots prior to staring octave to make sure we handle the very first output + // in parserOutput() to determine the temp folder and the format of the promt + connect ( m_process, SIGNAL (readyReadStandardOutput()), SLOT (readOutput()) ); + connect ( m_process, SIGNAL (readyReadStandardError()), SLOT (readError()) ); + connect ( m_process, SIGNAL (error(QProcess::ProcessError)), SLOT (processError()) ); + + m_process->setProgram ( OctaveSettings::path().toLocalFile(), args ); + qDebug() << "starting " << m_process->program(); + m_process->setOutputChannelMode ( KProcess::SeparateChannels ); + m_process->start(); + m_process->waitForStarted(); + m_process->waitForReadyRead(); + + if(!OctaveSettings::self()->autorunScripts().isEmpty()){ + QString autorunScripts = OctaveSettings::self()->autorunScripts().join(QLatin1String("\n")); + + evaluateExpression(autorunScripts, OctaveExpression::DeleteOnFinish, true); + } + + changeStatus(Cantor::Session::Done); + emit loginDone(); + qDebug()<<"login done"; +} + +void OctaveSession::logout() +{ + qDebug()<<"logout"; + + if(!m_process) + return; + + disconnect(m_process, nullptr, this, nullptr); + + // if(status()==Cantor::Session::Running) + // TODO: terminate the running expressions first + + m_process->write("exit\n"); + qDebug()<<"waiting for octave to finish"; + m_process->waitForFinished(); + qDebug()<<"octave exit finished"; + + if(m_process->state() != QProcess::NotRunning) + { + m_process->kill(); + qDebug()<<"octave still running, process kill enforced"; + } + + expressionQueue().clear(); + delete m_process; + m_process = nullptr; + + + m_tempDir.clear(); + m_output.clear(); + m_previousPromptNumber = 1; + m_loginFinish = false; + + m_variableModel->clearVariables(); + + changeStatus(Status::Disable); + + qDebug()<<"logout done"; +} + +void OctaveSession::interrupt() +{ + if(!expressionQueue().isEmpty()) + { + qDebug()<<"interrupting " << expressionQueue().first()->command(); + if(m_process->state() != QProcess::NotRunning) + { +#ifndef Q_OS_WIN + const int pid=m_process->pid(); + kill(pid, SIGINT); +#else + ; //TODO: interrupt the process on windows +#endif + } + expressionQueue().first()->interrupt(); + expressionQueue().removeFirst(); + + foreach (Cantor::Expression* expression, expressionQueue()) + expression->setStatus(Cantor::Expression::Done); + expressionQueue().clear(); + + // Cleanup inner state and call octave prompt printing + // If we move this code for interruption to Session, we need add function for + // cleaning before setting Done status + m_output.clear(); + m_process->write("\n"); + + qDebug()<<"done interrupting"; + } + + changeStatus(Cantor::Session::Done); +} + +void OctaveSession::processError() +{ + qDebug() << "processError"; + emit error(m_process->errorString()); +} + +Cantor::Expression* OctaveSession::evaluateExpression ( const QString& command, Cantor::Expression::FinishingBehavior finishingBehavior, bool internal ) +{ + qDebug() << "evaluating: " << command; + OctaveExpression* expression = new OctaveExpression ( this, internal); + expression->setCommand ( command ); + expression->setFinishingBehavior ( finishingBehavior ); + expression->evaluate(); + + return expression; +} + +void OctaveSession::runFirstExpression() +{ + OctaveExpression* expression = static_cast(expressionQueue().first()); + connect(expression, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(currentExpressionStatusChanged(Cantor::Expression::Status))); + QString command = expression->command(); + command.replace(QLatin1String(";\n"), QLatin1String(";")); + command.replace(QLatin1Char('\n'), QLatin1Char(',')); + command += QLatin1Char('\n'); + expression->setStatus(Cantor::Expression::Computing); + if (isDoNothingCommand(command)) + expression->setStatus(Cantor::Expression::Done); + else + { + m_process->write ( command.toLocal8Bit() ); + } +} + +void OctaveSession::readError() +{ + qDebug() << "readError"; + QString error = QString::fromLocal8Bit(m_process->readAllStandardError()); + if (!expressionQueue().isEmpty() && !error.isEmpty()) + { + OctaveExpression* const exp = static_cast(expressionQueue().first()); + if (m_syntaxError) + { + m_syntaxError = false; + exp->parseError(i18n("Syntax Error")); + } + else + exp->parseError(error); + + m_output.clear(); + } +} + +void OctaveSession::readOutput() +{ + qDebug() << "readOutput"; + while (m_process->bytesAvailable() > 0) + { + if (m_tempDir.isEmpty() && !m_process->canReadLine()) + { + qDebug() << "Waiting"; + // Wait for the full line containing octave's tempDir + return; + } + QString line = QString::fromLocal8Bit(m_process->readLine()); + qDebug()<<"start parsing " << " " << line; + if (!m_loginFinish) + { + // we're parsing the first output of octave after the start + // -> determine the location of the temporary folder + if (line.contains(QLatin1String("____TMP_DIR____"))) + { + m_tempDir = line; + m_tempDir.remove(0,18); + m_tempDir.chop(1); // isolate the tempDir's location + qDebug() << "Got temporary file dir:" << m_tempDir; + if (m_watch) + { + m_watch->addDir(m_tempDir, KDirWatch::WatchFiles); + } + m_loginFinish = true; + } + } + else if (line.contains(m_prompt)) + { + const int promptNumber = m_prompt.cap(1).toInt(); + if (!expressionQueue().isEmpty()) + { + const QString& command = expressionQueue().first()->command(); + if (m_previousPromptNumber + 1 == promptNumber || isSpecialOctaveCommand(command)) + { + if (!expressionQueue().isEmpty()) + { + if (command.contains(QLatin1String(" = ")) || command.contains(QLatin1String("clear"))) + { + emit variablesChanged(); + } + static_cast(expressionQueue().first())->parseOutput(m_output); + } + } + else + { + // Error command don't increase octave prompt number (usually, but not always) + readError(); + } + } + m_previousPromptNumber = promptNumber; + m_output.clear(); + } + else if (line.contains(m_subprompt) && m_subprompt.cap(1).toInt() == m_previousPromptNumber) + { + // User don't write finished octave statement (for example, write 'a = [1,2, ' only), so + // octave print subprompt and waits input finish. + m_syntaxError = true; + qDebug() << "subprompt catch"; + m_process->write(")]'\"\n"); // forse exit from subprompt + m_output.clear(); + } + else + m_output += line; + } +} + +void OctaveSession::currentExpressionStatusChanged(Cantor::Expression::Status status) +{ + qDebug() << "currentExpressionStatusChanged"; + switch (status) + { + case Cantor::Expression::Done: + case Cantor::Expression::Error: + expressionQueue().removeFirst(); + if (expressionQueue().isEmpty()) + changeStatus(Done); + else + runFirstExpression(); + break; + default: + break; + } +} + +void OctaveSession::plotFileChanged(const QString& filename) +{ + if (!QFile::exists(filename) || !filename.split(QLatin1Char('/')).last().contains(QLatin1String("c-ob-"))) + { + return; + } + + if (!expressionQueue().isEmpty()) + { + static_cast(expressionQueue().first())->parsePlotFile(filename); + } +} + +Cantor::CompletionObject* OctaveSession::completionFor ( const QString& cmd, int index ) +{ + return new OctaveCompletionObject ( cmd, index, this ); +} + +Cantor::SyntaxHelpObject* OctaveSession::syntaxHelpFor ( const QString& cmd ) +{ + return new OctaveSyntaxHelpObject ( cmd, this ); +} + +QSyntaxHighlighter* OctaveSession::syntaxHighlighter ( QObject* parent ) +{ + OctaveHighlighter* highlighter = new OctaveHighlighter ( parent, this ); + + connect ( this, SIGNAL(variablesChanged()), highlighter, SLOT(updateVariables()) ); + connect ( this, SIGNAL(statusChanged(Cantor::Session::Status)), highlighter, SLOT(sessionStatusChanged(Cantor::Session::Status)) ); + + return highlighter; +} + +QAbstractItemModel* OctaveSession::variableModel() +{ + return m_variableModel; +} + + +void OctaveSession::runSpecificCommands() +{ + m_process->write("figure(1,'visible','off')"); +} + +bool OctaveSession::isDoNothingCommand(const QString& command) +{ + return PROMPT_UNCHANGEABLE_COMMAND.exactMatch(command) || command.isEmpty(); +} + +bool OctaveSession::isSpecialOctaveCommand(const QString& command) +{ + return command.contains(QLatin1String("completion_matches")); +} diff --git a/src/backends/octave/octavesession.h b/src/backends/octave/octavesession.h new file mode 100644 index 0000000..97256d4 --- /dev/null +++ b/src/backends/octave/octavesession.h @@ -0,0 +1,90 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef OCTAVESESSION_H +#define OCTAVESESSION_H + +#include +#include +#include +#include +#include + +namespace Cantor { +class DefaultVariableModel; +} + +class KDirWatch; +class OctaveExpression; +class KProcess; + + +class OctaveSession : public Cantor::Session +{ + Q_OBJECT + public: + explicit OctaveSession(Cantor::Backend* backend); + ~OctaveSession() override = default; + void interrupt() override; + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior finishingBehavior = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + void logout() override; + void login() override; + Cantor::CompletionObject* completionFor(const QString& cmd, int index=-1) override; + Cantor::SyntaxHelpObject* syntaxHelpFor(const QString& cmd) override; + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + QAbstractItemModel* variableModel() override; + void runFirstExpression() override; + + Q_SIGNALS: + void variablesChanged(); + + private: + const static QRegExp PROMPT_UNCHANGEABLE_COMMAND; + + private: + KProcess* m_process; + QTextStream m_stream; + QRegExp m_prompt; + QRegExp m_subprompt; + int m_previousPromptNumber; + + KDirWatch* m_watch; + QString m_tempDir; + bool m_loginFinish; + bool m_syntaxError; + + QString m_output; + + Cantor::DefaultVariableModel* m_variableModel; + + private: + void readFromOctave(QByteArray data); + bool isDoNothingCommand(const QString& command); + bool isSpecialOctaveCommand(const QString& command); + + private Q_SLOTS: + void readOutput(); + void readError(); + void currentExpressionStatusChanged(Cantor::Expression::Status status); + void processError(); + void plotFileChanged(const QString& filename); + void runSpecificCommands(); +}; + +#endif // OCTAVESESSION_H diff --git a/src/backends/octave/octavesyntaxhelpobject.cpp b/src/backends/octave/octavesyntaxhelpobject.cpp new file mode 100644 index 0000000..c74be18 --- /dev/null +++ b/src/backends/octave/octavesyntaxhelpobject.cpp @@ -0,0 +1,61 @@ +/* + Copyright (C) 2010 Miha Čančula + + 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. +*/ + +#include "octavesyntaxhelpobject.h" +#include "session.h" +#include "result.h" + +#include + +OctaveSyntaxHelpObject::OctaveSyntaxHelpObject(const QString& command, Cantor::Session* session): SyntaxHelpObject(command, session), +m_expression(nullptr) +{ + +} + +void OctaveSyntaxHelpObject::fetchInformation() +{ + if (session()->status() != Cantor::Session::Disable) + { + qDebug() << "Fetching syntax help for" << command(); + QString expr = QString::fromLatin1("help('%1')").arg(command()); + m_expression = session()->evaluateExpression(expr, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::statusChanged, this, &OctaveSyntaxHelpObject::fetchingDone); + } + else + emit done(); +} + +void OctaveSyntaxHelpObject::fetchingDone() +{ + if (!m_expression || m_expression->status() != Cantor::Expression::Done) + { + return; + } + Cantor::Result* result = m_expression->result(); + if (result) + { + QString res = result->toHtml(); + res.remove(QLatin1String("
    ")); + res.remove(0, res.indexOf(QLatin1String("--"))); + setHtml(QLatin1Char(' ') + res.trimmed()); + } + m_expression->deleteLater(); + emit done(); +} diff --git a/src/backends/octave/octavesyntaxhelpobject.h b/src/backends/octave/octavesyntaxhelpobject.h new file mode 100644 index 0000000..aa43ee7 --- /dev/null +++ b/src/backends/octave/octavesyntaxhelpobject.h @@ -0,0 +1,47 @@ +/* + Copyright (C) 2010 Miha Čančula + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef OCTAVESYNTAXHELPOBJECT_H +#define OCTAVESYNTAXHELPOBJECT_H + +#include + +namespace Cantor +{ + class Expression; +} + +class OctaveSyntaxHelpObject : public Cantor::SyntaxHelpObject +{ + Q_OBJECT + public: + OctaveSyntaxHelpObject(const QString& command, Cantor::Session* session); + ~OctaveSyntaxHelpObject() override = default; + +protected: + void fetchInformation() override; + + private Q_SLOTS: + void fetchingDone(); + + private: + Cantor::Expression* m_expression; +}; + +#endif // OCTAVESYNTAXHELPOBJECT_H diff --git a/src/backends/octave/scripts/CMakeLists.txt b/src/backends/octave/scripts/CMakeLists.txt new file mode 100644 index 0000000..4e33c0d --- /dev/null +++ b/src/backends/octave/scripts/CMakeLists.txt @@ -0,0 +1,11 @@ +if (WITH_EPS) +set(PLOT_FILE_FORMAT epsc) +set(PLOT_FILE_SUFFIX eps) +else (WITH_EPS) +set(PLOT_FILE_FORMAT png) +set(PLOT_FILE_SUFFIX png) +endif (WITH_EPS) + +configure_file(cantor_print.m.in ${CMAKE_CURRENT_BINARY_DIR}/cantor_print.m) +install( FILES cantor_eigenvectors.m cantor_plot2d.m cantor_plot3d.m ${CMAKE_CURRENT_BINARY_DIR}/cantor_print.m DESTINATION ${OCTAVE_SCRIPT_INSTALL_DIR} ) + diff --git a/src/backends/octave/scripts/cantor_eigenvectors.m b/src/backends/octave/scripts/cantor_eigenvectors.m new file mode 100644 index 0000000..1a03902 --- /dev/null +++ b/src/backends/octave/scripts/cantor_eigenvectors.m @@ -0,0 +1,23 @@ +%{ + Copyright (C) 2010 Miha Čančula + + 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. +%} + +function v = cantor_eigenvectors(A) + [Vectors, Values] = eig(A); + v = Vectors; +endfunction \ No newline at end of file diff --git a/src/backends/octave/scripts/cantor_plot2d.m b/src/backends/octave/scripts/cantor_plot2d.m new file mode 100644 index 0000000..3f4a4c0 --- /dev/null +++ b/src/backends/octave/scripts/cantor_plot2d.m @@ -0,0 +1,33 @@ +%{ + Copyright (C) 2010 Miha Čančula + + 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. +%} + +function cantor_plot2d(f_string,var,min,max) + f_mod_string = f_string; + for op = ['*' '/' '^'] + f_mod_string = strrep(f_mod_string, op, strcat('.',op)); + endfor + + f = inline(f_mod_string, var); + x = linspace(min,max); + plot (x, f(x)); + + xlabel(var); + ylabel(f_string); + cantor_print(); +endfunction \ No newline at end of file diff --git a/src/backends/octave/scripts/cantor_plot3d.m b/src/backends/octave/scripts/cantor_plot3d.m new file mode 100644 index 0000000..bc8bed1 --- /dev/null +++ b/src/backends/octave/scripts/cantor_plot3d.m @@ -0,0 +1,34 @@ +%{ + Copyright (C) 2010 Miha Čančula + + 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. +%} + +function cantor_plot3d(f_string,var1,min1,max1,var2,min2,max2) + f_mod_string = f_string; + for op = ['*' '/' '^'] + f_mod_string = strrep(f_mod_string, op, strcat('.',op)); + endfor + + f = inline(f_mod_string, var1, var2); + [x,y] = meshgrid(linspace(min1,max1),linspace(min2,max2)); + mesh(x,y,f(x,y)); + + xlabel(var1); + ylabel(var2); + zlabel(f_string); + cantor_print(); +endfunction \ No newline at end of file diff --git a/src/backends/octave/scripts/cantor_print.m.in b/src/backends/octave/scripts/cantor_print.m.in new file mode 100644 index 0000000..c3c19a1 --- /dev/null +++ b/src/backends/octave/scripts/cantor_print.m.in @@ -0,0 +1,26 @@ +%{ + Copyright (C) 2010 Miha Čančula + + 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. +%} + +function cantor_print() + try + print('-d${PLOT_FILE_FORMAT}',strcat(tempname(tempdir,'c-ob-'),'.${PLOT_FILE_SUFFIX}'),'-S480,336','-tight'); + catch + print('-d${PLOT_FILE_FORMAT}',strcat(tempname(tempdir,'c-ob-'),'.${PLOT_FILE_SUFFIX}'),'-S480,336'); + end_try_catch +endfunction diff --git a/src/backends/octave/settings.kcfgc b/src/backends/octave/settings.kcfgc new file mode 100644 index 0000000..6d736bd --- /dev/null +++ b/src/backends/octave/settings.kcfgc @@ -0,0 +1,3 @@ +File=octavebackend.kcfg +ClassName=OctaveSettings +Singleton=true diff --git a/src/backends/octave/settings.ui b/src/backends/octave/settings.ui new file mode 100644 index 0000000..f96d8c4 --- /dev/null +++ b/src/backends/octave/settings.ui @@ -0,0 +1,71 @@ + + + OctaveSettingsBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Path to Octave: + + + + + + + + + + + + Integrate Plots in Worksheet + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/octave/testoctave.cpp b/src/backends/octave/testoctave.cpp new file mode 100644 index 0000000..5c607f2 --- /dev/null +++ b/src/backends/octave/testoctave.cpp @@ -0,0 +1,90 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "testoctave.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" +#include "imageresult.h" +#include "epsresult.h" + +#include "octaveexpression.h" + +#include + +QString TestOctave::backendName() +{ + return QLatin1String("octave"); +} + +void TestOctave::testSimpleCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( cleanOutput( e->result()->toHtml() ), QLatin1String("ans = 4") ); +} +void TestOctave::testMultilineCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("a = 2+2, b = 3+3") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QString result=e->result()->toHtml(); + + QCOMPARE( cleanOutput(result ), QLatin1String("a = 4\nb = 6") ); +} + +void TestOctave::testPlot() +{ + Cantor::Expression* e=evalExp( QLatin1String("cantor_plot2d('sin(x)', 'x', -10,10);") ); + + int cnt=0; + //give some time to create the image, but at most 5sec + while(e->result()==nullptr||e->result()->type()!=OctavePlotResult::Type ) + { + QTest::qWait(250); + cnt+=250; + if(cnt>5000) + break; + } + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + + QCOMPARE( e->result()->type(), (int) OctavePlotResult::Type ); + QVERIFY( !e->result()->data().isNull() ); +} + +void TestOctave::testInvalidSyntax() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2*+.") ); + + QVERIFY( e!=nullptr ); + QCOMPARE( e->status(), Cantor::Expression::Error ); +} + +QTEST_MAIN( TestOctave ) + diff --git a/src/backends/octave/testoctave.h b/src/backends/octave/testoctave.h new file mode 100644 index 0000000..177da04 --- /dev/null +++ b/src/backends/octave/testoctave.h @@ -0,0 +1,51 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _TESTOCTAVE_H +#define _TESTOCTAVE_H + +#include "backendtest.h" + +/** This class test some of the basic functions of the Octave backend + The different tests represent some general expressions, as well + as expressions, that are known to have caused problems in earlier + versions +**/ +class TestOctave : public BackendTest +{ + Q_OBJECT + +private Q_SLOTS: + //tests evaluating a simple command + void testSimpleCommand(); + //tests a command, containing more than 1 line + void testMultilineCommand(); + //tests doing a plot + void testPlot(); + //test a simple function + // void testFunction(); + //tests a syntax error (not closing bracket) + void testInvalidSyntax(); + +private: + QString backendName() override; +}; + +#endif /* _TESTOCTAVE_H */ diff --git a/src/backends/python/CMakeLists.txt b/src/backends/python/CMakeLists.txt new file mode 100644 index 0000000..2d10bf6 --- /dev/null +++ b/src/backends/python/CMakeLists.txt @@ -0,0 +1,28 @@ +set( PythonBackend_SRCS + pythonbackend.cpp + pythonsession.cpp + pythonexpression.cpp + pythonkeywords.cpp + pythonhighlighter.cpp + pythoncompletionobject.cpp + pythonextensions.cpp +) + +qt5_add_resources(PythonBackend_RSCS python.qrc) + +ki18n_wrap_ui(PythonBackend_SRCS settings.ui) + +add_library(cantor_pythonbackend SHARED ${PythonBackend_SRCS} ${PythonBackend_RSCS}) +generate_export_header(cantor_pythonbackend) + +target_link_libraries(cantor_pythonbackend + cantorlibs + KF5::KIOCore + KF5::ConfigCore + KF5::ConfigGui + KF5::SyntaxHighlighting + Qt5::DBus +) + +install(TARGETS cantor_pythonbackend DESTINATION ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) +#install(DIRECTORY . DESTINATION ${KDE_INSTALL_DATADIR}/cantor/pythonbackend FILES_MATCHING PATTERN "*.py") diff --git a/src/backends/python/import_default_modules.py b/src/backends/python/import_default_modules.py new file mode 100644 index 0000000..3ab3a10 --- /dev/null +++ b/src/backends/python/import_default_modules.py @@ -0,0 +1,4 @@ +try: + import numpy +except ModuleNotFoundError: + pass diff --git a/src/backends/python/python.qrc b/src/backends/python/python.qrc new file mode 100644 index 0000000..0c824d1 --- /dev/null +++ b/src/backends/python/python.qrc @@ -0,0 +1,8 @@ + + + import_default_modules.py + variables_cleaner.py + variables_loader.py + variables_saver.py + + diff --git a/src/backends/python/pythonbackend.cpp b/src/backends/python/pythonbackend.cpp new file mode 100644 index 0000000..579284c --- /dev/null +++ b/src/backends/python/pythonbackend.cpp @@ -0,0 +1,62 @@ +/* + 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. + + --- + Copyright (C) 2012 Filipe Saraiva + */ + +#include "pythonbackend.h" +#include "pythonsession.h" +#include "pythonextensions.h" +#include "ui_settings.h" + +#include +#include + +PythonBackend::PythonBackend(QObject* parent, const QList args) : Cantor::Backend(parent, args) +{ + qDebug()<<"Creating PythonBackend"; + + new PythonLinearAlgebraExtension(this); + new PythonPackagingExtension(this); + new PythonPlotExtension(this); + new PythonScriptExtension(this); + new PythonVariableManagementExtension(this); +} + +PythonBackend::~PythonBackend() +{ + qDebug()<<"Destroying PythonBackend"; +} + +Cantor::Backend::Capabilities PythonBackend::capabilities() const +{ + qDebug()<<"Requesting capabilities of PythonSession"; + + return Cantor::Backend::SyntaxHighlighting | + Cantor::Backend::Completion | + Cantor::Backend::SyntaxHelp | + Cantor::Backend::VariableManagement; +} + +QWidget* PythonBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget=new QWidget(parent); + Ui::PythonSettingsBase s; + s.setupUi(widget); + return widget; +} + diff --git a/src/backends/python/pythonbackend.h b/src/backends/python/pythonbackend.h new file mode 100644 index 0000000..0afc9ef --- /dev/null +++ b/src/backends/python/pythonbackend.h @@ -0,0 +1,41 @@ +/* + 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. + + --- + Copyright (C) 2012 Filipe Saraiva + */ + +#ifndef _PYTHONBACKEND_H +#define _PYTHONBACKEND_H + +#include "backend.h" +#include + +class CANTOR_PYTHONBACKEND_EXPORT PythonBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit PythonBackend(QObject* parent = nullptr, const QList args = QList()); + ~PythonBackend() override; + + Cantor::Backend::Capabilities capabilities() const override; + + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override = 0; +}; + + +#endif /* _PYTHONBACKEND_H */ diff --git a/src/backends/python/pythoncompletionobject.cpp b/src/backends/python/pythoncompletionobject.cpp new file mode 100644 index 0000000..617fe7e --- /dev/null +++ b/src/backends/python/pythoncompletionobject.cpp @@ -0,0 +1,169 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#include "pythoncompletionobject.h" + +#include + +#include "result.h" + +#include "pythonsession.h" +#include "pythonkeywords.h" + +PythonCompletionObject::PythonCompletionObject(const QString& command, int index, PythonSession* session) : Cantor::CompletionObject(session), +m_expression(nullptr) +{ + setLine(command, index); +} + +void PythonCompletionObject::fetchCompletions() +{ + if (session()->status() == Cantor::Session::Disable) + { + QStringList allCompletions; + + allCompletions << PythonKeywords::instance()->variables(); + allCompletions << PythonKeywords::instance()->functions(); + allCompletions << PythonKeywords::instance()->keywords(); + + setCompletions(allCompletions); + + emit fetchingDone(); + } + else + { + if (m_expression) + return; + + qDebug() << "run fetchCompletions"; + const QString& expr = QString::fromLatin1( + "from __main__ import __dict__;" + "from rlcompleter import Completer;" + "print('|'.join(Completer(__dict__).global_matches('%1')+Completer(__dict__).attr_matches('%1')))" + ).arg(command()); + m_expression = session()->evaluateExpression(expr, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::statusChanged, this, &PythonCompletionObject::extractCompletions); + // Python could exec the expression before connect, so manualy run handler + extractCompletions(m_expression->status()); + } +} + + + +void PythonCompletionObject::fetchIdentifierType() +{ + if (session()->status() == Cantor::Session::Disable) + { + if (qBinaryFind(PythonKeywords::instance()->functions().begin(), + PythonKeywords::instance()->functions().end(), identifier()) + != PythonKeywords::instance()->functions().end()) + emit fetchingTypeDone(FunctionType); + else if (qBinaryFind(PythonKeywords::instance()->keywords().begin(), + PythonKeywords::instance()->keywords().end(), identifier()) + != PythonKeywords::instance()->keywords().end()) + emit fetchingTypeDone(KeywordType); + else + emit fetchingTypeDone(VariableType); + } + else + { + if (m_expression) + return; + + const QString& expr = QString::fromLatin1("callable(%1)").arg(identifier()); + m_expression = session()->evaluateExpression(expr, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::statusChanged, this, &PythonCompletionObject::extractIdentifierType); + // Python could exec the expression before connect, so manualy run handler + extractIdentifierType(m_expression->status()); + } +} + +void PythonCompletionObject::extractCompletions(Cantor::Expression::Status status) +{ + if (!m_expression) + return; + switch(status) + { + case Cantor::Expression::Error: + qDebug() << "Error with PythonCompletionObject" << (m_expression->result() ? m_expression->result()->toHtml() : QLatin1String("extractCompletions")); + break; + + case Cantor::Expression::Interrupted: + qDebug() << "PythonCompletionObject was interrupted"; + break; + + case Cantor::Expression::Done: + if (m_expression->result()) + setCompletions(m_expression->result()->toHtml().remove(QLatin1Char('(')).split(QLatin1Char('|'))); + break; + default: + return; + } + m_expression->deleteLater(); + m_expression = nullptr; + emit fetchingDone(); +} + +void PythonCompletionObject::extractIdentifierType(Cantor::Expression::Status status) +{ + if (!m_expression) + return; + switch(status) + { + case Cantor::Expression::Error: + + if (m_expression->errorMessage().contains(QLatin1String("SyntaxError: invalid syntax"))) + emit fetchingTypeDone(KeywordType); + else + qDebug() << "Error with PythonCompletionObject" << (m_expression->result() ? m_expression->result()->toHtml() : QLatin1String("extractIdentifierType")); + break; + + case Cantor::Expression::Interrupted: + qDebug() << "PythonCompletionObject was interrupted"; + break; + + case Cantor::Expression::Done: + if (m_expression->result()) + { + if (m_expression->result()) + { + if (m_expression->result()->toHtml() == QLatin1String("True")) + emit fetchingTypeDone(FunctionType); + else + emit fetchingTypeDone(VariableType); + } + } + break; + default: + return; + } + m_expression->deleteLater(); + m_expression = nullptr; +} + +bool PythonCompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_') || c == QLatin1Char('%') || c == QLatin1Char('$') || c == QLatin1Char('.'); +} + +bool PythonCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c == QLatin1Char('_') || c == QLatin1Char('%') || c == QLatin1Char('$'); +} diff --git a/src/backends/python/pythoncompletionobject.h b/src/backends/python/pythoncompletionobject.h new file mode 100644 index 0000000..66babfd --- /dev/null +++ b/src/backends/python/pythoncompletionobject.h @@ -0,0 +1,49 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#ifndef _PYTHONCOMPLETIONOBJECT_H +#define _PYTHONCOMPLETIONOBJECT_H + +#include "completionobject.h" +#include "expression.h" + +class PythonSession; + +class PythonCompletionObject : public Cantor::CompletionObject +{ + public: + PythonCompletionObject(const QString& cmd, int index, PythonSession* session); + ~PythonCompletionObject() override = default; + + protected: + bool mayIdentifierContain(QChar c) const override; + bool mayIdentifierBeginWith(QChar c) const override; + + protected Q_SLOTS: + void fetchCompletions() override; + void fetchIdentifierType() override; + void extractCompletions(Cantor::Expression::Status status); + void extractIdentifierType(Cantor::Expression::Status status); + + private: + Cantor::Expression* m_expression; +}; + +#endif /* _PYTHONCOMPLETIONOBJECT_H */ diff --git a/src/backends/python/pythonexpression.cpp b/src/backends/python/pythonexpression.cpp new file mode 100644 index 0000000..7a00da7 --- /dev/null +++ b/src/backends/python/pythonexpression.cpp @@ -0,0 +1,104 @@ +/* + 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. + + --- + Copyright (C) 2012 Filipe Saraiva + */ + +#include "pythonexpression.h" + +#include + +#include "textresult.h" +#include "imageresult.h" +#include "helpresult.h" +#include +#include +#include +#include "pythonsession.h" +#include "settings.h" + +#include +#include +#include + +PythonExpression::PythonExpression(Cantor::Session* session, bool internal) : Cantor::Expression(session, internal), + m_tempFile(nullptr) +{ +} + +PythonExpression::~PythonExpression() { + if(m_tempFile) + delete m_tempFile; +} + +void PythonExpression::evaluate() +{ + if(m_tempFile) { + delete m_tempFile; + m_tempFile = nullptr; + } + + PythonSession* pythonSession = dynamic_cast(session()); + if((pythonSession->integratePlots()) && (command().contains(QLatin1String("show()")))){ + m_tempFile = new QTemporaryFile(QDir::tempPath() + QLatin1String("/cantor_python-XXXXXX.png")); + m_tempFile->open(); + QString saveFigCommand = QLatin1String("savefig('%1')"); + setCommand(command().replace(QLatin1String("show()"), saveFigCommand.arg(m_tempFile->fileName()))); + + QFileSystemWatcher* watcher = fileWatcher(); + watcher->removePaths(watcher->files()); + watcher->addPath(m_tempFile->fileName()); + connect(watcher, &QFileSystemWatcher::fileChanged, this, &PythonExpression::imageChanged, Qt::UniqueConnection); + + } + + pythonSession->runExpression(this); +} + +void PythonExpression::parseOutput(QString output) +{ + qDebug() << "output: " << output; + + if(command().simplified().startsWith(QLatin1String("help("))){ + setResult(new Cantor::HelpResult(output.remove(output.lastIndexOf(QLatin1String("None")), 4))); + } else { + if (!output.isEmpty()) + setResult(new Cantor::TextResult(output)); + } + + setStatus(Cantor::Expression::Done); +} + +void PythonExpression::parseError(QString error) +{ + qDebug() << "error: " << error; + setErrorMessage(error.replace(QLatin1String("\n"), QLatin1String("
    "))); + + setStatus(Cantor::Expression::Error); +} + +void PythonExpression::imageChanged() +{ + addResult(new Cantor::ImageResult(QUrl::fromLocalFile(m_tempFile->fileName()))); + setStatus(Done); +} + +void PythonExpression::interrupt() +{ + qDebug()<<"interruptinging command"; + setStatus(Cantor::Expression::Interrupted); +} diff --git a/src/backends/python/pythonexpression.h b/src/backends/python/pythonexpression.h new file mode 100644 index 0000000..b5c4d46 --- /dev/null +++ b/src/backends/python/pythonexpression.h @@ -0,0 +1,45 @@ +/* + 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. + + --- + Copyright (C) 2012 Filipe Saraiva + */ + +#ifndef _PYTHONEXPRESSION_H +#define _PYTHONEXPRESSION_H + +#include "expression.h" + +class QTemporaryFile; + +class PythonExpression : public Cantor::Expression +{ + Q_OBJECT + public: + PythonExpression(Cantor::Session* session, bool internal); + ~PythonExpression() override; + + void evaluate() override; + void interrupt() override; + void parseOutput(QString output); + void parseError(QString error); + + private: + void imageChanged(); + QTemporaryFile* m_tempFile; +}; + +#endif /* _PYTHONEXPRESSION_H */ diff --git a/src/backends/python/pythonextensions.cpp b/src/backends/python/pythonextensions.cpp new file mode 100644 index 0000000..4431e9f --- /dev/null +++ b/src/backends/python/pythonextensions.cpp @@ -0,0 +1,222 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#include "pythonextensions.h" + +#include + +#include + +#include "pythonutils.h" + +#define PYTHON_EXT_CDTOR(name) Python##name##Extension::Python##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Python##name##Extension::~Python##name##Extension() {} + +PYTHON_EXT_CDTOR(LinearAlgebra) + +QString PythonLinearAlgebraExtension::createVector(const QStringList& entries, Cantor::LinearAlgebraExtension::VectorType type) +{ + Q_UNUSED(type); + + QString command; + command += QLatin1String("numpy.matrix(["); + + foreach (const QString& entry, entries) + { + command += entry + QLatin1String(", "); + } + + command.chop(2); + command += QLatin1String("])\n"); + + return command; +} + +QString PythonLinearAlgebraExtension::createMatrix(const Cantor::LinearAlgebraExtension::Matrix& matrix) +{ + QString command; + command += QLatin1String("numpy.matrix([["); + + foreach (const QStringList row, matrix) + { + foreach (const QString entry, row) + { + command += entry; + command += QLatin1String(", "); + } + command.chop(2); + command += QLatin1String("], ["); + } + + command.chop(3); + command += QLatin1String("])"); + + return command; +} + +QString PythonLinearAlgebraExtension::eigenValues(const QString& matrix) +{ + return QString::fromLatin1("numpy.linalg.eigvals(%1)").arg(matrix); +} + +QString PythonLinearAlgebraExtension::eigenVectors(const QString& matrix) +{ + return QString::fromLatin1("numpy.linalg.eig(%1)").arg(matrix); +} + +QString PythonLinearAlgebraExtension::identityMatrix(int size) +{ + return QString::fromLatin1("numpy.identity(%1)").arg(size); +} + +QString PythonLinearAlgebraExtension::invertMatrix(const QString& matrix) +{ + return QString::fromLatin1("numpy.linalg.inv(%1)").arg(matrix); +} + +QString PythonLinearAlgebraExtension::nullMatrix(int rows, int columns) +{ + return QString::fromLatin1("numpy.zeros(%1, %2)").arg(rows).arg(columns); +} + +QString PythonLinearAlgebraExtension::nullVector(int size, Cantor::LinearAlgebraExtension::VectorType type) +{ + QString command = QLatin1String("numpy.zeros(%1, %2)"); + switch (type) + { + case ColumnVector: + return command.arg(size).arg(1); + case RowVector: + return command.arg(1).arg(size); + default: + return Cantor::LinearAlgebraExtension::nullVector(size, type); + } +} + +QString PythonLinearAlgebraExtension::rank(const QString& matrix) +{ + return QString::fromLatin1("numpy.linalg.matrix_rank(%1)").arg(matrix); +} + +QString PythonLinearAlgebraExtension::charPoly(const QString& matrix) +{ + return QString::fromLatin1("numpy.poly(%1)").arg(matrix); +} + +PYTHON_EXT_CDTOR(Packaging) + +QString PythonPackagingExtension::importPackage(const QString& package) +{ + return QString::fromLatin1("import %1").arg(package); +} + +PYTHON_EXT_CDTOR(Plot) + +QString PythonPlotExtension::plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) +{ + QString argumentToPlot = variable; + QString xlimits; + + if(!function.isEmpty()){ + argumentToPlot = function + QLatin1String("(") + variable + QLatin1String(")"); + } + + if(!left.isEmpty() && !right.isEmpty()){ + xlimits = QString::fromLatin1("pylab.xlim(%1, %2)\n").arg(left, right); + } + + return QString::fromLatin1("pylab.clf()\n" \ + "pylab.plot(%1)\n" \ + "%2" \ + "pylab.show()").arg(argumentToPlot, xlimits); +} + +QString PythonPlotExtension::plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) +{ + const Interval& interval1 = var1.second; + const Interval& interval2 = var2.second; + + QString interval1Limits; + QString interval2Limits; + + if(!interval1.first.isEmpty() && !interval1.second.isEmpty()){ + interval1Limits = QString::fromLatin1("ax3D.set_xlim3d(%1, %2)\n").arg(interval1.first, interval1.second); + } + + if(!interval2.first.isEmpty() && !interval2.second.isEmpty()){ + interval2Limits = QString::fromLatin1("ax3D.set_ylim3d(%1, %2)\n").arg(interval2.first, interval2.second); + } + + return QString::fromLatin1("from mpl_toolkits.mplot3d import Axes3D\n\n" \ + "fig3D = pylab.figure()\n" \ + "ax3D = fig3D.gca(projection='3d')\n" \ + "ax3D.plot_surface(%1, %2, %3(%1, %2), rstride=4, cstride=4)\n" \ + "%4%5" \ + "pylab.show()").arg(var1.first).arg(var2.first, function, interval1Limits, interval2Limits); +} + +PYTHON_EXT_CDTOR(Script) + +QString PythonScriptExtension::runExternalScript(const QString& path) +{ + return QString::fromLatin1("exec(open(\"%1\").read())").arg(path); +} + +QString PythonScriptExtension::scriptFileFilter() +{ + return i18n("Python script file (*.py)"); +} + +QString PythonScriptExtension::highlightingMode() +{ + return QLatin1String("python"); +} + +PYTHON_EXT_CDTOR(VariableManagement) + +QString PythonVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + return setValue(name, value); +} + +QString PythonVariableManagementExtension::setValue(const QString& name, const QString& value) +{ + return QString::fromLatin1("%1 = %2").arg(name, value); +} + +QString PythonVariableManagementExtension::removeVariable(const QString& name) +{ + return QString::fromLatin1("del(%1)").arg(name); +} + +QString PythonVariableManagementExtension::clearVariables() +{ + return fromSource(QLatin1String(":py/variables_cleaner.py")); +} + +QString PythonVariableManagementExtension::saveVariables(const QString& fileName) +{ + return fromSource(QLatin1String(":py/variables_saver.py")).arg(fileName); +} + +QString PythonVariableManagementExtension::loadVariables(const QString& fileName) +{ + return fromSource(QLatin1String(":py/variables_loader.py")).arg(fileName); +} diff --git a/src/backends/python/pythonextensions.h b/src/backends/python/pythonextensions.h new file mode 100644 index 0000000..41e6085 --- /dev/null +++ b/src/backends/python/pythonextensions.h @@ -0,0 +1,81 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#ifndef PYTHONEXTENSIONS_H +#define PYTHONEXTENSIONS_H + +#include + +#define PYTHON_EXT_CDTOR_DECL(name) Python##name##Extension(QObject* parent); \ + ~Python##name##Extension(); + +class PythonLinearAlgebraExtension : public Cantor::LinearAlgebraExtension +{ + public: + PYTHON_EXT_CDTOR_DECL(LinearAlgebra) + QString createVector(const QStringList& entries, VectorType type) override; + QString nullVector(int size, VectorType type) override; + QString createMatrix(const Cantor::LinearAlgebraExtension::Matrix& matrix) override; + QString identityMatrix(int size) override; + QString nullMatrix(int rows, int columns) override; + QString rank(const QString& matrix) override; + QString invertMatrix(const QString& matrix) override; + QString charPoly(const QString& matrix) override; + QString eigenVectors(const QString& matrix) override; + QString eigenValues(const QString& matrix) override; +}; + +class PythonPackagingExtension : public Cantor::PackagingExtension +{ + public: + PYTHON_EXT_CDTOR_DECL(Packaging) + QString importPackage(const QString& module) override; +}; + +class PythonPlotExtension : public Cantor::PlotExtension +{ + public: + PYTHON_EXT_CDTOR_DECL(Plot) + QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) override; + QString plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) override; +}; + +class PythonScriptExtension : public Cantor::ScriptExtension +{ + public: + PYTHON_EXT_CDTOR_DECL(Script) + QString scriptFileFilter() override; + QString highlightingMode() override; + QString runExternalScript(const QString& path) override; +}; + +class PythonVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + PYTHON_EXT_CDTOR_DECL(VariableManagement) + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name, const QString& value) override; + QString removeVariable(const QString& name) override; + QString saveVariables(const QString& fileName) override; + QString loadVariables(const QString& fileName) override; + QString clearVariables() override; +}; + +#endif // PYTHONEXTENSIONS_H diff --git a/src/backends/python/pythonhighlighter.cpp b/src/backends/python/pythonhighlighter.cpp new file mode 100644 index 0000000..4d17d00 --- /dev/null +++ b/src/backends/python/pythonhighlighter.cpp @@ -0,0 +1,162 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#include "pythonhighlighter.h" +#include "pythonkeywords.h" + +#include +#include + +PythonHighlighter::PythonHighlighter(QObject* parent, const int pythonVersion) : Cantor::DefaultHighlighter(parent) +{ + qDebug() << "PythonHighlighter constructor"; + addRule(QRegExp(QLatin1String("\\b\\w+(?=\\()")), functionFormat()); + + //Code highlighting the different keywords + addKeywords(PythonKeywords::instance()->keywords()); + addFunctions(PythonKeywords::instance()->functions()); + addVariables(PythonKeywords::instance()->variables()); + + if (pythonVersion == 2) + { + removeRule(QLatin1String("print")); + addRule(QLatin1String("print"), keywordFormat()); + } +} + +void PythonHighlighter::highlightBlock(const QString &text) +{ + if (skipHighlighting(text)) { + return; + } + + // Do some backend independent highlighting (brackets etc.) + DefaultHighlighter::highlightBlock(text); + + const int IN_MULTILINE_COMMENT = 1; + const int IN_SMALL_QUOTE_STRING = 2; + const int IN_SINGLE_QUOTE_STRING = 4; + const int IN_TRIPLE_QUOTE_STRING = 8; + + QRegExp multiLineCommentStartEnd(QLatin1String("'''")); + QRegExp smallQuoteStartEnd(QLatin1String("'")); + QRegExp singleQuoteStringStartEnd(QLatin1String("\"")); + QRegExp tripleQuoteStringStartEnd(QLatin1String("\"\"\"")); + QRegExp singleLineCommentStart(QLatin1String("#")); + + int state = previousBlockState(); + if (state == -1) { + state = 0; + } + + QList flags = { + IN_TRIPLE_QUOTE_STRING, + IN_SINGLE_QUOTE_STRING, + IN_SMALL_QUOTE_STRING, + IN_MULTILINE_COMMENT + }; + QList regexps = { + tripleQuoteStringStartEnd, + singleQuoteStringStartEnd, + smallQuoteStartEnd, + multiLineCommentStartEnd + }; + QList formats = { + stringFormat(), + stringFormat(), + stringFormat(), + commentFormat() + }; + + int pos = 0; + while (pos < text.length()) { + // Trying to close current environments + bool triggered = false; + for (int i = 0; i < flags.size() && !triggered; i++) { + int flag = flags[i]; + QRegExp ®exp = regexps[i]; + QTextCharFormat &format = formats[i]; + if (state & flag) { + int new_pos = regexp.indexIn(text, pos); + int length; + if (new_pos == -1) { + length = text.length() - pos; + } else { + length = new_pos - pos + regexp.matchedLength(); + state -= flag; + } + setFormat(pos, length, format); + pos = pos + length; + triggered = true; + } + } + if (triggered) { + continue; + } + + QRegExp *minRegexp = nullptr; + int minPos = INT_MAX; + int minIdx = -1; + for (int i = 0; i < regexps.size(); i++) { + QRegExp ®exp = regexps[i]; + int newPos = regexp.indexIn(text, pos); + if (newPos != -1) { + minPos = qMin(minPos, newPos); + minRegexp = ®exp; + minIdx = i; + } + } + + int singleLineCommentStartPos = + singleLineCommentStart.indexIn(text, pos); + + if (singleLineCommentStartPos != -1 + && singleLineCommentStartPos < minPos) { + setFormat(pos, text.length() - pos, commentFormat()); + break; + } else if (minRegexp) { + state += flags[minIdx]; + pos = minPos + minRegexp->matchedLength(); + setFormat(minPos, minRegexp->matchedLength(), formats[minIdx]); + } else { + break; + } + } + + setCurrentBlockState(state); +} + +void PythonHighlighter::updateHighlight() +{ + addVariables(m_variables); + rehighlight(); +} + +void PythonHighlighter::addVariable(const QString variable) +{ + m_variables << variable; +} + +void PythonHighlighter::clearVariables() +{ + removeRules(m_variables); + m_variables.clear(); + rehighlight(); +} diff --git a/src/backends/python/pythonhighlighter.h b/src/backends/python/pythonhighlighter.h new file mode 100644 index 0000000..56d86d7 --- /dev/null +++ b/src/backends/python/pythonhighlighter.h @@ -0,0 +1,49 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#ifndef _PYTHONHIGHLIGHTER_H +#define _PYTHONHIGHLIGHTER_H + +#include "defaulthighlighter.h" + +class PythonHighlighter : public Cantor::DefaultHighlighter +{ + Q_OBJECT + + public: + explicit PythonHighlighter(QObject* parent, const int pythonVersion); + ~PythonHighlighter() override = default; + + public Q_SLOTS: + void updateHighlight(); + void addVariable(const QString variable); + void clearVariables(); + + protected: + void highlightBlock(const QString& text) override; + + private: + QRegExp commentStartExpression; + QRegExp commentEndExpression; + QStringList m_variables; + +}; + +#endif /* _PYTHONHIGHLIGHTER_H */ diff --git a/src/backends/python/pythonkeywords.cpp b/src/backends/python/pythonkeywords.cpp new file mode 100644 index 0000000..b84cc58 --- /dev/null +++ b/src/backends/python/pythonkeywords.cpp @@ -0,0 +1,98 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "pythonkeywords.h" + +#include +#include + +#include +#include + +PythonKeywords::PythonKeywords() +{ + qDebug() << "PythonKeywords constructor"; + +} + +PythonKeywords* PythonKeywords::instance() +{ + static PythonKeywords* inst = nullptr; + if(inst == nullptr) + { + inst = new PythonKeywords(); + inst->loadKeywords(); + } + + return inst; +} + +void PythonKeywords::loadKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Python")); + + m_keywords << definition.keywordList(QLatin1String("import")); + m_keywords << definition.keywordList(QLatin1String("defs")); + m_keywords << definition.keywordList(QLatin1String("operators")); + m_keywords << definition.keywordList(QLatin1String("flow")); + + m_functions << definition.keywordList(QLatin1String("builtinfuncs")); + m_functions << definition.keywordList(QLatin1String("overloaders")); + + m_variables << definition.keywordList(QLatin1String("specialvars")); + + // We use qBinarySearch in PythonCompletetionObject for type fetching + qSort(m_keywords); + qSort(m_functions); + qSort(m_variables); +} + +void PythonKeywords::loadFromModule(const QString& module, const QStringList& keywords) +{ + qDebug() << "Module imported" << module; + + if (module.isEmpty()){ + for(int contKeyword = 0; contKeyword < keywords.size(); contKeyword++){ + m_functions << keywords.at(contKeyword); + } + } else { + m_variables << module; + + for(int contKeyword = 0; contKeyword < keywords.size(); contKeyword++){ + m_functions << module + QLatin1String(".") + keywords.at(contKeyword); + } + } +} + +const QStringList& PythonKeywords::variables() const +{ + return m_variables; +} + +const QStringList& PythonKeywords::functions() const +{ + return m_functions; +} + +const QStringList& PythonKeywords::keywords() const +{ + return m_keywords; +} diff --git a/src/backends/python/pythonkeywords.h b/src/backends/python/pythonkeywords.h new file mode 100644 index 0000000..72abccd --- /dev/null +++ b/src/backends/python/pythonkeywords.h @@ -0,0 +1,48 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#ifndef _PYTHONKEYWORDS_H +#define _PYTHONKEYWORDS_H + +#include + +class PythonKeywords +{ + private: + PythonKeywords(); + ~PythonKeywords() = default; + public: + static PythonKeywords* instance(); + + const QStringList& functions() const; + const QStringList& keywords() const; + const QStringList& variables() const; + + void loadFromModule(const QString& module, const QStringList& keywords); + + private: + void loadKeywords(); + + private: + QStringList m_functions; + QStringList m_keywords; + QStringList m_variables; +}; +#endif /* _PYTHONKEYWORDS_H */ diff --git a/src/backends/python/pythonserver.cpp b/src/backends/python/pythonserver.cpp new file mode 100644 index 0000000..be23a19 --- /dev/null +++ b/src/backends/python/pythonserver.cpp @@ -0,0 +1,117 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#include "pythonserver.h" + +#include + +PythonServer::PythonServer(QObject* parent) : QObject(parent), m_pModule(nullptr) +{ +} + +namespace +{ + QString pyObjectToQString(PyObject* obj) + { +#if PY_MAJOR_VERSION == 3 + return QString::fromUtf8(PyUnicode_AsUTF8(obj)); +#elif PY_MAJOR_VERSION == 2 + return QString::fromLocal8Bit(PyString_AsString(obj)); +#else + #warning Unknown Python version +#endif + } +} + +void PythonServer::login() +{ + Py_InspectFlag = 1; + Py_Initialize(); + m_pModule = PyImport_AddModule("__main__"); + filePath = QLatin1String("python_cantor_worksheet"); +} + +void PythonServer::runPythonCommand(const QString& command) const +{ + PyObject* py_dict = PyModule_GetDict(m_pModule); + + const char* prepareCommand = + "import sys;\n"\ + "class CatchOutPythonBackend:\n"\ + " def __init__(self):\n"\ + " self.value = ''\n"\ + " def write(self, txt):\n"\ + " self.value += txt\n"\ + "outputPythonBackend = CatchOutPythonBackend()\n"\ + "errorPythonBackend = CatchOutPythonBackend()\n"\ + "sys.stdout = outputPythonBackend\n"\ + "sys.stderr = errorPythonBackend\n"; + PyRun_SimpleString(prepareCommand); + + PyObject* compile = Py_CompileString(command.toStdString().c_str(), filePath.toStdString().c_str(), Py_single_input); + // There are two reasons for the error: + // 1) This code is not single expression, so we can't compile this with flag Py_single_input + // 2) There are errors in the code + if (PyErr_Occurred()) + { + PyErr_Clear(); + // Try to recompile code as sequence of expressions + compile = Py_CompileString(command.toStdString().c_str(), filePath.toStdString().c_str(), Py_file_input); + if (PyErr_Occurred()) + { + // We now know, that we have a syntax error, so print the traceback and exit + PyErr_PrintEx(0); + return; + } + } +#if PY_MAJOR_VERSION == 3 + PyEval_EvalCode(compile, py_dict, py_dict); +#elif PY_MAJOR_VERSION == 2 + PyEval_EvalCode((PyCodeObject*)compile, py_dict, py_dict); +#else + #warning Unknown Python version +#endif + if (PyErr_Occurred()) + PyErr_PrintEx(0); +} + +QString PythonServer::getError() const +{ + PyObject *errorPython = PyObject_GetAttrString(m_pModule, "errorPythonBackend"); + PyObject *error = PyObject_GetAttrString(errorPython, "value"); + + return pyObjectToQString(error); +} + +QString PythonServer::getOutput() const +{ + PyObject *outputPython = PyObject_GetAttrString(m_pModule, "outputPythonBackend"); + PyObject *output = PyObject_GetAttrString(outputPython, "value"); + + return pyObjectToQString(output); +} + +void PythonServer::setFilePath(const QString& path) +{ + this->filePath = path; + PyRun_SimpleString(("__file__ = '"+path.toStdString()+"'").c_str()); +} + + diff --git a/src/backends/python/pythonserver.h b/src/backends/python/pythonserver.h new file mode 100644 index 0000000..b4cd0f4 --- /dev/null +++ b/src/backends/python/pythonserver.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#ifndef _PYTHONSERVER_H +#define _PYTHONSERVER_H +#include +#include + +struct _object; +using PyObject = _object; + +class PythonServer : public QObject +{ + Q_OBJECT + public: + explicit PythonServer(QObject* parent = nullptr); + + public Q_SLOTS: + Q_SCRIPTABLE void login(); + Q_SCRIPTABLE void setFilePath(const QString& path); + Q_SCRIPTABLE void runPythonCommand(const QString& command) const; + Q_SCRIPTABLE QString getOutput() const; + Q_SCRIPTABLE QString getError() const; + + private: + PyObject* m_pModule; + QString filePath; +}; + +#endif diff --git a/src/backends/python/pythonsession.cpp b/src/backends/python/pythonsession.cpp new file mode 100644 index 0000000..52d1381 --- /dev/null +++ b/src/backends/python/pythonsession.cpp @@ -0,0 +1,430 @@ +/* + 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. + + --- + Copyright (C) 2012 Filipe Saraiva + Copyright (C) 2015 Minh Ngo + */ + +#include "pythonsession.h" +#include "pythonexpression.h" +#include "pythonhighlighter.h" +#include "pythoncompletionobject.h" +#include "pythonkeywords.h" +#include "pythonutils.h" + +#include +#include + +#include +#include +#include +#include + +#include + +#include + +#include + + +PythonSession::PythonSession(Cantor::Backend* backend, int pythonVersion, const QString serverName, const QString DbusChannelName) + : Session(backend) + , m_variableModel(new Cantor::DefaultVariableModel(this)) + , m_currentExpression(nullptr) + , m_pIface(nullptr) + , m_pProcess(nullptr) + , serverName(serverName) + , DbusChannelName(DbusChannelName) + , m_pythonVersion(pythonVersion) +{ +} + +void PythonSession::login() +{ + qDebug()<<"login"; + emit loginStarted(); + + // TODO: T6113, T6114 + if (m_pProcess) + m_pProcess->deleteLater(); + + m_pProcess = new KProcess(this); + m_pProcess->setOutputChannelMode(KProcess::SeparateChannels); + + (*m_pProcess) << QStandardPaths::findExecutable(serverName); + + m_pProcess->start(); + + m_pProcess->waitForStarted(); + m_pProcess->waitForReadyRead(); + QTextStream stream(m_pProcess->readAllStandardOutput()); + + const QString& readyStatus = QString::fromLatin1("ready"); + while (m_pProcess->state() == QProcess::Running) + { + const QString& rl = stream.readLine(); + if (rl == readyStatus) + break; + } + + if (!QDBusConnection::sessionBus().isConnected()) + { + qWarning() << "Can't connect to the D-Bus session bus.\n" + "To start it, run: eval `dbus-launch --auto-syntax`"; + return; + } + + const QString& serviceName = DbusChannelName + QString::fromLatin1("-%1").arg(m_pProcess->pid()); + + m_pIface = new QDBusInterface(serviceName, + QString::fromLatin1("/"), QString(), QDBusConnection::sessionBus()); + if (!m_pIface->isValid()) + { + qWarning() << QDBusConnection::sessionBus().lastError().message(); + return; + } + + m_pIface->call(QString::fromLatin1("login")); + m_pIface->call(QString::fromLatin1("setFilePath"), worksheetPath); + + const QStringList& scripts = autorunScripts(); + if(!scripts.isEmpty()){ + QString autorunScripts = scripts.join(QLatin1String("\n")); + getPythonCommandOutput(autorunScripts); + } + + const QString& importerFile = QLatin1String(":py/import_default_modules.py"); + + evaluateExpression(fromSource(importerFile), Cantor::Expression::DeleteOnFinish, true); + + listVariables(); + + changeStatus(Session::Done); + emit loginDone(); +} + +void PythonSession::logout() +{ + // TODO: T6113, T6114 + m_pProcess->terminate(); + + m_variableModel->clearVariables(); + emit clearVariables(); + + qDebug()<<"logout"; + changeStatus(Status::Disable); +} + +void PythonSession::interrupt() +{ + // TODO: T6113, T6114 + if (m_pProcess->pid()) + m_pProcess->kill(); + + qDebug()<<"interrupt"; + + foreach(Cantor::Expression* e, m_runningExpressions) + e->interrupt(); + + m_runningExpressions.clear(); + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression* PythonSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + qDebug() << "evaluating: " << cmd; + PythonExpression* expr = new PythonExpression(this, internal); + + changeStatus(Cantor::Session::Running); + + expr->setFinishingBehavior(behave); + expr->setCommand(cmd); + expr->evaluate(); + + return expr; +} + +void PythonSession::runExpression(PythonExpression* expr) +{ + qDebug() << "run expression"; + + m_currentExpression = expr; + + const QString& command = expr->command(); + QStringList commandLine = command.split(QLatin1String("\n")); + + QString commandProcessing; + + for(const QString& command : commandLine){ + const QString firstLineWord = command.trimmed().replace(QLatin1String("("), QLatin1String(" ")) + .split(QLatin1String(" ")).at(0); + + // Ignore comments + if (firstLineWord.length() != 0 && firstLineWord[0] == QLatin1Char('#')){ + + commandProcessing += command + QLatin1String("\n"); + continue; + } + + if(firstLineWord.contains(QLatin1String("execfile"))){ + + commandProcessing += command; + continue; + } + + commandProcessing += command + QLatin1String("\n"); + + } + readExpressionOutput(commandProcessing); +} + +// Is called asynchronously in the Python3 plugin +void PythonSession::readExpressionOutput(const QString& commandProcessing) +{ + readOutput(commandProcessing); +} + +void PythonSession::getPythonCommandOutput(const QString& commandProcessing) +{ + runPythonCommand(commandProcessing); + + m_output = getOutput(); + m_error = getError(); +} + +bool PythonSession::identifyKeywords(const QString& command) +{ + QString verifyErrorImport; + + QString listKeywords; + QString keywordsString; + + QString moduleImported; + QString moduleVariable; + + getPythonCommandOutput(command); + + qDebug() << "verifyErrorImport: "; + + if(!m_error.isEmpty()){ + + qDebug() << "returned false"; + + return false; + } + + moduleImported += identifyPythonModule(command); + moduleVariable += identifyVariableModule(command); + + if((moduleVariable.isEmpty()) && (!command.endsWith(QLatin1String("*")))){ + keywordsString = command.section(QLatin1String(" "), 3).remove(QLatin1String(" ")); + } + + if(moduleVariable.isEmpty() && (command.endsWith(QLatin1String("*")))){ + listKeywords += QString::fromLatin1("import %1\n" \ + "print(dir(%1))\n" \ + "del %1\n").arg(moduleImported); + } + + if(!moduleVariable.isEmpty()){ + listKeywords += QLatin1String("print(dir(") + moduleVariable + QLatin1String("))\n"); + } + + if(!listKeywords.isEmpty()){ + getPythonCommandOutput(listKeywords); + + keywordsString = m_output; + + keywordsString.remove(QLatin1String("'")); + keywordsString.remove(QLatin1String(" ")); + keywordsString.remove(QLatin1String("[")); + keywordsString.remove(QLatin1String("]")); + } + + QStringList keywordsList = keywordsString.split(QLatin1String(",")); + PythonKeywords::instance()->loadFromModule(moduleVariable, keywordsList); + + qDebug() << "Module imported" << moduleImported; + + return true; +} + +QString PythonSession::identifyPythonModule(const QString& command) const +{ + QString module; + + if(command.contains(QLatin1String("import "))){ + module = command.section(QLatin1String(" "), 1, 1); + } + + qDebug() << "module identified" << module; + return module; +} + +QString PythonSession::identifyVariableModule(const QString& command) const +{ + QString variable; + + if(command.contains(QLatin1String("import "))){ + variable = command.section(QLatin1String(" "), 1, 1); + } + + if((command.contains(QLatin1String("import "))) && (command.contains(QLatin1String(" as ")))){ + variable = command.section(QLatin1String(" "), 3, 3); + } + + if(command.contains(QLatin1String("from "))){ + variable = QLatin1String(""); + } + + qDebug() << "variable identified" << variable; + return variable; +} + +void PythonSession::expressionFinished() +{ + qDebug()<< "finished"; + PythonExpression* expression = qobject_cast(sender()); + + m_runningExpressions.removeAll(expression); + qDebug() << "size: " << m_runningExpressions.size(); +} + +void PythonSession::updateOutput() +{ + if(m_error.isEmpty()){ + m_currentExpression->parseOutput(m_output); + + qDebug() << "output: " << m_output; + } else { + m_currentExpression->parseError(m_error); + + qDebug() << "error: " << m_error; + } + + listVariables(); + + changeStatus(Cantor::Session::Done); +} + +void PythonSession::readOutput(const QString& commandProcessing) +{ + qDebug() << "readOutput"; + + getPythonCommandOutput(commandProcessing); + + updateOutput(); +} + +void PythonSession::listVariables() +{ + const QString& listVariableCommand = QLatin1String( + "try: \n" + " import numpy \n" + " __cantor_numpy_internal__ = numpy.get_printoptions()['threshold'] \n" + " numpy.set_printoptions(threshold=100000000) \n" + "except ModuleNotFoundError: \n" + " pass \n" + + "print(globals()) \n" + + "try: \n" + " import numpy \n" + " numpy.set_printoptions(threshold=__cantor_numpy_internal__) \n" + " del __cantor_numpy_internal__ \n" + "except ModuleNotFoundError: \n" + " pass \n" + ); + + getPythonCommandOutput(listVariableCommand); + + qDebug() << m_output; + + m_output.remove(QLatin1String("{")); + m_output.remove(QLatin1String("<")); + m_output.remove(QLatin1String(">")); + m_output.remove(QLatin1String("}")); + + foreach(QString line, m_output.split(QLatin1String(", '"))){ + + QStringList parts = line.simplified().split(QLatin1String(":")); + const QString& first = parts.first(); + const QString& last = parts.last(); + if(!first.startsWith(QLatin1String("'__")) && !first.startsWith(QLatin1String("__")) && !first.startsWith(QLatin1String("CatchOutPythonBackend'")) && + !first.startsWith(QLatin1String("errorPythonBackend'")) && !first.startsWith(QLatin1String("outputPythonBackend'")) && + !last.startsWith(QLatin1String(" class ")) && !last.startsWith(QLatin1String(" function ")) && + !last.startsWith(QLatin1String(" module '")) /*skip imported modules*/ ) + { + + m_variableModel->addVariable(parts.first().remove(QLatin1String("'")).simplified(), parts.last().simplified()); + emit newVariable(parts.first().remove(QLatin1String("'")).simplified()); + } + } + + emit updateHighlighter(); +} + +QSyntaxHighlighter* PythonSession::syntaxHighlighter(QObject* parent) +{ + PythonHighlighter* highlighter = new PythonHighlighter(parent, m_pythonVersion); + QObject::connect(this, SIGNAL(updateHighlighter()), highlighter, SLOT(updateHighlight())); + QObject::connect(this, SIGNAL(newVariable(QString)), highlighter, SLOT(addVariable(QString))); + connect(this, &PythonSession::clearVariables, highlighter, &PythonHighlighter::clearVariables); + + return highlighter; +} + +Cantor::CompletionObject* PythonSession::completionFor(const QString& command, int index) +{ + return new PythonCompletionObject(command, index, this); +} + +QAbstractItemModel* PythonSession::variableModel() +{ + return m_variableModel; +} + +void PythonSession::runPythonCommand(const QString& command) const +{ + // TODO: T6113, T6114 + m_pIface->call(QString::fromLatin1("runPythonCommand"), command); +} + +QString PythonSession::getOutput() const +{ + // TODO: T6113, T6114 + const QDBusReply& reply = m_pIface->call(QString::fromLatin1("getOutput")); + if (reply.isValid()) + return reply.value(); + + return reply.error().message(); +} + +QString PythonSession::getError() const +{ + // TODO: T6113, T6114 + const QDBusReply& reply = m_pIface->call(QString::fromLatin1("getError")); + if (reply.isValid()) + return reply.value(); + + return reply.error().message(); +} + +void PythonSession::setWorksheetPath(const QString& path) +{ + worksheetPath = path; +} diff --git a/src/backends/python/pythonsession.h b/src/backends/python/pythonsession.h new file mode 100644 index 0000000..b215996 --- /dev/null +++ b/src/backends/python/pythonsession.h @@ -0,0 +1,106 @@ +/* + 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. + + --- + Copyright (C) 2012 Filipe Saraiva + Copyright (C) 2015 Minh Ngo + */ + +#ifndef _PYTHONSESSION_H +#define _PYTHONSESSION_H + +#include "session.h" +#include +#include + +namespace Cantor { +class DefaultVariableModel; +} + +class PythonExpression; +class KDirWatch; +class QDBusInterface; +class KProcess; + +class CANTOR_PYTHONBACKEND_EXPORT PythonSession : public Cantor::Session +{ + Q_OBJECT + public: + PythonSession(Cantor::Backend* backend, int pythonVersion, const QString serverName, const QString DbusChannelName); + ~PythonSession() override = default; + + void login() override; + void logout() override; + + void interrupt() override; + void runExpression(PythonExpression* expr); + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& command, int index=-1) override; + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + QAbstractItemModel* variableModel() override; + void setWorksheetPath(const QString& path) override; + + virtual bool integratePlots() const = 0; + virtual QStringList autorunScripts() const = 0; + + private: + Cantor::DefaultVariableModel* m_variableModel; + + QList m_runningExpressions; + PythonExpression* m_currentExpression; + + QDBusInterface* m_pIface; + KProcess* m_pProcess; + QString serverName; + QString DbusChannelName; + + QString worksheetPath; + int m_pythonVersion; + + protected: + QString m_output; + QString m_error; + + private: + void listVariables(); + + void getPythonCommandOutput(const QString& commandProcessing); + + QString identifyPythonModule(const QString& command) const; + QString identifyVariableModule(const QString& command) const; + bool identifyKeywords(const QString& command); + + void runPythonCommand(const QString& command) const; + QString getOutput() const; + QString getError() const; + + virtual void readExpressionOutput(const QString& commandProcessing); + + protected: + void updateOutput(); + + private Q_SLOTS: + void readOutput(const QString& commandProcessing); + void expressionFinished(); + + Q_SIGNALS: + void updateHighlighter(); + void newVariable(const QString variable); + void clearVariables(); +}; + +#endif /* _PYTHONSESSION_H */ diff --git a/src/backends/python/pythonutils.h b/src/backends/python/pythonutils.h new file mode 100644 index 0000000..89b965f --- /dev/null +++ b/src/backends/python/pythonutils.h @@ -0,0 +1,33 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#ifndef _PYTHONUTILS_H +#define _PYTHONUTILS_H + +#include + +inline QString fromSource(const QString& resourceName) +{ + QFile text(resourceName); + text.open(QIODevice::ReadOnly); + return QString::fromLatin1(text.readAll()); +} + +#endif diff --git a/src/backends/python/settings.ui b/src/backends/python/settings.ui new file mode 100644 index 0000000..5581e62 --- /dev/null +++ b/src/backends/python/settings.ui @@ -0,0 +1,57 @@ + + + PythonSettingsBase + + + + 0 + 0 + 400 + 300 + + + + + + + Integrate Plots in Worksheet + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/python/variables_cleaner.py b/src/backends/python/variables_cleaner.py new file mode 100644 index 0000000..1bb7c0b --- /dev/null +++ b/src/backends/python/variables_cleaner.py @@ -0,0 +1,6 @@ +for keyPythonBackend in dir(): + if (not 'PythonBackend' in keyPythonBackend)\ + and (not '__' in keyPythonBackend): + del(globals()[keyPythonBackend]) + +del(keyPythonBackend) diff --git a/src/backends/python/variables_loader.py b/src/backends/python/variables_loader.py new file mode 100644 index 0000000..2ed46ff --- /dev/null +++ b/src/backends/python/variables_loader.py @@ -0,0 +1,9 @@ +import shelve +shelvePythonBackend = shelve.open('%1') +for keyPythonBackend in shelvePythonBackend: + globals()[keyPythonBackend] = shelvePythonBackend[keyPythonBackend] + +shelvePythonBackend.close() +del(shelve) +del(shelvePythonBackend) +del(keyPythonBackend) diff --git a/src/backends/python/variables_saver.py b/src/backends/python/variables_saver.py new file mode 100644 index 0000000..493cafb --- /dev/null +++ b/src/backends/python/variables_saver.py @@ -0,0 +1,11 @@ +import shelve +shelvePythonBackend = shelve.open('%1', 'n') +for keyPythonBackend in dir(): + if (not 'PythonBackend' in keyPythonBackend)\ + and (not '__' in keyPythonBackend)\ + and (not ' + */ + +#include "python2backend.h" +#include "python2session.h" +#include "cantor_macros.h" +#include "settings.h" + +#include + +Python2Backend::Python2Backend(QObject* parent, const QList args) + : PythonBackend(parent, args) +{ + setObjectName(QLatin1String("python2backend")); + // Because the plugin may not have been loaded with + // ExportExternalSymbols, we load the python symbols again + // to make sure that python modules such as numpy see them + // (see bug #330032) + QLibrary pythonLib(QLatin1String("python2.7")); + pythonLib.setLoadHints(QLibrary::ExportExternalSymbolsHint); + pythonLib.load(); +} + +Cantor::Session* Python2Backend::createSession() +{ + return new Python2Session(this); +} + +QString Python2Backend::id() const +{ + return QLatin1String("python2"); +} + +QString Python2Backend::version() const +{ + return QLatin1String("2.7"); +} + +QUrl Python2Backend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation Python 2", "http://docs.python.org/2/")); +} + +QString Python2Backend::description() const +{ + return i18n("

    Python is a remarkably powerful dynamic programming language that is used in a wide variety of application domains. " \ + "There are several Python packages to scientific programming.

    " \ + "

    This backend supports Python 2.

    "); +} + +KConfigSkeleton* Python2Backend::config() const +{ + return PythonSettings::self(); +} + +K_PLUGIN_FACTORY_WITH_JSON(python2backend, "python2backend.json", registerPlugin();) +#include "python2backend.moc" diff --git a/src/backends/python2/python2backend.h b/src/backends/python2/python2backend.h new file mode 100644 index 0000000..1d910c7 --- /dev/null +++ b/src/backends/python2/python2backend.h @@ -0,0 +1,42 @@ + /* + 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. + + --- + Copyright (C) 2014, 2015 Minh Ngo + */ + +#ifndef _PYTHON2BACKEND_H +#define _PYTHON2BACKEND_H + +#include "../python/pythonbackend.h" + +class Python2Backend : public PythonBackend +{ + Q_OBJECT + public: + explicit Python2Backend(QObject* parent = nullptr, const QList args = QList()); + + Cantor::Session* createSession() override; + + QString id() const override; + QString version() const override; + QUrl helpUrl() const override; + QString description() const override; + + KConfigSkeleton* config() const override; +}; + +#endif diff --git a/src/backends/python2/python2backend.json b/src/backends/python2/python2backend.json new file mode 100644 index 0000000..cf7481e --- /dev/null +++ b/src/backends/python2/python2backend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for Python 2 Scientific Programming", + "Description[ca@valencia]": "Dorsal per a la programació científica Python2", + "Description[ca]": "Dorsal per a la programació científica Python2", + "Description[cs]": "Podpůrná vrstva pro vědecké programovací v Python 2", + "Description[de]": "Modul für die wissenschaftliche Programmierumgebung Python 2", + "Description[el]": "Σύστημα υποστήριξης για το Python 2 Scientific Programming", + "Description[en_GB]": "Backend for Python 2 Scientific Programming", + "Description[es]": "Motor para programación científica en Python 2", + "Description[et]": "Python 2 teadusliku programmeerimise taustaprogramm", + "Description[fi]": "Python 2 -pohjaisen tieteellisen ohjelmointiympäristön taustajärjestelmä", + "Description[fr]": "Moteur pour la programmation scientifique Python 2", + "Description[gl]": "Infraestrutura para o programación científica con Python 2.", + "Description[it]": "Backend per l'ambiente scientifico di programmazione Python 2", + "Description[nl]": "Backend voor wetenschappelijke programmeeromgeving Python 2", + "Description[nn]": "Motor for Python 2 «Scientific Programming»", + "Description[pl]": "Silnika dla naukowego środowiska programistycznego Python 2", + "Description[pt]": "Infra-Estrutura de Programação Científica com Python 2", + "Description[pt_BR]": "Infraestrutura de programação científica Python 2", + "Description[ru]": "Поддержка языка Python 2 и инженерных и научных расчётов на нём", + "Description[sk]": "Backend pre vedecké programovanie Python 2", + "Description[sl]": "Zaledje za znanstveno programersko okolje Python 2", + "Description[sv]": "Bakgrundsprogram för Python 2 vetenskaplig programmeringsmiljö", + "Description[tr]": "Python 2 Bilimsel Programlama için arka uç", + "Description[uk]": "Модуль наукового програмування мовою Python 2", + "Description[x-test]": "xxBackend for Python 2 Scientific Programmingxx", + "Description[zh_CN]": "Python 2 科学编程环境的后端", + "Description[zh_TW]": "Python 2 科學程式環境的後端介面", + "Icon": "pythonbackend", + "Id": "Python 2", + "License": "GPL", + "Name": "Python 2", + "Name[ca@valencia]": "Python 2", + "Name[ca]": "Python 2", + "Name[cs]": "Python 2", + "Name[da]": "Python 2", + "Name[de]": "Python 2", + "Name[el]": "Python 2", + "Name[en_GB]": "Python 2", + "Name[es]": "Python 2", + "Name[et]": "Python 2", + "Name[fi]": "Python 2", + "Name[fr]": "Python 2", + "Name[gl]": "Python 2", + "Name[it]": "Python 2", + "Name[nl]": "Python 2", + "Name[nn]": "Python 2", + "Name[pl]": "Python 2", + "Name[pt]": "Python 2", + "Name[pt_BR]": "Python 2", + "Name[ru]": "Python 2", + "Name[sk]": "Python 2", + "Name[sl]": "Python 2", + "Name[sv]": "Python 2", + "Name[tr]": "Python 2", + "Name[uk]": "Python 2", + "Name[x-test]": "xxPython 2xx", + "Name[zh_CN]": "Python 2", + "Name[zh_TW]": "Python 2", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://python.org/" + } +} diff --git a/src/backends/python2/python2backend.kcfg b/src/backends/python2/python2backend.kcfg new file mode 100644 index 0000000..cd9ccb5 --- /dev/null +++ b/src/backends/python2/python2backend.kcfg @@ -0,0 +1,16 @@ + + + + + + + false + + + + + + diff --git a/src/backends/python2/python2server/CMakeLists.txt b/src/backends/python2/python2server/CMakeLists.txt new file mode 100644 index 0000000..edfd2c5 --- /dev/null +++ b/src/backends/python2/python2server/CMakeLists.txt @@ -0,0 +1,16 @@ +include_directories(${PYTHON_INCLUDE_DIR}) + +set(Python2Server_SRCS + main.cpp + ../../python/pythonserver.cpp +) + +add_executable(cantor_python2server ${Python2Server_SRCS}) + +set_target_properties(cantor_python2server PROPERTIES INSTALL_RPATH_USE_LINK_PATH false) +target_link_libraries(cantor_python2server + ${PYTHON_LIBRARIES} + Qt5::Widgets + Qt5::DBus) + +install(TARGETS cantor_python2server ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/backends/python2/python2server/main.cpp b/src/backends/python2/python2server/main.cpp new file mode 100644 index 0000000..92cca0c --- /dev/null +++ b/src/backends/python2/python2server/main.cpp @@ -0,0 +1,54 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#include +#include +#include +#include +#include + +#include "../../python/pythonserver.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + if (!QDBusConnection::sessionBus().isConnected()) + { + qDebug() << "Can't connect to the D-Bus session bus.\n" + "To start it, run: eval `dbus-launch --auto-syntax`"; + return 1; + } + + const QString& serviceName = QString::fromLatin1("org.kde.Cantor.Python2-%1").arg(app.applicationPid()); + + if (!QDBusConnection::sessionBus().registerService(serviceName)) + { + qDebug() << QDBusConnection::sessionBus().lastError().message(); + return 2; + } + + PythonServer server; + QDBusConnection::sessionBus().registerObject(QString::fromLatin1("/"), &server, QDBusConnection::ExportAllSlots); + + QTextStream(stdout) << "ready" << endl; + + return app.exec(); +} diff --git a/src/backends/python2/python2session.cpp b/src/backends/python2/python2session.cpp new file mode 100644 index 0000000..9ff5c69 --- /dev/null +++ b/src/backends/python2/python2session.cpp @@ -0,0 +1,46 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#include "python2session.h" +#include "settings.h" +#include "../python/pythonexpression.h" +#include "../python/pythonkeywords.h" + +#include +#include +#include +#include + +#include + +Python2Session::Python2Session(Cantor::Backend* backend) + : PythonSession(backend, 2, QLatin1String("cantor_python2server"), QLatin1String("org.kde.Cantor.Python2")) +{ +} + +bool Python2Session::integratePlots() const +{ + return PythonSettings::integratePlots(); +} + +QStringList Python2Session::autorunScripts() const +{ + return PythonSettings::autorunScripts(); +} diff --git a/src/backends/python2/python2session.h b/src/backends/python2/python2session.h new file mode 100644 index 0000000..4000480 --- /dev/null +++ b/src/backends/python2/python2session.h @@ -0,0 +1,35 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#ifndef _PYTHON2SESSION_H +#define _PYTHON2SESSION_H + +#include "../python/pythonsession.h" + +class Python2Session : public PythonSession +{ + public: + explicit Python2Session(Cantor::Backend* backend); + + bool integratePlots() const override; + QStringList autorunScripts() const override; +}; + +#endif diff --git a/src/backends/python2/settings.kcfgc b/src/backends/python2/settings.kcfgc new file mode 100644 index 0000000..df84907 --- /dev/null +++ b/src/backends/python2/settings.kcfgc @@ -0,0 +1,3 @@ +File=python2backend.kcfg +ClassName=PythonSettings +Singleton=true diff --git a/src/backends/python2/testpython2.cpp b/src/backends/python2/testpython2.cpp new file mode 100644 index 0000000..4f1e836 --- /dev/null +++ b/src/backends/python2/testpython2.cpp @@ -0,0 +1,59 @@ +/* + 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. + + --- + Copyright (C) 2013 Tuukka Verho + */ + +#include "testpython2.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" + +QString TestPython2::backendName() +{ + return QLatin1String("python2"); +} + +void TestPython2::testImportNumpy() +{ + Cantor::Expression* e = evalExp(QLatin1String("import numpy")); + + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Done); +} + +void TestPython2::testCodeWithComments() +{ + { + Cantor::Expression* e = evalExp(QLatin1String("#comment\n1+2")); + + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("3")); + } + + { + Cantor::Expression* e = evalExp(QLatin1String(" #comment\n1+2")); + + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("3")); + } +} + +QTEST_MAIN(TestPython2) + diff --git a/src/backends/python2/testpython2.h b/src/backends/python2/testpython2.h new file mode 100644 index 0000000..a1a8d88 --- /dev/null +++ b/src/backends/python2/testpython2.h @@ -0,0 +1,38 @@ +/* + 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. + + --- + Copyright (C) 2013 Tuukka Verho + */ + +#ifndef _TESTPYTHON2_H +#define _TESTPYTHON2_H + +#include "backendtest.h" + + +class TestPython2 : public BackendTest +{ + Q_OBJECT + private Q_SLOTS: + void testImportNumpy(); + void testCodeWithComments(); + + private: + QString backendName() override; +}; + +#endif /* _TESTPYTHON2_H */ diff --git a/src/backends/python3/CMakeLists.txt b/src/backends/python3/CMakeLists.txt new file mode 100644 index 0000000..5136dfd --- /dev/null +++ b/src/backends/python3/CMakeLists.txt @@ -0,0 +1,27 @@ +set(Python3Backend_SRCS + python3backend.cpp + python3session.cpp +) + +kconfig_add_kcfg_files(Python3Backend_SRCS settings.kcfgc) + +add_backend(python3backend ${Python3Backend_SRCS}) + +target_link_libraries(cantor_python3backend + cantor_pythonbackend + Qt5::DBus) + +add_subdirectory(python3server) + +if(BUILD_TESTING) + add_executable(testpython3 testpython3.cpp) + add_test(NAME testpython3 COMMAND testpython3) + target_link_libraries(testpython3 + Qt5::Test + cantorlibs + cantortest + ) +endif(BUILD_TESTING) + +install(FILES cantor_python3.knsrc DESTINATION ${KDE_INSTALL_CONFDIR}) +install(FILES python3backend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) diff --git a/src/backends/python3/cantor_python3.knsrc b/src/backends/python3/cantor_python3.knsrc new file mode 100644 index 0000000..0127e29 --- /dev/null +++ b/src/backends/python3/cantor_python3.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Python3) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/python3/python3backend.cpp b/src/backends/python3/python3backend.cpp new file mode 100644 index 0000000..7521aa2 --- /dev/null +++ b/src/backends/python3/python3backend.cpp @@ -0,0 +1,67 @@ +/* + 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. + + --- + Copyright (C) 2014, 2015 Minh Ngo + */ + +#include "python3backend.h" +#include "python3session.h" +#include "cantor_macros.h" +#include "settings.h" + +#include + +Python3Backend::Python3Backend(QObject* parent, const QList& args) + : PythonBackend(parent, args) +{ + setObjectName(QLatin1String("python3backend")); +} + +Cantor::Session* Python3Backend::createSession() +{ + return new Python3Session(this); +} + +QString Python3Backend::id() const +{ + return QLatin1String("python3"); +} + +QString Python3Backend::version() const +{ + return QLatin1String("3.6"); +} + +QUrl Python3Backend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation Python 3", "http://docs.python.org/3/")); +} + +QString Python3Backend::description() const +{ + return i18n("

    Python is a remarkably powerful dynamic programming language that is used in a wide variety of application domains. " \ + "There are several Python packages to scientific programming.

    " \ + "

    This backend supports Python 3.

    "); +} + +KConfigSkeleton* Python3Backend::config() const +{ + return PythonSettings::self(); +} + +K_PLUGIN_FACTORY_WITH_JSON(python3backend, "python3backend.json", registerPlugin();) +#include "python3backend.moc" diff --git a/src/backends/python3/python3backend.h b/src/backends/python3/python3backend.h new file mode 100644 index 0000000..f0ee133 --- /dev/null +++ b/src/backends/python3/python3backend.h @@ -0,0 +1,41 @@ +/* + 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. + + --- + Copyright (C) 2014, 2015 Minh Ngo + */ + +#ifndef _PYTHON3BACKEND_H +#define _PYTHON3BACKEND_H + +#include "../python/pythonbackend.h" + +class Python3Backend : public PythonBackend +{ + public: + explicit Python3Backend(QObject* parent = nullptr, const QList& args = QList()); + + Cantor::Session* createSession() override; + + QString id() const override; + QString version() const override; + QUrl helpUrl() const override; + QString description() const override; + + KConfigSkeleton* config() const override; +}; + +#endif diff --git a/src/backends/python3/python3backend.json b/src/backends/python3/python3backend.json new file mode 100644 index 0000000..666791f --- /dev/null +++ b/src/backends/python3/python3backend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for Python 3 Scientific Programming", + "Description[ca@valencia]": "Dorsal per a la programació científica Python 3", + "Description[ca]": "Dorsal per a la programació científica Python 3", + "Description[cs]": "Podpůrná vrstva pro vědecké programovací v Python 3", + "Description[de]": "Modul für die wissenschaftliche Programmierumgebung Python 3", + "Description[el]": "Σύστημα υποστήριξης για το Python 3 Scientific Programming", + "Description[en_GB]": "Backend for Python 3 Scientific Programming", + "Description[es]": "Motor para programación científica en Python 3", + "Description[et]": "Python 3 teadusliku programmeerimise taustaprogramm", + "Description[fi]": "Python 3 -pohjaisen tieteellisen ohjelmointiympäristön taustajärjestelmä", + "Description[fr]": "Moteur pour la programmation scientifique Python 3", + "Description[gl]": "Infraestrutura para o programación científica con Python 3.", + "Description[it]": "Backend per l'ambiente scientifico di programmazione Python 3", + "Description[nl]": "Backend voor wetenschappelijke programmeeromgeving Python 3", + "Description[nn]": "Motor for Python 3 «Scientific Programming»", + "Description[pl]": "Silnika dla naukowego środowiska programistycznego Python 3", + "Description[pt]": "Infra-Estrutura de Programação Científica com Python 3", + "Description[pt_BR]": "Infraestrutura de programação científica Python 3", + "Description[ru]": "Поддержка языка Python 3 и инженерных и научных расчётов на нём", + "Description[sk]": "Backend pre vedecké programovanie Python 3", + "Description[sl]": "Zaledje za znanstveno programersko okolje Python 3", + "Description[sv]": "Bakgrundsprogram för Python 3 vetenskaplig programmeringsmiljö", + "Description[tr]": "Python 3 Bilimsel Programlama için arka uç", + "Description[uk]": "Модуль наукового програмування мовою Python 3", + "Description[x-test]": "xxBackend for Python 3 Scientific Programmingxx", + "Description[zh_CN]": "Python 3 科学编程环境的后端", + "Description[zh_TW]": "Python 3 科學程式環境的後端介面", + "Icon": "pythonbackend", + "Id": "Python 3", + "License": "GPL", + "Name": "Python 3", + "Name[ca@valencia]": "Python 3", + "Name[ca]": "Python 3", + "Name[cs]": "Python 3", + "Name[da]": "Python 3", + "Name[de]": "Python 3", + "Name[el]": "Python 3", + "Name[en_GB]": "Python 3", + "Name[es]": "Python 3", + "Name[et]": "Python 3", + "Name[fi]": "Python 3", + "Name[fr]": "Python 3", + "Name[gl]": "Python 3", + "Name[it]": "Python 3", + "Name[nl]": "Python 3", + "Name[nn]": "Python 3", + "Name[pl]": "Python 3", + "Name[pt]": "Python 3", + "Name[pt_BR]": "Python 3", + "Name[ru]": "Python 3", + "Name[sk]": "Python 3", + "Name[sl]": "Python 3", + "Name[sv]": "Python 3", + "Name[tr]": "Python 3", + "Name[uk]": "Python 3", + "Name[x-test]": "xxPython 3xx", + "Name[zh_CN]": "Python 3", + "Name[zh_TW]": "Python 3", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://python.org/" + } +} diff --git a/src/backends/python3/python3backend.kcfg b/src/backends/python3/python3backend.kcfg new file mode 100644 index 0000000..202879b --- /dev/null +++ b/src/backends/python3/python3backend.kcfg @@ -0,0 +1,16 @@ + + + + + + + false + + + + + + diff --git a/src/backends/python3/python3server/CMakeLists.txt b/src/backends/python3/python3server/CMakeLists.txt new file mode 100644 index 0000000..c4ab90f --- /dev/null +++ b/src/backends/python3/python3server/CMakeLists.txt @@ -0,0 +1,16 @@ +include_directories(${PYTHONLIBS3_INCLUDE_DIRS}) + +set(Python3Server_SRCS + main.cpp + ../../python/pythonserver.cpp +) + +add_executable(cantor_python3server ${Python3Server_SRCS}) + +set_target_properties(cantor_python3server PROPERTIES INSTALL_RPATH_USE_LINK_PATH false) +target_link_libraries(cantor_python3server + ${PYTHONLIBS3_LIBRARIES} + Qt5::Widgets + Qt5::DBus) + +install(TARGETS cantor_python3server ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/backends/python3/python3server/main.cpp b/src/backends/python3/python3server/main.cpp new file mode 100644 index 0000000..d0d20c3 --- /dev/null +++ b/src/backends/python3/python3server/main.cpp @@ -0,0 +1,54 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#include +#include +#include +#include +#include + +#include "../../python/pythonserver.h" + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + if (!QDBusConnection::sessionBus().isConnected()) + { + qDebug() << "Can't connect to the D-Bus session bus.\n" + "To start it, run: eval `dbus-launch --auto-syntax`"; + return 1; + } + + const QString& serviceName = QString::fromLatin1("org.kde.Cantor.Python3-%1").arg(app.applicationPid()); + + if (!QDBusConnection::sessionBus().registerService(serviceName)) + { + qDebug() << QDBusConnection::sessionBus().lastError().message(); + return 2; + } + + PythonServer server; + QDBusConnection::sessionBus().registerObject(QString::fromLatin1("/"), &server, QDBusConnection::ExportAllSlots); + + QTextStream(stdout) << "ready" << endl; + + return app.exec(); +} diff --git a/src/backends/python3/python3session.cpp b/src/backends/python3/python3session.cpp new file mode 100644 index 0000000..c33c4a7 --- /dev/null +++ b/src/backends/python3/python3session.cpp @@ -0,0 +1,37 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#include "python3session.h" +#include "settings.h" + +Python3Session::Python3Session(Cantor::Backend* backend) + : PythonSession(backend, 3, QLatin1String("cantor_python3server"), QLatin1String("org.kde.Cantor.Python3")) +{ +} + +bool Python3Session::integratePlots() const +{ + return PythonSettings::integratePlots(); +} + +QStringList Python3Session::autorunScripts() const +{ + return PythonSettings::autorunScripts(); +} diff --git a/src/backends/python3/python3session.h b/src/backends/python3/python3session.h new file mode 100644 index 0000000..9abe861 --- /dev/null +++ b/src/backends/python3/python3session.h @@ -0,0 +1,35 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#ifndef _PYTHON3SESSION_H +#define _PYTHON3SESSION_H + +#include "../python/pythonsession.h" + +class Python3Session : public PythonSession +{ + public: + explicit Python3Session(Cantor::Backend* backend); + + bool integratePlots() const override; + QStringList autorunScripts() const override; +}; + +#endif diff --git a/src/backends/python3/settings.kcfgc b/src/backends/python3/settings.kcfgc new file mode 100644 index 0000000..67faba9 --- /dev/null +++ b/src/backends/python3/settings.kcfgc @@ -0,0 +1,3 @@ +File=python3backend.kcfg +ClassName=PythonSettings +Singleton=true diff --git a/src/backends/python3/testpython3.cpp b/src/backends/python3/testpython3.cpp new file mode 100644 index 0000000..9841a21 --- /dev/null +++ b/src/backends/python3/testpython3.cpp @@ -0,0 +1,118 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#include "testpython3.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "imageresult.h" + +QString TestPython3::backendName() +{ + return QLatin1String("python3"); +} + +void TestPython3::testImportNumpy() +{ + Cantor::Expression* e = evalExp(QLatin1String("import numpy")); + + QVERIFY(e != nullptr); + QCOMPARE(e->status(), Cantor::Expression::Done); +} + +void TestPython3::testCodeWithComments() +{ + { + Cantor::Expression* e = evalExp(QLatin1String("#comment\n1+2")); + + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("3")); + } + + { + Cantor::Expression* e = evalExp(QLatin1String(" #comment\n1+2")); + + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("3")); + } +} + +void TestPython3::testPython3Code() +{ + { + Cantor::Expression* e = evalExp(QLatin1String("print 1 + 2")); + + QVERIFY(e != nullptr); + QVERIFY(!e->errorMessage().isEmpty()); + } + + { + Cantor::Expression* e = evalExp(QLatin1String("print(1 + 2)")); + + QVERIFY(e != nullptr); + QVERIFY(e->result()->data().toString() == QLatin1String("3")); + } +} + +void TestPython3::testSimplePlot() +{ + Cantor::Expression* e = evalExp(QLatin1String( + "import matplotlib\n" + "import matplotlib.pyplot as plt\n" + "import numpy as np" + )); + QVERIFY(e != nullptr); + QVERIFY(e->errorMessage().isEmpty() == true); + + //the variable model shouldn't have any entries after the module imports + QAbstractItemModel* model = session()->variableModel(); + QVERIFY(model != nullptr); + QVERIFY(model->rowCount() == 0); + + //create data for plotting + e = evalExp(QLatin1String( + "t = np.arange(0.0, 2.0, 0.01)\n" + "s = 1 + np.sin(2 * np.pi * t)" + )); + QVERIFY(e != nullptr); + QVERIFY(e->errorMessage().isEmpty() == true); + + //the variable model should have two entries now + QVERIFY(model->rowCount() == 2); + + //plot the data and check the results + e = evalExp(QLatin1String( + "plt.plot(t,s)\n" + "plt.show()" + )); + waitForSignal(e, SIGNAL(gotResult())); + QVERIFY(e != nullptr); + QVERIFY(e->errorMessage().isEmpty() == true); + QVERIFY(model->rowCount() == 2); //still only two variables + + //there must be one single image result + QVERIFY(e->results().size() == 1); + const Cantor::ImageResult* result = dynamic_cast(e->result()); + QVERIFY(result != nullptr); +} + +QTEST_MAIN(TestPython3) + diff --git a/src/backends/python3/testpython3.h b/src/backends/python3/testpython3.h new file mode 100644 index 0000000..18aa4c3 --- /dev/null +++ b/src/backends/python3/testpython3.h @@ -0,0 +1,39 @@ +/* + 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. + + --- + Copyright (C) 2015 Minh Ngo + */ + +#ifndef _TESTPYTHON3_H +#define _TESTPYTHON3_H + +#include + +class TestPython3 : public BackendTest +{ + Q_OBJECT + private Q_SLOTS: + void testImportNumpy(); + void testCodeWithComments(); + void testPython3Code(); + void testSimplePlot(); + + private: + QString backendName() override; +}; + +#endif /* _TESTPYTHON3_H */ diff --git a/src/backends/qalculate/CMakeLists.txt b/src/backends/qalculate/CMakeLists.txt new file mode 100644 index 0000000..d388ed2 --- /dev/null +++ b/src/backends/qalculate/CMakeLists.txt @@ -0,0 +1,31 @@ +add_subdirectory(plotassistant) +project(cantor-qalculate-backend) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS} -Wno-deprecated") +add_definitions(${QALCULATE_CFLAGS}) + +set( QalculateBackend_SRCS + qalculatesyntaxhelpobject.cpp + qalculatebackend.cpp + qalculatesession.cpp + qalculatehighlighter.cpp + qalculateexpression.cpp + qalculateextensions.cpp + qalculatecompletionobject.cpp + qalculateextensions.cpp +) + +kconfig_add_kcfg_files(QalculateBackend_SRCS settings.kcfgc) +install(FILES qalculatebackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(QalculateBackend_SRCS settings.ui) + +add_backend(qalculatebackend ${QalculateBackend_SRCS}) + +if (QALCULATE_VERSION VERSION_LESS 2.0.0) + target_link_libraries( cantor_qalculatebackend cantorlibs ${QALCULATE_LIBRARIES} ${CLN_LIBRARIES}) +else() + target_link_libraries( cantor_qalculatebackend cantorlibs ${QALCULATE_LIBRARIES}) +endif() + +install( FILES cantor_qalculate.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) diff --git a/src/backends/qalculate/cantor_qalculate.knsrc b/src/backends/qalculate/cantor_qalculate.knsrc new file mode 100644 index 0000000..b14c01d --- /dev/null +++ b/src/backends/qalculate/cantor_qalculate.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Qalculate) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/qalculate/plotassistant/CMakeLists.txt b/src/backends/qalculate/plotassistant/CMakeLists.txt new file mode 100644 index 0000000..bfcddfe --- /dev/null +++ b/src/backends/qalculate/plotassistant/CMakeLists.txt @@ -0,0 +1,15 @@ +set( QalculatePlotAssistant_SRCS + qalculateplotassistant.cpp +) + +kconfig_add_kcfg_files(QalculatePlotAssistant_SRCS ../settings.kcfgc) +ki18n_wrap_ui(QalculatePlotAssistant_SRCS qalculateplotdialog.ui) + +kcoreaddons_add_plugin(cantor_qalculateplotassistant + SOURCES ${QalculatePlotAssistant_SRCS} + JSON "qalculateplotassistant.json" + INSTALL_NAMESPACE "cantor/assistants") + +target_link_libraries(cantor_qalculateplotassistant cantorlibs) + +install( FILES cantor_qalculateplotassistant.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/cantor ) diff --git a/src/backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc b/src/backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc new file mode 100644 index 0000000..010fa71 --- /dev/null +++ b/src/backends/qalculate/plotassistant/cantor_qalculateplotassistant.rc @@ -0,0 +1,8 @@ + + + + &Plot + + + + diff --git a/src/backends/qalculate/plotassistant/qalculateplotassistant.cpp b/src/backends/qalculate/plotassistant/qalculateplotassistant.cpp new file mode 100644 index 0000000..9e85f25 --- /dev/null +++ b/src/backends/qalculate/plotassistant/qalculateplotassistant.cpp @@ -0,0 +1,305 @@ +/* + 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. + + --- + Copyright (C) 2011 Martin Kuettler + */ + +#include "qalculateplotassistant.h" + +#include + +#include +#include +#include "cantor_macros.h" + +QalculatePlotAssistant::QalculatePlotAssistant(QObject* parent, QList args) : Assistant(parent) +{ + Q_UNUSED(args); + + m_dlg = nullptr; +} + +void QalculatePlotAssistant::initActions() +{ + setXMLFile(QLatin1String("cantor_qalculateplotassistant.rc")); + QAction* plot = new QAction(i18n("Plot"), actionCollection()); + actionCollection()->addAction(QLatin1String("qalculateplotassistant"), plot); + connect(plot, SIGNAL(triggered()), this, SIGNAL(requested())); +} + +void QalculatePlotAssistant::initDialog(QWidget* parent) +{ + m_dlg = new QDialog(parent); + QWidget *widget = new QWidget(m_dlg); + m_base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + m_dlg->setLayout(mainLayout); + mainLayout->addWidget(widget); + + m_base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + m_base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + + connect(m_base.addButton, SIGNAL(clicked()), this, SLOT(addFunction())); + connect(m_base.removeButton, SIGNAL(clicked()), this, SLOT(removeSelection())); + connect(m_base.clearButton, SIGNAL(clicked()), this, SLOT(clearFunctions())); + connect(m_base.functionTable, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(currentItemChanged(int,int,int,int))); + connect(m_base.stepsButton, SIGNAL(toggled(bool)), this, SLOT(toggleStep())); + connect(m_base.stepButton, SIGNAL(toggled(bool)), this, SLOT(toggleSteps())); + connect(m_base.buttonBox, SIGNAL(accepted()), m_dlg, SLOT(accept())); + connect(m_base.buttonBox, SIGNAL(rejected()), m_dlg, SLOT(reject())); + m_base.inlineCheckBox->setChecked(QalculateSettings::inlinePlot()); + m_base.colorCheckBox->setChecked(QalculateSettings::coloredPlot()); + m_base.gridCheckBox->setChecked(QalculateSettings::plotGrid()); + m_base.borderCheckBox->setChecked(QalculateSettings::plotBorder()); + m_base.smoothingBox->setCurrentIndex(QalculateSettings::plotSmoothing()); + m_base.styleBox->setCurrentIndex(QalculateSettings::plotStyle()); + m_base.legendBox->setCurrentIndex(QalculateSettings::plotLegend()); + m_base.stepsEdit->setText(QString::number(QalculateSettings::plotSteps())); + m_base.stepEdit->setDisabled(true); +} + +QStringList QalculatePlotAssistant::run(QWidget* parent) +{ + if (!m_dlg) + initDialog(parent); + + QStringList result; + if (m_dlg->exec()) { + if (m_base.functionTable->currentRow() >= 0) + saveRowInformation(m_base.functionTable->currentRow()); + result << plotCommand(); + } + + return result; +} + + +void QalculatePlotAssistant::addFunction() +{ + m_base.functionTable->insertRow(m_base.functionTable->rowCount()); + m_xVarList << QLatin1String(""); + m_styleList << QalculateSettings::STYLE_LINES; + m_smoothingList << QalculateSettings::SMOOTHING_NONE; + saveRowInformation(m_xVarList.size()-1); +} + +void QalculatePlotAssistant::removeSelection() +{ + int r = m_base.functionTable->currentRow(); + if (r < 0) + return; + m_base.functionTable->removeRow(r); + if (m_xVarList.size() > r) { + m_xVarList.removeAt(r); + m_styleList.removeAt(r); + m_smoothingList.removeAt(r); + } +} + +void QalculatePlotAssistant::clearFunctions() +{ + m_xVarList.clear(); + m_styleList.clear(); + m_smoothingList.clear(); + while (m_base.functionTable->rowCount()) + m_base.functionTable->removeRow(0); +} + +void QalculatePlotAssistant::toggleSteps() +{ + m_base.stepsButton->setChecked(!m_base.stepButton->isChecked()); +} + +void QalculatePlotAssistant::toggleStep() +{ + m_base.stepButton->setChecked(!m_base.stepsButton->isChecked()); +} + +void QalculatePlotAssistant::currentItemChanged(int newRow, int newColumn, int oldRow, int oldColumn) +{ + Q_UNUSED(newColumn); + Q_UNUSED(oldColumn); + + if (oldRow >= 0) + saveRowInformation(oldRow); + if (newRow >= 0) + loadRowInformation(newRow); +} + +void QalculatePlotAssistant::saveRowInformation(int row) +{ + m_xVarList[row] = m_base.xVarEdit->text(); + switch(m_base.styleBox->currentIndex()) { + case 0: + m_styleList[row] = QalculateSettings::STYLE_LINES; break; + case 1: + m_styleList[row] = QalculateSettings::STYLE_POINTS; break; + case 2: + m_styleList[row] = QalculateSettings::STYLE_LINES_POINTS; break; + case 3: + m_styleList[row] = QalculateSettings::STYLE_BOXES; break; + case 4: + m_styleList[row] = QalculateSettings::STYLE_HISTOGRAM; break; + case 5: + m_styleList[row] = QalculateSettings::STYLE_STEPS; break; + case 6: + m_styleList[row] = QalculateSettings::STYLE_CANDLESTICKS; break; + case 7: + m_styleList[row] = QalculateSettings::STYLE_DOTS; break; + } + switch(m_base.smoothingBox->currentIndex()) { + case 0: + m_smoothingList[row] = QalculateSettings::SMOOTHING_NONE; break; + case 1: + m_smoothingList[row] = QalculateSettings::SMOOTHING_UNIQUE; break; + case 2: + m_smoothingList[row] = QalculateSettings::SMOOTHING_CSPLINES; break; + case 3: + m_smoothingList[row] = QalculateSettings::SMOOTHING_BEZIER; break; + case 4: + m_smoothingList[row] = QalculateSettings::SMOOTHING_SBEZIER; break; + } +} + +void QalculatePlotAssistant::loadRowInformation(int row) +{ + m_base.xVarEdit->setText(m_xVarList[row]); + m_base.styleBox->setCurrentIndex(m_styleList[row]); + m_base.smoothingBox->setCurrentIndex(m_smoothingList[row]); +} + +QString QalculatePlotAssistant::plotCommand() +{ + QStringList boolList; + boolList << QLatin1String("false") << QLatin1String("true"); + QString command = QLatin1String("plot"); + if (!m_base.plotTitleEdit->text().isEmpty()) + command += QString::fromLatin1(" plottitle='%1'").arg(m_base.plotTitleEdit->text()); + if (!m_base.xLabelEdit->text().isEmpty()) + command += QString::fromLatin1(" xlabel='%1'").arg(m_base.xLabelEdit->text()); + if (!m_base.yLabelEdit->text().isEmpty()) + command += QString::fromLatin1(" ylabel='%1'").arg(m_base.yLabelEdit->text()); + if (m_base.legendBox->currentIndex() != QalculateSettings::plotLegend()) { + QString legend; + switch(m_base.legendBox->currentIndex()) { + case QalculateSettings::LEGEND_NONE: + legend=QLatin1String("none"); break; + case QalculateSettings::LEGEND_TOP_LEFT: + legend=QLatin1String("top_left"); break; + case QalculateSettings::LEGEND_TOP_RIGHT: + legend=QLatin1String("top_right"); break; + case QalculateSettings::LEGEND_BOTTOM_LEFT: + legend=QLatin1String("bottom_left"); break; + case QalculateSettings::LEGEND_BOTTOM_RIGHT: + legend=QLatin1String("bottom_right"); break; + case QalculateSettings::LEGEND_BELOW: + legend=QLatin1String("below"); break; + case QalculateSettings::LEGEND_OUTSIDE: + legend=QLatin1String("outside"); break; + } + command += QString::fromLatin1(" legend=%1").arg(legend); + } + if (m_base.gridCheckBox->isChecked() != QalculateSettings::plotGrid()) + command += QString::fromLatin1(" grid=%1").arg(boolList[m_base.gridCheckBox->isChecked()]); + if (m_base.borderCheckBox->isChecked() != QalculateSettings::plotBorder()) + command += QString::fromLatin1(" border=%1").arg(boolList[m_base.borderCheckBox->isChecked()]); + if (m_base.colorCheckBox->isChecked() != QalculateSettings::coloredPlot()) + command += QString::fromLatin1(" color=%1").arg(boolList[m_base.colorCheckBox->isChecked()]); + if (m_base.inlineCheckBox->isChecked() != QalculateSettings::inlinePlot()) + command += QString::fromLatin1(" inline=%1").arg(boolList[m_base.inlineCheckBox->isChecked()]); + if (m_base.xLogCheckBox->isChecked()) + command += QString::fromLatin1(" xlog=true xlogbase='%1'").arg(m_base.xLogEdit->text()); + if (m_base.yLogCheckBox->isChecked()) + command += QString::fromLatin1(" ylog=true ylogbase='%1'").arg(m_base.yLogEdit->text()); + if (m_base.saveCheckBox->isChecked()) { + QString filetype; + switch (m_base.saveFileBox->currentIndex()) { + case 0: + filetype = QLatin1String("auto"); break; + case 1: + filetype = QLatin1String("png"); break; + case 2: + filetype = QLatin1String("ps"); break; + case 3: + filetype = QLatin1String("eps"); break; + case 4: + filetype = QLatin1String("latex"); break; + case 5: + filetype = QLatin1String("svg"); break; + case 6: + filetype = QLatin1String("fig"); break; + } + command += QString::fromLatin1(" filename='%1' filetype=%2").arg + (m_base.saveFileEdit->text(), filetype); + } + command += QString::fromLatin1(" xmin='%1' xmax='%2'").arg + (m_base.xMinEdit->text(), m_base.xMaxEdit->text()); + if (m_base.stepsButton->isChecked()) + command += QString::fromLatin1(" steps='%1'").arg(m_base.stepsEdit->text()); + else + command += QString::fromLatin1(" step='%1'").arg(m_base.stepEdit->text()); + for (int i = 0; i < m_xVarList.size(); ++i) { + if (i>0) + command += QLatin1Char(','); + command += QString::fromLatin1(" title='%1' '%2' xvar='%3'").arg + (m_base.functionTable->item(i,0)->text(), + m_base.functionTable->item(i,1)->text(), + m_xVarList[i]); + if (m_styleList[i] != QalculateSettings::plotStyle()) { + QString style; + switch(m_styleList[i]) { + case QalculateSettings::STYLE_LINES: + style=QLatin1String("lines"); break; + case QalculateSettings::STYLE_POINTS: + style=QLatin1String("points"); break; + case QalculateSettings::STYLE_LINES_POINTS: + style=QLatin1String("points_lines"); break; + case QalculateSettings::STYLE_BOXES: + style=QLatin1String("boxes"); break; + case QalculateSettings::STYLE_HISTOGRAM: + style=QLatin1String("histogram"); break; + case QalculateSettings::STYLE_STEPS: + style=QLatin1String("steps"); break; + case QalculateSettings::STYLE_CANDLESTICKS: + style=QLatin1String("candlesticks"); break; + case QalculateSettings::STYLE_DOTS: + style=QLatin1String("dots"); break; + } + command += QString::fromLatin1(" style=%1").arg(style); + } + if (m_smoothingList[i] != QalculateSettings::plotSmoothing()) { + QString smoothing; + switch(m_smoothingList[i]) { + case QalculateSettings::SMOOTHING_NONE: + smoothing=QLatin1String("none"); break; + case QalculateSettings::SMOOTHING_UNIQUE: + smoothing=QLatin1String("monotonic"); break; + case QalculateSettings::SMOOTHING_CSPLINES: + smoothing=QLatin1String("csplines"); break; + case QalculateSettings::SMOOTHING_BEZIER: + smoothing=QLatin1String("bezier"); break; + case QalculateSettings::SMOOTHING_SBEZIER: + smoothing=QLatin1String("sbezier"); break; + } + command += QString::fromLatin1(" smoothing=%1").arg(smoothing); + } + } + return command; +} + +K_PLUGIN_FACTORY_WITH_JSON(qalculateplotassistant, "qalculateplotassistant.json", registerPlugin();) +#include "qalculateplotassistant.moc" diff --git a/src/backends/qalculate/plotassistant/qalculateplotassistant.h b/src/backends/qalculate/plotassistant/qalculateplotassistant.h new file mode 100644 index 0000000..095267e --- /dev/null +++ b/src/backends/qalculate/plotassistant/qalculateplotassistant.h @@ -0,0 +1,61 @@ +/* + 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. + + --- + Copyright (C) 2011 Martin Kuettler + */ + +#ifndef QALCULATE_PLOT_ASSISTANT_H +#define QALCULATE_PLOT_ASSISTANT_H + +#include "assistant.h" +#include "settings.h" +#include "ui_qalculateplotdialog.h" +#include +#include + +class QalculatePlotAssistant : public Cantor::Assistant +{ + Q_OBJECT +private: + QDialog* m_dlg; + Ui::QalculatePlotAssistantBase m_base; + QStringList m_xVarList; + QList m_styleList; + QList m_smoothingList; + + QString plotCommand(); + void initDialog(QWidget* parent); + void saveRowInformation(int); + void loadRowInformation(int); +public Q_SLOTS: + void addFunction(); + void removeSelection(); + void clearFunctions(); + void currentItemChanged(int, int, int, int); + void toggleSteps(); + void toggleStep(); + +public: + QalculatePlotAssistant(QObject* parent, QList args); + ~QalculatePlotAssistant() override = default; + + void initActions() override; + + QStringList run(QWidget* parent) override; +}; + +#endif //QALCULATE_PLOT_ASSISTANT_H diff --git a/src/backends/qalculate/plotassistant/qalculateplotassistant.json b/src/backends/qalculate/plotassistant/qalculateplotassistant.json new file mode 100644 index 0000000..8851881 --- /dev/null +++ b/src/backends/qalculate/plotassistant/qalculateplotassistant.json @@ -0,0 +1,65 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "An Assistant for plotting with the Qalculate backend.", + "Description[ca@valencia]": "Un assistent per fer gràfiques amb el dorsal del Qalculate.", + "Description[ca]": "Un assistent per fer gràfiques amb el dorsal del Qalculate.", + "Description[cs]": "Asistent pro grafy s podpůrnou vrstvou Qualculate.", + "Description[de]": "Ein Assistent für das Plotten mit dem Qalculate-Modul.", + "Description[el]": "Βοηθός σχεδίασης με το σύστημα υποστήριξης Qalculate", + "Description[en_GB]": "An Assistant for plotting with the Qalculate backend.", + "Description[es]": "Un asistente para mostrar gráficos con el motor de Qalculate.", + "Description[et]": "Joonise loomise abiline Qalculate'i taustaprogrammiga", + "Description[fi]": "Opastettu funktioiden piirtäminen käyttäen Qalculate-taustajärjestelmää.", + "Description[fr]": "Un assistant pour le tracé avec le moteur « Qalculate »", + "Description[gl]": "Un axudante para debuxar coa infraestrutura Qalculate.", + "Description[it]": "Un assistente che crea grafici usando Qalculate.", + "Description[nl]": "Een assistent voor het plotten met de Qalculate-backend.", + "Description[nn]": "Eit hjelpevindauge for plotting med Qalculate-motoren.", + "Description[pl]": "Pomocnik rysowania wykresów przy użyciu silnika Qalculate.", + "Description[pt]": "Um assistente para desenhar gráficos com a infra-estrutura do Qalculate.", + "Description[pt_BR]": "Um assistente para geração de gráficos com a infraestrutura Qalculate.", + "Description[ru]": "Диалоговое окно, упрощающее построение графиков с использованием Qalculate.", + "Description[sk]": "Asistent na kreslenie s backendom Qalculate.", + "Description[sl]": "Pomočnik za izrisovanje grafov s Qalculate", + "Description[sv]": "En guide för att rita med bakgrundsprogrammet Qalculate.", + "Description[tr]": "Qalculate arka ucu ile bir grafik yardımcısı.", + "Description[uk]": "Допоміжна програма для креслення за допомогою модуля Qalculate.", + "Description[x-test]": "xxAn Assistant for plotting with the Qalculate backend.xx", + "Description[zh_CN]": "用 Qalculate 后端画图的助手。", + "Description[zh_TW]": "使用 Qalculate 後端介面的繪圖助手。", + "Id": "Plot2d", + "License": "GPL", + "Name": "QalculatePlot", + "Name[ca@valencia]": "Gràfic de Qalculate", + "Name[ca]": "Gràfic de Qalculate", + "Name[cs]": "QalculatePlot", + "Name[de]": "QalculatePlot", + "Name[el]": "QalculatePlot", + "Name[en_GB]": "QalculatePlot", + "Name[es]": "QalculatePlot", + "Name[et]": "Qalculate'i joonis", + "Name[fi]": "QalculatePlot", + "Name[fr]": "Tracé « Qalculate »", + "Name[gl]": "QalculatePlot", + "Name[it]": "Grafico con Qalculate", + "Name[nl]": "QalculatePlot", + "Name[nn]": "QalculatePlot", + "Name[pl]": "QalculatePlot", + "Name[pt]": "Gráfico Qalculate", + "Name[pt_BR]": "Gráfico do Qalculate", + "Name[ru]": "Графики Qalculate", + "Name[sk]": "QalculatePlot", + "Name[sl]": "Grafi Qalculate", + "Name[sv]": "Rita med Qalculate", + "Name[tr]": "QalculatePlot", + "Name[uk]": "QalculatePlot", + "Name[x-test]": "xxQalculatePlotxx", + "Name[zh_CN]": "QalculatePlot", + "Name[zh_TW]": "QalculatePlot", + "ServiceTypes": [ + "Cantor/Assistant" + ] + }, + "RequiredExtensions": "QalculatePlotExtension" +} diff --git a/src/backends/qalculate/plotassistant/qalculateplotdialog.ui b/src/backends/qalculate/plotassistant/qalculateplotdialog.ui new file mode 100644 index 0000000..2235fce --- /dev/null +++ b/src/backends/qalculate/plotassistant/qalculateplotdialog.ui @@ -0,0 +1,779 @@ + + + QalculatePlotAssistantBase + + + + 0 + 0 + 470 + 489 + + + + Cantor - Plot Dialog + + + + + + 0 + + + + Functions + + + + + + QAbstractItemView::SingleSelection + + + QAbstractItemView::SelectRows + + + false + + + + Title + + + + + Expression + + + + + + + + + + + + + + Qt::Horizontal + + + + 220 + 20 + + + + + + + + Add + + + buttonGroup + + + + + + + Remove + + + buttonGroup + + + + + + + Clear List + + + buttonGroup + + + + + + + + + + + + X variable + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + x + + + + + + + + + + + Style + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + Lines + + + + + Points + + + + + Points and Lines + + + + + Boxes + + + + + Histogram + + + + + Steps + + + + + Candlesticks + + + + + Dots + + + + + + + + + + + + Smoothing + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + None + + + + + Monotonic + + + + + Natural Cubic Splines + + + + + Bezier + + + + + Bezier (monotonic) + + + + + + + + + + Function Range + + + + + + X range + + + + + + + + + + 0 + 0 + + + + 0 + + + + + + + - + + + + + + + + 0 + 0 + + + + 10 + + + + + + + + + Sa&mpling rate + + + true + + + + + + + Step si&ze + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + + + + Options + + + + + + + + Plot title + + + + + + + + 0 + 0 + + + + + + + + + + + + X-axis label + + + + + + + + 0 + 0 + + + + + + + + + + + + Y-axis label + + + + + + + + 0 + 0 + + + + + + + + + + + + Legend position + + + + + + + + Hide legend + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Below + + + + + Outside + + + + + + + + + + + + Display Grid + + + + + + + Display full border + + + + + + + + + + + Use Colors + + + + + + + Display inline + + + + + + + + + + + Logarithmic x scale + + + + + + + + 0 + 0 + + + + + + + + + + + + Logarithmic y scale + + + + + + + + 0 + 0 + + + + + + + + + + File Options + + + + + + Save plot to file + + + + + + + + 0 + 0 + + + + false + + + + + + + File type + + + + + + + + Detect from filename + + + + + PNG + + + + + PS + + + + + EPS + + + + + LaTeX + + + + + SVG + + + + + FIG + + + + + + + + + + + Qt::Vertical + + + + 20 + 119 + + + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + false + + + + + + + + KLineEdit + QLineEdit +
    klineedit.h
    +
    + + KComboBox + QComboBox +
    kcombobox.h
    +
    +
    + + functionTable + xVarEdit + styleBox + smoothingBox + xMinEdit + xMaxEdit + stepsButton + stepsEdit + stepButton + stepEdit + plotTitleEdit + xLabelEdit + yLabelEdit + legendBox + gridCheckBox + borderCheckBox + colorCheckBox + inlineCheckBox + xLogCheckBox + xLogEdit + yLogCheckBox + yLogEdit + saveCheckBox + saveFileEdit + saveFileBox + + + + + stepButton + toggled(bool) + stepEdit + setEnabled(bool) + + + 168 + 460 + + + 235 + 462 + + + + + xLogCheckBox + toggled(bool) + xLogEdit + setEnabled(bool) + + + 111 + 79 + + + 111 + 79 + + + + + yLogCheckBox + toggled(bool) + yLogEdit + setEnabled(bool) + + + 111 + 82 + + + 111 + 82 + + + + + saveCheckBox + toggled(bool) + saveFileEdit + setEnabled(bool) + + + 111 + 84 + + + 111 + 84 + + + + + saveCheckBox + toggled(bool) + saveFileBox + setEnabled(bool) + + + 111 + 84 + + + 111 + 84 + + + + + saveCheckBox + toggled(bool) + label_23 + setEnabled(bool) + + + 69 + 84 + + + 67 + 84 + + + + + stepsButton + toggled(bool) + stepsEdit + setEnabled(bool) + + + 165 + 427 + + + 254 + 436 + + + + + + + +
    diff --git a/src/backends/qalculate/qalculatebackend.cpp b/src/backends/qalculate/qalculatebackend.cpp new file mode 100644 index 0000000..3610d52 --- /dev/null +++ b/src/backends/qalculate/qalculatebackend.cpp @@ -0,0 +1,96 @@ +/************************************************************************************ +* Copyright (C) 2009 by Milian Wolff * +* Copyright (C) 2011 by Matteo Agostinelli * +* * +* 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 * +*************************************************************************************/ + +#include "qalculatebackend.h" + +#include "ui_settings.h" + +#include "settings.h" +#include "qalculatesession.h" +#include "qalculateextensions.h" + +#include "cantor_macros.h" + +#include + + +QalculateBackend::QalculateBackend( QObject* parent,const QList args ) + : Cantor::Backend( parent, args ) +{ + setObjectName(QLatin1String("qalculatebackend")); + + new QalculateHistoryExtension(this); + new QalculateVariableManagementExtension(this); + new QalculateCalculusExtension(this); + new QalculateCASExtension(this); + new QalculateLinearAlgebraExtension(this); + new QalculatePlotExtension(this); +} + +QString QalculateBackend::id() const +{ + return QLatin1String("qalculate"); +} + +QString QalculateBackend::version() const +{ + return QLatin1String("0.9"); +} + +Cantor::Session* QalculateBackend::createSession() +{ + return new QalculateSession(this); +} + +Cantor::Backend::Capabilities QalculateBackend::capabilities() const +{ + return Cantor::Backend::Completion | Cantor::Backend::SyntaxHighlighting | Cantor::Backend::SyntaxHelp | Cantor::Backend::VariableManagement; +// return Cantor::Backend::Completion | Cantor::Backend::SyntaxHelp; +} + +QString QalculateBackend::description() const +{ + return i18n("Qalculate! is not your regular software replication of the cheapest available calculator. Qalculate! aims to make full use of the superior interface, power and flexibility of modern computers. "\ + "The center of attention in Qalculate! is the expression entry. Instead of entering each number in a mathematical expression separately, you can directly write the whole expression and later modify it. "\ + "The interpretation of expressions is flexible and fault tolerant, and if you nevertheless do something wrong, Qalculate! will tell you so. Not fully solvable expressions are however not errors. Qalculate! will simplify as far as it can and answer with an expression. "\ + "In addition to numbers and arithmetic operators, an expression may contain any combination of variables, units, and functions."); +} + +QUrl QalculateBackend::helpUrl() const +{ + // A sub-optimal solution but still this manual is fairly complete + return QUrl(QString::fromLatin1("http://qalculate.sourceforge.net/gtk-manual/index.html")); +} + +KConfigSkeleton* QalculateBackend::config() const +{ + return QalculateSettings::self(); +} + +QWidget* QalculateBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget = new QWidget(parent); + Ui::QalculateSettingsBase s; + s.setupUi(widget); + + return widget; +} + +K_PLUGIN_FACTORY_WITH_JSON(qalculatebackend, "qalculatebackend.json", registerPlugin();) +#include "qalculatebackend.moc" diff --git a/src/backends/qalculate/qalculatebackend.h b/src/backends/qalculate/qalculatebackend.h new file mode 100644 index 0000000..26e84ae --- /dev/null +++ b/src/backends/qalculate/qalculatebackend.h @@ -0,0 +1,46 @@ +/************************************************************************************ +* Copyright (C) 2009 by Milian Wolff * +* Copyright (C) 2011 by Matteo Agostinelli * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef QALCULATE_BACKEND_H +#define QALCULATE_BACKEND_H + +#include "backend.h" + +class QalculateBackend : public Cantor::Backend +{ + Q_OBJECT + +public: + explicit QalculateBackend( QObject* parent = nullptr, const QList args = QList()); + ~QalculateBackend() override = default; + + QString id() const override; + QString version() const override; + + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + QString description() const override; + QUrl helpUrl() const override; + + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; +}; + + +#endif /* QALCULATE_BACKEND_H */ diff --git a/src/backends/qalculate/qalculatebackend.json b/src/backends/qalculate/qalculatebackend.json new file mode 100644 index 0000000..5d24ab9 --- /dev/null +++ b/src/backends/qalculate/qalculatebackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Qalculate backend for Cantor. Gives you the advanced features of Qalculate", + "Description[ca@valencia]": "Dorsal de Qalculate per al Cantor. Vos ofereix les característiques avançades de Qalculate", + "Description[ca]": "Dorsal de Qalculate per al Cantor. Us ofereix les característiques avançades de Qalculate", + "Description[cs]": "Podpůrná vrstva Qalculate pro Cantor. Poskytuje pokročilé vlastnosti Qalculate", + "Description[de]": "Qalculate-Modul für Cantor. Ermöglicht die Nutzung der weiterführenden Funktionen von Qalculate", + "Description[el]": "Σύστημα υποστήριξης Qalculate για το Cantor. Παρέχει τις προηγμένες λειτουργίες του Qalculate", + "Description[en_GB]": "Qalculate backend for Cantor. Gives you the advanced features of Qalculate", + "Description[es]": "Motor de Qalculate para Cantor. Le proporciona las funciones avanzadas de Qalculate", + "Description[et]": "Cantori Qalculate'i taustaprogramm. Tagab enamiku Qalculate'i omaduste kasutamise.", + "Description[fi]": "Qalculaten Cantor-taustajärjestelmä. Tarjoaa Qalculaten edistyneet ominaisuudet", + "Description[fr]": "Moteur « Qalculate » pour Cantor. Vous propose les fonctionnalités avancées de « Qalculate »", + "Description[gl]": "Infraestrutura Qalculate para Cantor. Dá acceso ás características avanzadas do Qalculate", + "Description[it]": "Backend Cantor per Qalculate. Ti da' la possibilità di usare le funzionalità avanzate di Qalculate", + "Description[nl]": "Qalculate-backend voor Cantor. Geeft u de geavanceerde features van Qalculate", + "Description[nn]": "Qalculate-motor for Cantor. Gjev tilgang til avanserte funksjonar i Qalculate.", + "Description[pl]": "Silnik Qalculate dla Cantor. Daje tobie zaawansowane funkcje Qalculate", + "Description[pt]": "Infra-estrutura do Qalculate para o Cantor. Dá-lhe as funcionalidades avançadas do Qalculate", + "Description[pt_BR]": "Infraestrutura do Qalculate para o Cantor. Fornece-lhe as funcionalidades avançadas do Qalculate", + "Description[ru]": "Модуль поддержки калькулятора Qalculate", + "Description[sk]": "Qalculate backend pre Cantor. Dáva vám pokročilé možnosti Qalculate", + "Description[sl]": "Zaledje Qalculate za Cantor. Ponuja napredne zmožnosti programa Qalculate.", + "Description[sv]": "Bakgrundsprogrammet Qalculate förr Cantor. Ger tillgång till de avancerade funktionerna i Qalculate.", + "Description[tr]": "Cantor için Qalculate arka ucu. Qalculate gelişmiş özelliklerini sunar.", + "Description[uk]": "Модуль Qalculate для Cantor. Надає до ваших послуг додаткові можливості Qalculate", + "Description[x-test]": "xxQalculate backend for Cantor. Gives you the advanced features of Qalculatexx", + "Description[zh_CN]": "Qalculate 的 Cantor 后端,可以使用 Qalculate 的高级功能", + "Description[zh_TW]": "Cantor 的 Qalculate 後端介面。讓您使用 Qalculate 的進階功能", + "Icon": "qalculatebackend", + "Id": "qalculatebackend", + "License": "GPL", + "Name": "Qalculate", + "Name[ca@valencia]": "Qalculate", + "Name[ca]": "Qalculate", + "Name[cs]": "Qalculate", + "Name[da]": "Qalculate", + "Name[de]": "Qalculate", + "Name[el]": "Qalculate", + "Name[en_GB]": "Qalculate", + "Name[es]": "Qalculate", + "Name[et]": "Qalculate", + "Name[fi]": "Qalculate", + "Name[fr]": "Qalculate", + "Name[gl]": "Qalculate", + "Name[it]": "Qalculate", + "Name[nl]": "Qalculate", + "Name[nn]": "Qalculate", + "Name[pl]": "Qalculate", + "Name[pt]": "Qalculate", + "Name[pt_BR]": "Qalculate", + "Name[ru]": "Qalculate", + "Name[sk]": "Qalculate", + "Name[sl]": "Qalculate", + "Name[sv]": "Qalculate", + "Name[tr]": "Qalculate", + "Name[uk]": "Qalculate", + "Name[x-test]": "xxQalculatexx", + "Name[zh_CN]": "Qalculate", + "Name[zh_TW]": "Qalculate", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://qalculate.sourceforge.net/" + } +} diff --git a/src/backends/qalculate/qalculatebackend.kcfg b/src/backends/qalculate/qalculatebackend.kcfg new file mode 100644 index 0000000..5a52788 --- /dev/null +++ b/src/backends/qalculate/qalculatebackend.kcfg @@ -0,0 +1,133 @@ + + + + + + + true + + + + + + + + + + 1 + + + + 10 + + + + + + + + + 0 + + + + + + + + + + 0 + + + + false + + + + false + + + + false + + + + + + + + + + 3 + + + + true + + + + true + + + + false + + + + false + + + + 2 + + + + 100 + + + + + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + 2 + + + + + + diff --git a/src/backends/qalculate/qalculatecompletionobject.cpp b/src/backends/qalculate/qalculatecompletionobject.cpp new file mode 100644 index 0000000..09014cb --- /dev/null +++ b/src/backends/qalculate/qalculatecompletionobject.cpp @@ -0,0 +1,107 @@ +/************************************************************************************* +* Copyright (C) 2009 by Milian Wolff * +* * +* 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 * +*************************************************************************************/ + +#include "qalculatecompletionobject.h" + +#include + +#include +#include +#include +#include + +#include "qalculatesession.h" + +QalculateCompletionObject::QalculateCompletionObject(const QString& command, int index, QalculateSession* session) + : Cantor::CompletionObject(session) +{ + setLine(command, index); +} + +void QalculateCompletionObject::fetchIdentifierType() +{ + Variable* var = CALCULATOR->getVariable(identifier().toLatin1().data()); + if (var) { + emit fetchingTypeDone(VariableType); + return; + } + MathFunction* func = CALCULATOR->getFunction(identifier().toLatin1().data()); + if (!func) // can this happen? + emit fetchingTypeDone(UnknownType); + else if (func->args() == 0) + emit fetchingTypeDone(FunctionWithoutArguments); + else + emit fetchingTypeDone(FunctionWithArguments); +} + +int QalculateCompletionObject::locateIdentifier(const QString& cmd, int index) const +{ + if (index < 0) + return -1; + + int i; + int start_index = -1; + for (i=index; i>=0 && mayIdentifierContain(cmd[i]); --i) { + if (mayIdentifierBeginWith(cmd[i])) + start_index = i; + } + + return start_index; +} + + +void QalculateCompletionObject::fetchCompletions() +{ + QStringList comp; + // Matching Qt::CaseInsensitive here does not help, because a) Qalculate + // does distinguish cases, and b) KCompletion::makeCompletion matches + // case sensitive. + foreach ( Unit* item, CALCULATOR->units ) { + //TODO: this is fugily... + QString str(QLatin1String(item->name(true).c_str())); + if ( str.startsWith(command(), Qt::CaseSensitive) ) { + comp << str; + } + QString str2(QLatin1String(item->singular().c_str())); + if (str2.startsWith(command(), Qt::CaseSensitive) ) { + comp << str2; + } + // Also include the plural form for completion? + //QString str3(item->plural().c_str()); + //if (str3.startsWith(command(), Qt::CaseSensitive) ) { + // comp << str3; + //} + } + foreach ( ExpressionItem* item, CALCULATOR->variables ) { + //TODO: this is fugly... + QString str(QLatin1String(item->name(true).c_str())); + if ( str.startsWith(command(), Qt::CaseSensitive) ) { + comp << str; + } + } + foreach ( ExpressionItem* item, CALCULATOR->functions ) { + //TODO: this is fugly... + QString str(QLatin1String(item->name(true).c_str())); + if ( str.startsWith(command(), Qt::CaseSensitive) ) { + comp << str; + } + } + + setCompletions(comp); + emit fetchingDone(); +} diff --git a/src/backends/qalculate/qalculatecompletionobject.h b/src/backends/qalculate/qalculatecompletionobject.h new file mode 100644 index 0000000..b52fabd --- /dev/null +++ b/src/backends/qalculate/qalculatecompletionobject.h @@ -0,0 +1,40 @@ +/************************************************************************************* +* Copyright (C) 2009 by Milian Wolff * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef QALCULATE_COMPLETIONOBJECT_H +#define QALCULATE_COMPLETIONOBJECT_H + +#include "completionobject.h" + +class QalculateSession; + +class QalculateCompletionObject : public Cantor::CompletionObject +{ + public: + QalculateCompletionObject( const QString& command, int index, QalculateSession* session); + ~QalculateCompletionObject() override = default; + + protected: + int locateIdentifier(const QString& cmd, int index) const override; + + protected Q_SLOTS: + void fetchCompletions() override; + void fetchIdentifierType() override; +}; + +#endif /* _NULLCOMPLETIONOBJECT_H */ diff --git a/src/backends/qalculate/qalculateexpression.cpp b/src/backends/qalculate/qalculateexpression.cpp new file mode 100644 index 0000000..40c53cd --- /dev/null +++ b/src/backends/qalculate/qalculateexpression.cpp @@ -0,0 +1,884 @@ +/************************************************************************************* +* Copyright (C) 2009 by Milian Wolff * +* Copyright (C) 2011 by Matteo Agostinelli * +* * +* 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 * +*************************************************************************************/ + +#include + +#include "textresult.h" +#include "helpresult.h" +#include "imageresult.h" +#include "epsresult.h" +#include "settings.h" +#include "defaultvariablemodel.h" + +#include "qalculateexpression.h" +#include "qalculatesession.h" +#include "qalculatesyntaxhelpobject.h" + +#include +#include +#include +#include +#include +#include + +#include +// required for the plotting interface of Qalculator +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +QalculateExpression::QalculateExpression( QalculateSession* session, bool internal) + : Cantor::Expression(session, internal), m_tempFile(nullptr) +{ +} + +QalculateExpression::~QalculateExpression() +{ + if (m_tempFile) + delete m_tempFile; +} + +void QalculateExpression::evaluate() +{ + /* + Use Api for: + * help + * plot + Use qalc for any other command + */ + setStatus(Cantor::Expression::Computing); + if (command().isEmpty()) { + setStatus(Cantor::Expression::Done); + return; + } + + + QStringList commands = command().split(QLatin1Char('\n')); + foreach(const QString& command, commands) + { + if (command.contains(QLatin1String("help"))) { + QalculateSyntaxHelpObject* helper = new QalculateSyntaxHelpObject(command, (QalculateSession*) session()); + setResult(new Cantor::HelpResult(helper->answer())); + setStatus(Cantor::Expression::Done); + return; + } + else if (command.trimmed().startsWith(QLatin1String("plot")) && + (command.indexOf(QLatin1String("plot"))+4 == command.size() || + command[command.indexOf(QLatin1String("plot"))+4].isSpace())) { + evaluatePlotCommand(); + return; + } + } + // we are here because the commands entered by user are regular commands. We would have returned by now otherwise + QalculateSession* currentSession = dynamic_cast(session()); + currentSession->runExpression(); + +} + +void QalculateExpression::parseOutput(QString& output) +{ + output.remove(QLatin1String(">")); + output = output.trimmed(); + + qDebug() << "output from qalc for command: " << command() << " " << output << endl; + setResult(new Cantor::TextResult(output)); + // update the variable model + updateVariables(); + setStatus(Cantor::Expression::Done); +} + + +void QalculateExpression::updateVariables() +{ + QalculateSession* currentSession = dynamic_cast(session()); + QMap &variables = currentSession->variables; + Cantor::DefaultVariableModel* model = static_cast(currentSession->variableModel()); + QMap::const_iterator it = variables.constBegin(); + while (it != variables.constEnd()) { + model->addVariable(it.key(), it.value()); + ++it; + } +} + +void QalculateExpression::parseError(QString& error) +{ + error.remove(QLatin1String(">")); + error = error.trimmed(); + qDebug() << "Error from qalc for command: " << command() << " " << error << endl; + setErrorMessage(error); + setStatus(Cantor::Expression::Error); +} + +void QalculateExpression::interrupt() +{ + setStatus(Cantor::Expression::Interrupted); +} + +void QalculateExpression::evaluatePlotCommand() +{ + QString argString = command().mid(command().indexOf(QLatin1String("plot"))+4); + argString = QLatin1String(unlocalizeExpression(argString).c_str()); + argString = argString.trimmed(); + + QList argumentsList; + QStringList arguments; + + // For error handling + KColorScheme scheme(QApplication::palette().currentColorGroup()); + const QString errorColor = scheme.foreground(KColorScheme::NegativeText).color().name(); + const QString warningColor = scheme.foreground(KColorScheme::NeutralText).color().name(); + const QString msgFormat(QLatin1String("%2: %3
    \n")); + + if (!CALCULATOR->canPlot()) { + showMessage(i18n("Qalculate reports it cannot print. Is gnuplot installed?"), MESSAGE_ERROR); + return; + } + + // Split argString into the arguments + int i=0; + int j=0; + QString arg = QLatin1String(""); + while (i < argString.size()) { + if (argString[i] == QLatin1Char('"') || argString[i] == QLatin1Char('\'')) { + ++j; + while(j < argString.size() && argString[j] != argString[i]) { + if (argString[j] == QLatin1Char('\\')) { + ++j; + if (j == argString.size()) + continue; // just ignore trailing backslashes + } + arg += argString[j]; + ++j; + } + if (j == argString.size()) { + showMessage(i18n("missing %1", argString[i]), MESSAGE_ERROR); + return; + } + ++j; + } else if (argString[i] == QLatin1Char(',')) { + argumentsList.append(arguments); + arguments.clear(); + ++j; + } else { + while(j < argString.size() && !argString[j].isSpace() && + argString[j] != QLatin1Char('=') && argString[j] != QLatin1Char(',')) { + if (argString[j] == QLatin1Char('\\')) { + ++j; + if (j == argString.size()) + continue; // just ignore trailing backslashes + } + arg += argString[j]; + ++j; + } + } + if (argString[j] == QLatin1Char('=')) { + // Parse things like title="..." as one argument + arg += QLatin1Char('='); + i = ++j; + continue; + } + if (!arg.isEmpty()) { + arguments << arg; + arg = QLatin1String(""); + } + while (j < argString.size() && argString[j].isSpace()) + ++j; + i = j; + } + argumentsList.append(arguments); + + // Parse the arguments and compute the points to be plotted + std::vector y_vectors; + std::vector x_vectors; + std::vector plotDataParameterList; + PlotParameters plotParameters; + EvaluationOptions eo = evaluationOptions(); + /// temporary + plotParameters.title = ""; + plotParameters.y_label = ""; + plotParameters.x_label = ""; + plotParameters.filename = ""; + plotParameters.filetype = PLOT_FILETYPE_AUTO; + plotParameters.color = QalculateSettings::coloredPlot(); + plotParameters.auto_y_min = true; + plotParameters.auto_x_min = true; + plotParameters.auto_x_max = true; + plotParameters.auto_y_max = true; + plotParameters.y_log = false; + plotParameters.x_log = false; + plotParameters.grid = QalculateSettings::plotGrid(); + plotParameters.linewidth = QalculateSettings::plotLineWidth(); + plotParameters.show_all_borders = QalculateSettings::plotBorder(); + switch (QalculateSettings::plotLegend()) { + case QalculateSettings::LEGEND_NONE: + plotParameters.legend_placement = PLOT_LEGEND_NONE; + break; + case QalculateSettings::LEGEND_TOP_LEFT: + plotParameters.legend_placement = PLOT_LEGEND_TOP_LEFT; + break; + case QalculateSettings::LEGEND_TOP_RIGHT: + plotParameters.legend_placement = PLOT_LEGEND_TOP_RIGHT; + break; + case QalculateSettings::LEGEND_BOTTOM_LEFT: + plotParameters.legend_placement = PLOT_LEGEND_BOTTOM_LEFT; + break; + case QalculateSettings::LEGEND_BOTTOM_RIGHT: + plotParameters.legend_placement = PLOT_LEGEND_BOTTOM_RIGHT; + break; + case QalculateSettings::LEGEND_BELOW: + plotParameters.legend_placement = PLOT_LEGEND_BELOW; + break; + case QalculateSettings::LEGEND_OUTSIDE: + plotParameters.legend_placement = PLOT_LEGEND_OUTSIDE; + break; + } + bool plotInline = QalculateSettings::inlinePlot(); + MathStructure xMin; + MathStructure xMax; + xMin.setUndefined(); + xMax.setUndefined(); + MathStructure stepLength; + stepLength.setUndefined(); + int steps = QalculateSettings::plotSteps(); + + QString mustBeNumber = i18n("%1 must be a number."); + QString mustBeInteger = i18n("%1 must be a integer."); + QString mustBeBoolean = i18n("%1 must be a boolean."); + QString invalidOption = i18n("invalid option for %1: %2"); + + for (int i = 0; i < argumentsList.size(); ++i) { + std::string xVariable = "x"; + PlotDataParameters* plotDataParams = new PlotDataParameters; + plotDataParameterList.push_back(plotDataParams); + plotDataParams->title = ""; + switch(QalculateSettings::plotSmoothing()) { + case QalculateSettings::SMOOTHING_NONE: + plotDataParams->smoothing = PLOT_SMOOTHING_NONE; + break; + case QalculateSettings::SMOOTHING_UNIQUE: + plotDataParams->smoothing = PLOT_SMOOTHING_UNIQUE; + break; + case QalculateSettings::SMOOTHING_CSPLINES: + plotDataParams->smoothing = PLOT_SMOOTHING_CSPLINES; + break; + case QalculateSettings::SMOOTHING_BEZIER: + plotDataParams->smoothing = PLOT_SMOOTHING_BEZIER; + break; + case QalculateSettings::SMOOTHING_SBEZIER: + plotDataParams->smoothing = PLOT_SMOOTHING_SBEZIER; + break; + } + switch(QalculateSettings::plotStyle()) { + case QalculateSettings::STYLE_LINES: + plotDataParams->style = PLOT_STYLE_LINES; + break; + case QalculateSettings::STYLE_POINTS: + plotDataParams->style = PLOT_STYLE_POINTS; + break; + case QalculateSettings::STYLE_LINES_POINTS: + plotDataParams->style = PLOT_STYLE_POINTS_LINES; + break; + case QalculateSettings::STYLE_BOXES: + plotDataParams->style = PLOT_STYLE_BOXES; + break; + case QalculateSettings::STYLE_HISTOGRAM: + plotDataParams->style = PLOT_STYLE_HISTOGRAM; + break; + case QalculateSettings::STYLE_STEPS: + plotDataParams->style = PLOT_STYLE_STEPS; + break; + case QalculateSettings::STYLE_CANDLESTICKS: + plotDataParams->style = PLOT_STYLE_CANDLESTICKS; + break; + case QalculateSettings::STYLE_DOTS: + plotDataParams->style = PLOT_STYLE_DOTS; + break; + } + plotDataParams->yaxis2 = false; + plotDataParams->xaxis2 = false; + arguments = argumentsList[i]; + std::string expression; + int lastExpressionEntry = -1; + for (int j = 0; j < arguments.size(); ++j) { + QString argument = arguments[j]; + // PlotParameters + if (argument.startsWith(QLatin1String("plottitle="))) + plotParameters.title = argument.mid(10).toLatin1().data(); + else if (argument.startsWith(QLatin1String("ylabel="))) + plotParameters.y_label = argument.mid(7).toLatin1().data(); + else if (argument.startsWith(QLatin1String("xlabel="))) + plotParameters.x_label = argument.mid(7).toLatin1().data(); + else if (argument.startsWith(QLatin1String("filename="))) + plotParameters.filename = argument.mid(9).toLatin1().data(); + else if (argument.startsWith(QLatin1String("filetype="))) { + QString option = argument.mid(9); + if (option == QLatin1String("auto")) + plotParameters.filetype = PLOT_FILETYPE_AUTO; + else if (option == QLatin1String("png")) + plotParameters.filetype = PLOT_FILETYPE_PNG; + else if (option == QLatin1String("ps")) + plotParameters.filetype = PLOT_FILETYPE_PS; + else if (option == QLatin1String("eps")) + plotParameters.filetype = PLOT_FILETYPE_EPS; + else if (option == QLatin1String("latex")) + plotParameters.filetype = PLOT_FILETYPE_LATEX; + else if (option == QLatin1String("svg")) + plotParameters.filetype = PLOT_FILETYPE_SVG; + else if (option == QLatin1String("fig")) + plotParameters.filetype = PLOT_FILETYPE_FIG; + else { + QString msg = invalidOption.arg(QLatin1String("filetype"), option); + showMessage(msg, MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("font="))) + plotParameters.font = argument.mid(5).toLatin1().data(); + else if (argument.startsWith(QLatin1String("color="))) { + bool ok; + plotParameters.color = stringToBool(argument.mid(6), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("color")), + MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("ylog="))) { + bool ok; + plotParameters.y_log = stringToBool(argument.mid(5), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("ylog")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("xlog="))) { + bool ok; + plotParameters.x_log = stringToBool(argument.mid(5), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("xlog")), MESSAGE_ERROR); + return; + } + } + else if (argument.startsWith(QLatin1String("ylogbase="))) { + MathStructure ylogStr = CALCULATOR->calculate(argument.mid(9).toLatin1().data(), eo); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + if (ylogStr.isNumber()) { + Number ylogNum = ylogStr.number(); + plotParameters.y_log_base = ylogNum.floatValue(); + } else { + showMessage(mustBeNumber.arg(QLatin1String("ylogbase")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("xlogbase="))) { + MathStructure xlogStr = CALCULATOR->calculate(argument.mid(9).toLatin1().data(), eo); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + if (xlogStr.isNumber()) { + Number xlogNum = xlogStr.number(); + plotParameters.x_log_base = xlogNum.floatValue(); + } else { + showMessage(mustBeNumber.arg(QLatin1String("xlogbase")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("grid="))) { + bool ok; + plotParameters.grid = stringToBool(argument.mid(5), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("grid")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("linewidth="))) { + MathStructure lineWidthStr = CALCULATOR->calculate(argument.mid(10).toLatin1().data(), eo); + Number lineWidthNum; + if (lineWidthStr.isNumber() && lineWidthStr.number().isInteger()) { + lineWidthNum = lineWidthStr.number(); + plotParameters.linewidth = lineWidthNum.intValue(); + } else { + showMessage(mustBeInteger.arg(QLatin1String("linewidth")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("border="))) { + bool ok; + plotParameters.show_all_borders = stringToBool(argument.mid(7), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("border")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("legend="))) { + QString option = argument.mid(7); + if (option == QLatin1String("none")) + plotParameters.legend_placement = PLOT_LEGEND_NONE; + else if (option == QLatin1String("top_left")) + plotParameters.legend_placement = PLOT_LEGEND_TOP_LEFT; + else if (option == QLatin1String("top_right")) + plotParameters.legend_placement = PLOT_LEGEND_TOP_RIGHT; + else if (option == QLatin1String("bottom_left")) + plotParameters.legend_placement = PLOT_LEGEND_BOTTOM_LEFT; + else if (option == QLatin1String("bottom_right")) + plotParameters.legend_placement = PLOT_LEGEND_BOTTOM_RIGHT; + else if (option == QLatin1String("below")) + plotParameters.legend_placement = PLOT_LEGEND_BELOW; + else if (option == QLatin1String("outside")) + plotParameters.legend_placement = PLOT_LEGEND_OUTSIDE; + else { + QString msg = invalidOption.arg(QLatin1String("legend"), option); + showMessage(msg, MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + // PlotDataParameters + else if (argument.startsWith(QLatin1String("title="))) { + plotDataParams->title = argument.mid(6).toLatin1().data(); + } + else if (argument.startsWith(QLatin1String("smoothing="))) { + QString option = argument.mid(10); + if (option == QLatin1String("none")) + plotDataParams->smoothing = PLOT_SMOOTHING_NONE; + else if (option == QLatin1String("monotonic")) + plotDataParams->smoothing = PLOT_SMOOTHING_UNIQUE; + else if (option == QLatin1String("csplines")) + plotDataParams->smoothing = PLOT_SMOOTHING_CSPLINES; + else if (option == QLatin1String("bezier")) + plotDataParams->smoothing = PLOT_SMOOTHING_BEZIER; + else if (option == QLatin1String("sbezier")) + plotDataParams->smoothing = PLOT_SMOOTHING_SBEZIER; + else { + QString msg = invalidOption.arg(QLatin1String("smoothing"), option); + showMessage(msg, MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } else if (argument.startsWith(QLatin1String("style="))) { + QString option = argument.mid(6); + if (option == QLatin1String("lines")) + plotDataParams->style = PLOT_STYLE_LINES; + else if (option == QLatin1String("points")) + plotDataParams->style = PLOT_STYLE_POINTS; + else if (option == QLatin1String("points_lines")) + plotDataParams->style = PLOT_STYLE_POINTS_LINES; + else if (option == QLatin1String("boxes")) + plotDataParams->style = PLOT_STYLE_BOXES; + else if (option == QLatin1String("histogram")) + plotDataParams->style = PLOT_STYLE_HISTOGRAM; + else if (option == QLatin1String("steps")) + plotDataParams->style = PLOT_STYLE_STEPS; + else if (option == QLatin1String("candlesticks")) + plotDataParams->style = PLOT_STYLE_CANDLESTICKS; + else if (option == QLatin1String("dots")) + plotDataParams->style = PLOT_STYLE_DOTS; + else { + QString msg = invalidOption.arg(QLatin1String("style"), option); + showMessage(msg, MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } else if (argument.startsWith(QLatin1String("xaxis2="))) { + bool ok; + plotDataParams->xaxis2 = stringToBool(argument.mid(7), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("xaxis2")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } else if (argument.startsWith(QLatin1String("yaxis2="))) { + bool ok; + plotDataParams->yaxis2 = stringToBool(argument.mid(7), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("yaxis2")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + // inline, xmin, xmax, step, steps, xvar + // Custom options + else if (argument.startsWith(QLatin1String("inline="))) { + bool ok; + plotInline = stringToBool(argument.mid(7), &ok); + if (!ok) { + showMessage(mustBeBoolean.arg(QLatin1String("inline")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("xmin="))) { + xMin = CALCULATOR->calculate(argument.mid(5).toLatin1().data(), eo); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("xmax="))) { + xMax = CALCULATOR->calculate(argument.mid(5).toLatin1().data(), eo); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("step="))) { + stepLength = CALCULATOR->calculate(argument.mid(5).toLatin1().data(), eo); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + steps = -1; + } + else if (argument.startsWith(QLatin1String("steps="))) { + MathStructure stepsStr = CALCULATOR->calculate(argument.mid(6).toLatin1().data(), eo); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + Number stepsNum; + if (stepsStr.isNumber() && stepsStr.number().isInteger()) { + stepsNum = stepsStr.number(); + steps = stepsNum.intValue(); + stepLength.setUndefined(); + } else { + showMessage(mustBeInteger.arg(QLatin1String("steps")), MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + else if (argument.startsWith(QLatin1String("xvar="))) { + xVariable = argument.mid(5).toLatin1().data(); + } + else if (expression.empty()) { + expression = argument.toLatin1().data(); + lastExpressionEntry = j; + } + else if (lastExpressionEntry == j-1) { + expression += " "; + expression += argument.toLatin1().data(); + lastExpressionEntry = j; + } + else { + QString msg = i18n("found multiple expressions in one plot command (%1 and %2).", QLatin1String(expression.c_str()), argument); + showMessage(msg, MESSAGE_ERROR); + deletePlotDataParameters(plotDataParameterList); + return; + } + } + if (expression.empty()) + continue; + if (xMin.isUndefined()) { + if (!plotParameters.auto_x_min) + xMin = plotParameters.x_min; + else + xMin = 0.0; + } + if (xMax.isUndefined()) { + if (!plotParameters.auto_x_max) + xMax = plotParameters.x_max; + else + xMax = 10.0; + } + if (plotDataParams->title.empty()) + plotDataParams->title = expression; + MathStructure x_vec, y_vec; + x_vec.clearVector(); + if (!stepLength.isUndefined()) + y_vec = CALCULATOR->expressionToPlotVector(expression, xMin, xMax, stepLength, &x_vec, xVariable, eo.parse_options); + else + y_vec = CALCULATOR->expressionToPlotVector(expression, xMin, xMax, steps, &x_vec, xVariable, eo.parse_options); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + + x_vectors.push_back(x_vec); + y_vectors.push_back(y_vec); + + //PrintOptions po; + //y_vec.format(po); + + //setResult(new Cantor::TextResult(y_vec.print(po).c_str())); + //setStatus(Done); + //deletePlotDataParameters(plotDataParameterList); + //return; + } + + if (plotInline && plotParameters.filename.empty()) { + // TODO: get a temporary file name here + if (!m_tempFile) { +#ifdef WITH_EPS + m_tempFile=new QTemporaryFile(QDir::tempPath() + QLatin1String("/cantor_qalculate-XXXXXX.eps" )); +#else + m_tempFile=new QTemporaryFile(QDir::tempPath() + QLatin1String("/cantor_qalculate-XXXXXX.png")); +#endif + m_tempFile->open(); + } + plotParameters.filename = m_tempFile->fileName().toLatin1().data(); + plotParameters.filetype = PLOT_FILETYPE_AUTO; + } + + CALCULATOR->plotVectors(&plotParameters, y_vectors, x_vectors, + plotDataParameterList); + if (checkForCalculatorMessages() & (MSG_WARN|MSG_ERR)) { + deletePlotDataParameters(plotDataParameterList); + return; + } + + deletePlotDataParameters(plotDataParameterList); + + if (plotInline) { +#ifdef WITH_EPS + size_t p = plotParameters.filename.size(); + if (plotParameters.filetype == PLOT_FILETYPE_EPS || + plotParameters.filetype == PLOT_FILETYPE_PS || + (plotParameters.filetype == PLOT_FILETYPE_AUTO && p >= 4 && + plotParameters.filename.substr(p-4,4) == ".eps") || + (plotParameters.filetype == PLOT_FILETYPE_AUTO && p >= 3 && + plotParameters.filename.substr(p-3,3) == ".ps")) + setResult(new Cantor::EpsResult(QUrl(QString::fromStdString(plotParameters.filename)))); + else + setResult(new Cantor::ImageResult(QUrl(QString::fromStdString(plotParameters.filename)))); +#else + setResult(new Cantor::ImageResult(QUrl::fromLocalFile(QString::fromStdString(plotParameters.filename)))); +#endif + setStatus(Cantor::Expression::Done); + } + +} + +void QalculateExpression::showMessage(QString msg, MessageType mtype) +{ + KColorScheme scheme(QApplication::palette().currentColorGroup()); + const QString errorColor = scheme.foreground(KColorScheme::NegativeText).color().name(); + const QString warningColor = scheme.foreground(KColorScheme::NeutralText).color().name(); + const QString msgFormat(QLatin1String("%2: %3
    \n")); + if(mtype == MESSAGE_ERROR || mtype == MESSAGE_WARNING) { + msg.replace(QLatin1String("&"), QLatin1String("&")); + msg.replace(QLatin1String(">"), QLatin1String(">")); + msg.replace(QLatin1String("<"), QLatin1String("<")); + + if (mtype == MESSAGE_ERROR) { + msg = msgFormat.arg(errorColor, i18n("ERROR"), QLatin1String(msg.toLatin1().data())); + } else { + msg = msgFormat.arg(errorColor, i18n("WARNING"), QLatin1String(msg.toLatin1().data())); + } + setErrorMessage(msg); + setStatus(Error); + } else { + KMessageBox::information(QApplication::activeWindow(), msg); + } +} + +EvaluationOptions QalculateExpression::evaluationOptions() +{ + EvaluationOptions eo; + + eo.auto_post_conversion = QalculateSettings::postConversion() ? POST_CONVERSION_BEST : POST_CONVERSION_NONE; + eo.keep_zero_units = false; + + eo.parse_options = parseOptions(); + + switch (QalculateSettings::structuring()) { + case 0: + eo.structuring = STRUCTURING_NONE; + break; + case 1: + eo.structuring = STRUCTURING_SIMPLIFY; + break; + case 2: + eo.structuring = STRUCTURING_FACTORIZE; + break; + } + + return eo; +} + +ParseOptions QalculateExpression::parseOptions() +{ + ParseOptions po; + switch (QalculateSettings::angleUnit()) { + case 0: + po.angle_unit = ANGLE_UNIT_NONE; + break; + case 1: + po.angle_unit = ANGLE_UNIT_RADIANS; + break; + case 2: + po.angle_unit = ANGLE_UNIT_DEGREES; + break; + case 3: + po.angle_unit = ANGLE_UNIT_GRADIANS; + break; + } + + po.base = QalculateSettings::base(); + po.comma_as_separator = false; + + return po; +} + +void QalculateExpression::deletePlotDataParameters + (const std::vector& plotDataParameterList) +{ + for(size_t i = 0; i < plotDataParameterList.size(); ++i) + delete plotDataParameterList[i]; +} + +bool QalculateExpression::stringToBool(const QString &string, bool *ok) +{ + if (string == QLatin1String("true") || string == QLatin1String("1")) { + *ok = true; + return true; + } else if (string == QLatin1String("false") || string == QLatin1String("0")) { + *ok = true; + return false; + } else { + *ok = false; + return false; + } +} + +int QalculateExpression::checkForCalculatorMessages() +{ + // error handling, most of it copied from qalculate-kde + int msgType = MSG_NONE; + if ( CALCULATOR->message() ) { + QString msg; + KColorScheme scheme(QApplication::palette().currentColorGroup()); + const QString errorColor = scheme.foreground(KColorScheme::NegativeText).color().name(); + const QString warningColor = scheme.foreground(KColorScheme::NeutralText).color().name(); + const QString msgFormat(QLatin1String("%2: %3
    \n")); + MessageType mtype; + while(true) { + mtype = CALCULATOR->message()->type(); + switch(mtype) { + case MESSAGE_INFORMATION: + msgType |= MSG_INFO; break; + case MESSAGE_WARNING: + msgType |= MSG_WARN; break; + case MESSAGE_ERROR: + msgType |= MSG_ERR; break; + } + if(mtype == MESSAGE_ERROR || mtype == MESSAGE_WARNING) { + QString text = QLatin1String(CALCULATOR->message()->message().c_str()); + text.replace(QLatin1String("&"), QLatin1String("&")); + text.replace(QLatin1String(">"), QLatin1String(">")); + text.replace(QLatin1String("<"), QLatin1String("<")); + + if (mtype == MESSAGE_ERROR) { + msg.append(msgFormat.arg(errorColor, i18n("ERROR"), text)); + } else { + msg.append(msgFormat.arg(errorColor, i18n("WARNING"), text)); + } + } else { + KMessageBox::information(QApplication::activeWindow(), QLatin1String(CALCULATOR->message()->message().c_str())); + } + if(!CALCULATOR->nextMessage()) break; + } + if ( !msg.isEmpty() ) { + m_message += msg; + setErrorMessage(m_message); + setStatus(Error); + } + } + return msgType; +} + +std::string QalculateExpression::unlocalizeExpression(QString expr) +{ + // copy'n'pasted from qalculate plasma applet + + return CALCULATOR->unlocalizeExpression( + expr.replace(QChar(0xA3), QLatin1String("GBP")) + .replace(QChar(0xA5), QLatin1String("JPY")) + .replace(QLatin1String("$"), QLatin1String("USD")) + .replace(QChar(0x20AC), QLatin1String("EUR")) + .toLatin1().data() + ); +} + + + +QSharedPointer QalculateExpression::printOptions() +{ + QSharedPointer po(new PrintOptions); + + switch (QalculateSettings::fractionFormat()) { + case 0: + po->number_fraction_format = FRACTION_DECIMAL; + break; + case 1: + po->number_fraction_format = FRACTION_DECIMAL_EXACT; + break; + case 2: + po->number_fraction_format = FRACTION_FRACTIONAL; + break; + case 3: + po->number_fraction_format = FRACTION_COMBINED; + break; + } + po->indicate_infinite_series = QalculateSettings::indicateInfiniteSeries(); + po->use_all_prefixes = QalculateSettings::useAllPrefixes(); + po->negative_exponents = QalculateSettings::negativeExponents(); + + po->lower_case_e = true; + po->base = QalculateSettings::base(); + po->decimalpoint_sign = QLocale().decimalPoint().toLatin1(); + + switch (QalculateSettings::minExp()) { + case 0: + po->min_exp = EXP_NONE; + break; + case 1: + po->min_exp = EXP_PURE; + break; + case 2: + po->min_exp = EXP_SCIENTIFIC; + break; + case 3: + po->min_exp = EXP_PRECISION; + break; + case 4: + po->min_exp = EXP_BASE_3; + break; + } + return po; +} diff --git a/src/backends/qalculate/qalculateexpression.h b/src/backends/qalculate/qalculateexpression.h new file mode 100644 index 0000000..da66be0 --- /dev/null +++ b/src/backends/qalculate/qalculateexpression.h @@ -0,0 +1,64 @@ +/************************************************************************************* +* Copyright (C) 2009 by Milian Wolff * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef QALCULATE_EXPRESSION_H +#define QALCULATE_EXPRESSION_H + +#include "expression.h" +#include +#include +#include + +#include + +class QalculateSession; +class QTemporaryFile; + +class QalculateExpression : public Cantor::Expression +{ + Q_OBJECT + +private: + QTemporaryFile *m_tempFile; + + QString m_message; + enum MsgType { MSG_NONE=0, MSG_INFO=1, MSG_WARN=2, MSG_ERR=4 }; + + void evaluatePlotCommand(); + + bool stringToBool(const QString&, bool*); + void deletePlotDataParameters(const std::vector&); + void showMessage(QString msg, MessageType mtype); + int checkForCalculatorMessages(); + void updateVariables(); + QSharedPointer printOptions(); + EvaluationOptions evaluationOptions(); + ParseOptions parseOptions(); + std::string unlocalizeExpression(QString expr); + +public: + explicit QalculateExpression( QalculateSession* session, bool internal = false); + ~QalculateExpression() override; + + void evaluate() override; + void interrupt() override; + void parseOutput(QString& output); + void parseError(QString& error); +}; + +#endif diff --git a/src/backends/qalculate/qalculateextensions.cpp b/src/backends/qalculate/qalculateextensions.cpp new file mode 100644 index 0000000..fd809b5 --- /dev/null +++ b/src/backends/qalculate/qalculateextensions.cpp @@ -0,0 +1,200 @@ +/************************************************************************************ +* Copyright (C) 2011 by Matteo Agostinelli * +* * +* 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 * +*************************************************************************************/ + +#include "qalculateextensions.h" + +#include +#include +#include + +#include + +#define QALCULATE_EXT_CDTOR(name) Qalculate##name##Extension::Qalculate##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Qalculate##name##Extension::~Qalculate##name##Extension() {} + +QALCULATE_EXT_CDTOR(History) +QALCULATE_EXT_CDTOR(VariableManagement) +QALCULATE_EXT_CDTOR(CAS) +QALCULATE_EXT_CDTOR(Calculus) +QALCULATE_EXT_CDTOR(LinearAlgebra) + +QString QalculateHistoryExtension::lastResult() +{ + return QLatin1String("ans"); +} + +QString QalculateVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + return setValue(name,value); +} + +QString QalculateVariableManagementExtension::setValue(const QString& name, const QString& value) +{ + return QString::fromLatin1("%1 := %2").arg(name).arg(value); +} + +QString QalculateVariableManagementExtension::removeVariable(const QString& name) +{ + Q_UNUSED(name) + //CALCULATOR->getVariable(name.toStdString())->setActive(false); + return QString(); +} + +QString QalculateVariableManagementExtension::clearVariables() +{ + //CALCULATOR->resetVariables(); + return QString(); +} + +QString QalculateVariableManagementExtension::saveVariables(const QString& fileName) +{ + QString escapedFileName = fileName; + escapedFileName.replace(QLatin1Char(' '), QLatin1String("\\ ")); + return QString::fromLatin1("saveVariables %1").arg(escapedFileName); +} + +QString QalculateVariableManagementExtension::loadVariables(const QString& fileName) +{ + QString escapedFileName = fileName; + escapedFileName.replace(QLatin1Char(' '), QLatin1String("\\ ")); + return QString::fromLatin1("loadVariables %1").arg(escapedFileName); +} + +// Custom Plot Extension. This extension does not fit into the normal pattern, +// because it inherits Cantor::Extension directly. +// Also it does not do anything at all, because all the work is done by the +// QalculatePlotAssistant +QalculatePlotExtension::QalculatePlotExtension(QObject* parent) : + Cantor::Extension(QLatin1String("QalculatePlotExtension"), parent) +{ +} + +QalculatePlotExtension::~QalculatePlotExtension() = default; + +QString QalculateCASExtension::solve(const QStringList& equations, const QStringList& variables) +{ + QString eqstr=QString::fromLatin1("[%1]").arg(equations.join(QLatin1String(","))); + + QString variablestr=QString::fromLatin1("[%1]").arg(variables.join(QLatin1String(","))); + + return QString::fromLatin1("multisolve(%1,%2)").arg(eqstr, variablestr); +} + +QString QalculateCASExtension::simplify(const QString& expression) +{ + // There is (currently) no way to do this + return QString::fromLatin1("").arg(expression); +} + +QString QalculateCASExtension::expand(const QString& expression) +{ + // There is (currently) no way to do this + return QString::fromLatin1("").arg(expression); +} + +QString QalculateCalculusExtension::limit(const QString& expression, const QString& variable, const QString& limit) +{ + Q_UNUSED(expression) + Q_UNUSED(variable) + Q_UNUSED(limit) + // There is no limit function in Qalculate (at least none I know of), + // but fortunately this function seems not to be used anyway. + return QLatin1String(""); + //return QString("limit(%1, %2=%3);").arg(expression, variable, limit); +} + +QString QalculateCalculusExtension::differentiate(const QString& function,const QString& variable, int times) +{ + return QString::fromLatin1("diff(%1, %2, %3)").arg(function, variable, QString::number(times)); +} + +QString QalculateCalculusExtension::integrate(const QString& function, const QString& variable) +{ + return QString::fromLatin1("integrate(%1, %2)").arg(function, variable); +} + +QString QalculateCalculusExtension::integrate(const QString& function,const QString& variable, const QString& left, const QString& right) +{ + return QString::fromLatin1("integrate(%1, %2, %3, %4)").arg(function, variable, left, right); +} + +//Commands to create Vectors/Matrices +QString QalculateLinearAlgebraExtension::createVector(const QStringList& entries, VectorType type) +{ + // Neither of these does create a normal vector, but a n-times-1 or + // an 1-times-n matrix. + if(type==Cantor::LinearAlgebraExtension::ColumnVector) { + QString list=entries.join(QLatin1String("], [")); + return QString::fromLatin1("[[%1]]").arg(list); + } + else { + QString list=entries.join(QLatin1String(",")); + return QString::fromLatin1("[[%1]]").arg(list); + } +} + +QString QalculateLinearAlgebraExtension::createMatrix(const Matrix& matrix) +{ + QString cmd=QLatin1String("["); + foreach(const QStringList& row, matrix) + { + cmd+=QLatin1Char('['); + foreach(const QString& entry, row) + cmd+=entry+QLatin1Char(','); + cmd.chop(1); + cmd+=QLatin1String("],"); + } + cmd.chop(1); + cmd+=QLatin1String("]"); + + return cmd; +} + +QString QalculateLinearAlgebraExtension::identityMatrix(int size) +{ + return QString::fromLatin1("identity(%1)").arg(size); +} + +//basic functions +QString QalculateLinearAlgebraExtension::rank(const QString& matrix) +{ + // This feature seems to be missing in Qalculate + return QString::fromLatin1("").arg(matrix); +} + +QString QalculateLinearAlgebraExtension::invertMatrix(const QString& matrix) +{ + return QString::fromLatin1("inverse(%1)").arg(matrix); +} + +QString QalculateLinearAlgebraExtension::charPoly(const QString& matrix) +{ + return QString::fromLatin1("det(x*identity(%1)-%2)").arg(matrix, matrix); +} + +QString QalculateLinearAlgebraExtension::eigenVectors(const QString& matrix) +{ + // No such function + return QString::fromLatin1("").arg(matrix); +} + +QString QalculateLinearAlgebraExtension::eigenValues(const QString& matrix) +{ + // No such function + return QString::fromLatin1("").arg(matrix); +} diff --git a/src/backends/qalculate/qalculateextensions.h b/src/backends/qalculate/qalculateextensions.h new file mode 100644 index 0000000..96a9872 --- /dev/null +++ b/src/backends/qalculate/qalculateextensions.h @@ -0,0 +1,96 @@ +/************************************************************************************ +* Copyright (C) 2011 by Matteo Agostinelli * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef QALCULATEEXTENSIONS_H +#define QALCULATEEXTENSIONS_H + +#include + +#define QALCULATE_EXT_CDTOR_DECL(name) Qalculate##name##Extension(QObject* parent); \ + ~Qalculate##name##Extension(); + +class QalculateHistoryExtension : public Cantor::HistoryExtension +{ +public: + QALCULATE_EXT_CDTOR_DECL(History) + QString lastResult() override; +}; + +class QalculateVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + QALCULATE_EXT_CDTOR_DECL(VariableManagement) + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name, const QString& value) override; + QString removeVariable(const QString& name) override; + QString saveVariables(const QString& fileName) override; + QString loadVariables(const QString& fileName) override; + QString clearVariables() override; +}; + +class QalculatePlotExtension : public Cantor::Extension +{ +public: + QALCULATE_EXT_CDTOR_DECL(Plot) +}; + +class QalculateCASExtension : public Cantor::CASExtension +{ + public: + QALCULATE_EXT_CDTOR_DECL(CAS) + + public Q_SLOTS: + QString solve(const QStringList& equations, const QStringList& variables) override; + QString simplify(const QString& expression) override; + QString expand(const QString& expression) override; + +}; + +class QalculateCalculusExtension : public Cantor::CalculusExtension +{ + public: + QALCULATE_EXT_CDTOR_DECL(Calculus) + + public Q_SLOTS: + QString limit(const QString& expression, const QString& variable, const QString& limit) override; + QString differentiate(const QString& function,const QString& variable, int times) override; + QString integrate(const QString& function, const QString& variable) override; + QString integrate(const QString& function,const QString& variable, const QString& left, const QString& right) override; +}; + +class QalculateLinearAlgebraExtension : public Cantor::LinearAlgebraExtension +{ + public: + QALCULATE_EXT_CDTOR_DECL(LinearAlgebra) + + public Q_SLOTS: + //Commands to create Vectors/Matrices + QString createVector(const QStringList& entries, VectorType type) override; + QString createMatrix(const Matrix& matrix) override; + QString identityMatrix(int size) override; + + //basic functions + QString rank(const QString& matrix) override; + QString invertMatrix(const QString& matrix) override; + QString charPoly(const QString& matrix) override; + QString eigenVectors(const QString& matrix) override; + QString eigenValues(const QString& matrix) override; + +}; + +#endif /* QALCULATEEXTENSIONS_H */ diff --git a/src/backends/qalculate/qalculatehighlighter.cpp b/src/backends/qalculate/qalculatehighlighter.cpp new file mode 100644 index 0000000..6f8278d --- /dev/null +++ b/src/backends/qalculate/qalculatehighlighter.cpp @@ -0,0 +1,131 @@ +/************************************************************************************ +* Copyright (C) 2009 by Milian Wolff * +* * +* 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 * +*************************************************************************************/ + +#include "qalculatehighlighter.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +QalculateHighlighter::QalculateHighlighter(QObject* parent) + : Cantor::DefaultHighlighter(parent) +{ +} + +void QalculateHighlighter::highlightBlock(const QString& text) +{ + if ( text.isEmpty() || text.trimmed().isEmpty() || text.startsWith(QLatin1String(">>> ")) + // filter error messages, they get highlighted via html + || text.startsWith(i18n("ERROR") + QLatin1Char(':')) || text.startsWith(i18n("WARNING") + QLatin1Char(':')) ) { + return; + } + + int pos = 0; + int count; + ///TODO: Can't we use CALCULATOR->parse() or similar? + /// Question is how to get the connection between + /// MathStructur and position+length in @p text + const QStringList& words = text.split(QRegExp(QLatin1String("\\b")), QString::SkipEmptyParts); + + qDebug() << "highlight block:" << text; + + CALCULATOR->beginTemporaryStopMessages(); + + const QString decimalSymbol = QLocale().decimalPoint(); + + for ( int i = 0; i < words.size(); ++i, pos += count ) { + count = words[i].size(); + if ( words[i].trimmed().isEmpty() ) { + continue; + } + + qDebug() << "highlight word:" << words[i]; + + QTextCharFormat format = errorFormat(); + + if ( i < words.size() - 1 && words[i+1].trimmed() == QLatin1String("(") && CALCULATOR->getFunction(words[i].toUtf8().constData()) ) { + // should be a function + qDebug() << "function"; + format = functionFormat(); + } else if ( isOperatorAndWhitespace(words[i]) ) { + // stuff like ") * (" is an invalid expression, but actually OK + + // check if last number is actually a float + bool isFloat = false; + if ( words[i].trimmed() == decimalSymbol ) { + if ( i > 0 ) { + // lookbehind + QString lastWord = words[i-1].trimmed(); + if ( !lastWord.isEmpty() && lastWord.at(lastWord.size()-1).isNumber() ) { + qDebug() << "actually float"; + isFloat = true; + } + } + if ( !isFloat && i < words.size() - 1 ) { + // lookahead + QString nextWord = words[i+1].trimmed(); + if ( !nextWord.isEmpty() && nextWord.at(0).isNumber() ) { + qDebug() << "float coming"; + isFloat = true; + } + } + } + if ( !isFloat ) { + qDebug() << "operator / whitespace"; + format = operatorFormat(); + } else { + format = numberFormat(); + } + } else { + MathStructure expr = CALCULATOR->parse(words[i].toLatin1().constData()); + if ( expr.isNumber() || expr.isNumber_exp() ) { + qDebug() << "number"; + format = numberFormat(); + } else if ( expr.isVariable() ) { + qDebug() << "variable"; + format = variableFormat(); + } else if ( expr.isUndefined() ) { + qDebug() << "undefined"; + } else if ( expr.isUnit() || expr.isUnit_exp() ) { + qDebug() << "unit"; + format = keywordFormat(); + } + } + + setFormat(pos, count, format); + } + + CALCULATOR->endTemporaryStopMessages(); + +} + +bool QalculateHighlighter::isOperatorAndWhitespace(const QString& word) const +{ + foreach ( const QChar& c, word ) { + if ( c.isLetterOrNumber() ) { + return false; + } + } + return true; +} diff --git a/src/backends/qalculate/qalculatehighlighter.h b/src/backends/qalculate/qalculatehighlighter.h new file mode 100644 index 0000000..eba96f6 --- /dev/null +++ b/src/backends/qalculate/qalculatehighlighter.h @@ -0,0 +1,37 @@ +/************************************************************************************ +* Copyright (C) 2009 by Milian Wolff * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef QALCULATEHIGHLIGHTER_H +#define QALCULATEHIGHLIGHTER_H + +#include "defaulthighlighter.h" + +class QalculateHighlighter : public Cantor::DefaultHighlighter +{ +public: + explicit QalculateHighlighter(QObject* parent); + ~QalculateHighlighter() override = default; + +protected: + void highlightBlock(const QString& text) override; + +private: + bool isOperatorAndWhitespace(const QString &word) const; +}; + +#endif // QALCULATEHIGHLIGHTER_H diff --git a/src/backends/qalculate/qalculatesession.cpp b/src/backends/qalculate/qalculatesession.cpp new file mode 100644 index 0000000..8a9a9fa --- /dev/null +++ b/src/backends/qalculate/qalculatesession.cpp @@ -0,0 +1,430 @@ +/************************************************************************************ +* Copyright (C) 2009 by Milian Wolff * +* Copyright (C) 2011 by Matteo Agostinelli * +* * +* 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 * +*************************************************************************************/ + +#include "settings.h" + +#include "qalculatesession.h" +#include "qalculatecompletionobject.h" +#include "qalculatehighlighter.h" +#include "defaultvariablemodel.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "qalculatesyntaxhelpobject.h" + +QalculateSession::QalculateSession( Cantor::Backend* backend) + : Session(backend), + m_variableModel(new Cantor::DefaultVariableModel(this)), + m_process(nullptr), + m_currentExpression(nullptr), + m_isSaveCommand(false) +{ + /* + qalc does all of this by default but we still need the CALCULATOR instance for plotting + graphs + */ + + if ( !CALCULATOR ) { + new Calculator(); + CALCULATOR->loadGlobalDefinitions(); + CALCULATOR->loadLocalDefinitions(); + CALCULATOR->loadExchangeRates(); + } +} + +QalculateSession::~QalculateSession() +{ + CALCULATOR->abort(); + if(m_process) + m_process->kill(); +} + +void QalculateSession::login() +{ + emit loginStarted(); + + /* we will , most probably, use autoscripts for setting the mode , evaluate options, print options etc */ + + // if(!QalculateSettings::autorunScripts().isEmpty()){ + // QString autorunScripts = QalculateSettings::self()->autorunScripts().join(QLatin1String("\n")); + // + // evaluateExpression(autorunScripts, QalculateExpression::DeleteOnFinish); + // } + + /* + set up the process here. The program path , arguments(if any),channel modes , and connections should all be set up here. + once the setup is complete, start the process and inform the worksheet that we are ready + */ + m_process = new QProcess(this); + + m_process->setProgram(QStandardPaths::findExecutable(QLatin1String("qalc"))); + m_process->setProcessChannelMode(QProcess::SeparateChannels); + + connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput())); + connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readError())); + connect(m_process, SIGNAL(started()), this, SLOT(processStarted())); + + m_process->start(); + + changeStatus(Session::Done); + emit loginDone(); +} + +void QalculateSession::readOutput() +{ + while(m_process->bytesAvailable()) { + m_output.append(QString::fromLocal8Bit(m_process->readLine())); + qDebug() << m_output << endl; + } + + if(m_currentExpression && !m_output.isEmpty() && m_output.trimmed().endsWith(QLatin1String(">"))) { + + // check if the commandQueue is empty or not . if it's not empty run the "runCommandQueue" function. + // store the output in finalOutput and clear m_output + + if(m_currentCommand.trimmed().isEmpty()) + m_output.clear(); + + if(!m_output.toLower().contains(QLatin1String("error")) && m_isSaveCommand) { + storeVariables(m_currentCommand, m_output); + m_isSaveCommand = false; + } + + m_output = m_output.trimmed(); + m_output.remove(m_currentCommand); + if (!m_output.isEmpty()) + m_finalOutput.append(m_output); + + // we tried to perform a save operation but failed(see parseSaveCommand()).In such a case + // m_output will be empty but m_saveError will contain the error message. + if(!m_saveError.isEmpty()) { + m_finalOutput.append(m_saveError); + m_saveError.clear(); + } + + m_finalOutput.append(QLatin1String("\n")); + m_output.clear(); + + + + if (!m_commandQueue.isEmpty()) + runCommandQueue(); + else { + qDebug () << "parsing output: " << m_finalOutput << endl; + m_currentExpression->parseOutput(m_finalOutput); + m_finalOutput.clear(); + } + + } +} + +void QalculateSession::storeVariables(QString& currentCmd, QString output) +{ + + // internally we pass save(value,variable) command to qlac to save the variables. see parseSaveCommand() + // TODO: if the user if trying to override a default variable(constants etc) or an existing variable, ask the user if he/she wants to override it or not. + + qDebug() << "save command " << currentCmd << endl; + + /** + if we have reached here, we expect our variable model to be updated with new variables. + In case the variable model is not updated, it most probably because we were not able to successfully parse the + current command and output to extract variable and value + + This is probably not the best way to get the variable and value. + But since qalc does not provide a way to get the list of variables, we will have to stick to parsing + **/ + QString value; + QString var; + QRegExp regex; + // find the value + regex.setPattern(QLatin1String("[\\s\\w\\W]+=\\s*([\\w\\W]+)")); + if(regex.exactMatch(output)) { + int pos = regex.indexIn(output); + if (pos > -1) { + value = regex.cap(1); + value = value.trimmed(); + value.replace(QLatin1String("\n"), QLatin1String("")); + value.remove(QLatin1String(">")); + } + } + + //find the varaiable. + // ex1: currentCmd = save(10, var_1,category, title): var_1 = variable + // ex2: currentCmd = save(planet(jupter,mass), jupiter_mass, category, title): jupiter_mass = variable + // Not the best regex. Cab be improved + regex.setPattern(QLatin1String("\\s*save\\s*\\(\\s*[\\s\\w]+\\s*,([\\s\\w]+),*[\\w\\W]*\\)\\s*;*$|\\s*save\\s*\\(\\s*[\\s\\w\\W]+\\)\\s*,([\\s\\w]+),*[\\w\\W]*\\)\\s*;*$")); + if(regex.exactMatch(currentCmd)) { + int pos = regex.indexIn(currentCmd); + if (pos > -1) { + if(!regex.cap(1).trimmed().isEmpty()) + var = regex.cap(1).trimmed(); + else + var = regex.cap(2).trimmed(); + + var = var.trimmed(); + var.replace(QLatin1String("\n"), QLatin1String("")); + var.remove(QLatin1String(">")); + } + } + if(!value.isEmpty() && !var.isEmpty()) + variables.insert(var, value); + +} + +void QalculateSession::readError() +{ + + QString error = QLatin1String(m_process->readAllStandardError()); + if(m_currentExpression) { + m_currentExpression->parseError(error); + } +} + +void QalculateSession::processStarted() +{ + qDebug() << "process started " << m_process->program() << m_process->processId() << endl; +} + +void QalculateSession::logout() +{ + qDebug () << "logging out " << endl; + if(m_process) { + m_process->write("quit\n"); + if(!m_process->waitForFinished(1000)) + m_process->kill(); + } + + changeStatus(Status::Disable); +} + +void QalculateSession::interrupt() +{ + qDebug () << "interrupting .... " << endl; + if(m_currentExpression) + m_currentExpression->interrupt(); + + m_commandQueue.clear(); + m_expressionQueue.clear(); + m_output.clear(); + m_finalOutput.clear(); + m_currentCommand.clear(); + m_currentExpression = nullptr; + +} + +void QalculateSession::runExpression() +{ + + const QString& command = m_currentExpression->command(); + foreach(const QString& cmd, command.split(QLatin1Char('\n'))) { + m_commandQueue.enqueue(cmd); + } + runCommandQueue(); + +} + + +void QalculateSession::runCommandQueue() +{ + if (!m_commandQueue.isEmpty()) { + m_currentCommand = m_commandQueue.dequeue(); + // parse the current command if it's a save/load/store command + if( m_currentCommand.toLower().trimmed().startsWith(QLatin1String("save")) || + m_currentCommand.toLower().trimmed().startsWith(QLatin1String("store")) || + m_currentCommand.trimmed().startsWith(QLatin1String("saveVariables"))) { + + m_currentCommand = parseSaveCommand(m_currentCommand); + } + + + m_currentCommand = m_currentCommand.trimmed(); + m_currentCommand += QLatin1String("\n"); + m_process->write(m_currentCommand.toLocal8Bit()); + + } +} + +QString QalculateSession::parseSaveCommand(QString& currentCmd) +{ + /* + make sure the command is: + * formatted correctly. e.g if the command is save(value,variable), we have to make sure that there is no space between save and '(', otherwise qalc + waits for user input which is not supported by us as of now + * supported save commands: save(value,variable,[category],[title]), save definitions, save mode, save var, store var, + saveVariables filename + */ + + QRegExp regex; + regex.setCaseSensitivity(Qt::CaseInsensitive); + + regex.setPattern(QLatin1String("\\s*save\\s*definitions\\s*")); + if(regex.exactMatch(currentCmd)) { + // save the variables in ~/.cantor/backends/qalculate/definitions + currentCmd.clear(); + return currentCmd; + } + + regex.setPattern(QLatin1String("\\s*save\\s*mode\\s*")); + if(regex.exactMatch(currentCmd)) { + // save the mode in ~/.cantor/backends/qalculate/cantor_qalc.cfg + currentCmd.clear(); + return currentCmd; + } + + regex.setPattern(QLatin1String("\\s*saveVariables\\s*[\\w\\W]+")); + if(regex.exactMatch(currentCmd)) { + // save the variables in a file + currentCmd.clear(); + return currentCmd; + } + + + regex.setPattern(QLatin1String("\\s*store\\s*([a-zA-Z_]+[\\w]*)|\\s*save\\s*([a-zA-Z_]+[\\w]*)")); + if(regex.exactMatch(currentCmd)) { + m_isSaveCommand = true; + int pos = regex.indexIn(currentCmd); + if(pos > -1) { + if(!regex.cap(1).trimmed().isEmpty()) + currentCmd = QStringLiteral("save(%1, %2)").arg(QStringLiteral("ans")).arg(regex.cap(1).trimmed()); + else + currentCmd = QStringLiteral("save(%1, %2)").arg(QStringLiteral("ans")).arg(regex.cap(2).trimmed()); + + return currentCmd; + } + } + + regex.setPattern(QLatin1String("\\s*save\\s*(\\([\\w\\W]+\\))\\s*;*$")); + if(regex.exactMatch(currentCmd)) { + m_isSaveCommand = true; + int pos = regex.indexIn(currentCmd); + if (pos > -1) { + currentCmd = QStringLiteral("save%1").arg(regex.cap(1).trimmed()); + return currentCmd; + } + } + + /* + If we have not returned by this point, it's because: + * we did not parse the save command properly. This might be due to malformed regular expressions. + * or the commnad given by the user is malformed. More likely to happen + In both these cases we will simply return an empty string because we don't want qalc to run malformed queries, + else it would wait for user input and hence Qprocess would never return a complete output and the expression will remain in + 'calculating' state + */ + m_saveError = currentCmd + QLatin1String("\nError: Could not save.\n"); + return QLatin1String(""); + +} + +void QalculateSession::currentExpressionStatusChanged(Cantor::Expression::Status status) +{ + // depending on the status of the expression change the status of the session; + switch (status) { + + case Cantor::Expression::Computing: + break; + case Cantor::Expression::Interrupted: + changeStatus(Cantor::Session::Done); + break; + case Cantor::Expression::Done: + case Cantor::Expression::Error: + qDebug() << " ****** STATUS " << status; + changeStatus(Cantor::Session::Done); + if(m_expressionQueue.size() > 0) + m_expressionQueue.dequeue(); + if(!m_expressionQueue.isEmpty()) + runExpressionQueue(); + } +} + +Cantor::Expression* QalculateSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + + qDebug() << " ** evaluating expression: " << cmd << endl; + qDebug() << " size of expression queue: " << m_expressionQueue.size() << endl; + + changeStatus(Cantor::Session::Running); + + QalculateExpression* expr = new QalculateExpression(this, internal); + expr->setFinishingBehavior(behave); + expr->setCommand(cmd); + + m_expressionQueue.enqueue(expr); + runExpressionQueue(); + + return expr; + +} + +void QalculateSession::runExpressionQueue() +{ + if(!m_expressionQueue.isEmpty()) { + + if(!m_currentExpression) + m_currentExpression = m_expressionQueue.head(); + + else { + /* there was some expression that was being executed by cantor. We run the new expression only + if the current expression's status is 'Done' or 'Error', if not , we simply return + */ + Cantor::Expression::Status expr_status = m_currentExpression->status(); + if(expr_status != Cantor::Expression::Done && expr_status != Cantor::Expression::Error) + return; + } + + m_currentExpression = m_expressionQueue.head(); + connect(m_currentExpression, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(currentExpressionStatusChanged(Cantor::Expression::Status))); + // start processing the expression + m_currentExpression->evaluate(); + + } +} + + +Cantor::CompletionObject* QalculateSession::completionFor(const QString& command, int index) +{ + return new QalculateCompletionObject(command, index, this); +} + +Cantor::SyntaxHelpObject* QalculateSession::syntaxHelpFor(const QString& cmd) +{ + return new QalculateSyntaxHelpObject(cmd, this); +} + +QSyntaxHighlighter* QalculateSession::syntaxHighlighter(QObject* parent) +{ + return new QalculateHighlighter(parent); +} + + +QAbstractItemModel* QalculateSession::variableModel() +{ + return m_variableModel; +} diff --git a/src/backends/qalculate/qalculatesession.h b/src/backends/qalculate/qalculatesession.h new file mode 100644 index 0000000..6d52b70 --- /dev/null +++ b/src/backends/qalculate/qalculatesession.h @@ -0,0 +1,90 @@ +/************************************************************************************* +* Copyright (C) 2009 by Milian Wolff * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software * +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * +*************************************************************************************/ + +#ifndef QALCULATE_SESSION_H +#define QALCULATE_SESSION_H + +#include "session.h" +#include "qalculateexpression.h" + +#include +#include +#include + +#include +#include + +namespace Cantor { +class DefaultVariableModel; +} + +class QalculateEngine; +class QProcess; + + +class QalculateSession : public Cantor::Session +{ + Q_OBJECT + +private: + Cantor::DefaultVariableModel* m_variableModel; + QProcess* m_process; + QalculateExpression* m_currentExpression; + QString m_output; + QString m_finalOutput; + QString m_currentCommand; + QString m_saveError; + QQueue m_expressionQueue; + QQueue m_commandQueue; + bool m_isSaveCommand; + + +private: + void runExpressionQueue(); + void runCommandQueue(); + QString parseSaveCommand(QString& currentCmd); + void storeVariables(QString& currentCmd, QString output); + +public: + explicit QalculateSession( Cantor::Backend* backend); + ~QalculateSession() override; + + void login() override; + void logout() override; + + void interrupt() override; + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& cmd, int index=-1) override; + Cantor::SyntaxHelpObject* syntaxHelpFor(const QString& cmd) override; + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + + void runExpression(); + QAbstractItemModel* variableModel() override; + +public: + QMap variables; + +public Q_SLOTS: + void readOutput(); + void readError(); + void processStarted(); + void currentExpressionStatusChanged(Cantor::Expression::Status status); +}; + +#endif diff --git a/src/backends/qalculate/qalculatesyntaxhelpobject.cpp b/src/backends/qalculate/qalculatesyntaxhelpobject.cpp new file mode 100644 index 0000000..5d5bc68 --- /dev/null +++ b/src/backends/qalculate/qalculatesyntaxhelpobject.cpp @@ -0,0 +1,277 @@ +/************************************************************************************* + * Copyright (C) 2009 by Milian Wolff * + * * + * 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 * + *************************************************************************************/ + +#include "qalculatesyntaxhelpobject.h" +#include "settings.h" +#include "qalculatesession.h" + +#include + +#include +#include +#include +#include +#include +#include + +QalculateSyntaxHelpObject::QalculateSyntaxHelpObject(const QString& command, QalculateSession* session) + : SyntaxHelpObject(command, session), m_answer(QString()) +{ +} + +void QalculateSyntaxHelpObject::fetchInformation() +{ + std::string cmd = command().remove(QLatin1String("help")).simplified().toLatin1().data(); + qDebug() << "HELP CALLED FOR:" << QLatin1String(cmd.c_str()); + + if (cmd == "plot") { + setPlotInformation(); + return; + } + if (cmd == "saveVariables") { + setSaveVariablesInformation(); + return; + } + if (cmd == "loadVariables") { + setLoadVariablesInformation(); + return; + } + + ExpressionItem *item = CALCULATOR->getActiveExpressionItem(cmd); + + if (!item) { + m_answer = i18n("No function, variable or unit with specified name exist."); + return; + } + + switch(item->type()) { + case TYPE_FUNCTION: + MathFunction *f = (MathFunction*) item; + QString title = i18n("Function: %1", QLatin1String(item->title().c_str())); + const ExpressionName *ename = &f->preferredName(false); + int iargs = f->maxargs(); + if(iargs < 0) { + iargs = f->minargs() + 1; + } + QString str,str2,syntax; + str += QLatin1String(ename->name.c_str()); + str += QLatin1String("("); + if(iargs != 0) { + Argument *arg; + Argument default_arg; + for(int i2 = 1; i2 <= iargs; i2++) { + if(i2 > f->minargs()) { + str += QLatin1String("["); + } + if(i2 > 1) { + str += QLatin1String(CALCULATOR->getComma().c_str()); + str += QLatin1String(" "); + } + arg = f->getArgumentDefinition(i2); + if(arg && !arg->name().empty()) { + str2 = QLatin1String(arg->name().c_str()); + } else { + str2 = QLatin1String("argument"); + str2 += QLatin1String(" "); + str2 += QString::number(i2); + } + str += str2; + if(i2 > f->minargs()) { + str += QLatin1String("]"); + } + } + if(f->maxargs() < 0) { + str += QLatin1String(CALCULATOR->getComma().c_str()); + str += QLatin1String(" ..."); + } + } + str += QLatin1String(")"); + syntax = QString::fromLatin1("

    %1

    ").arg(str); + + QString arguments = QLatin1String(""); + if(iargs != 0) { + Argument *arg; + Argument default_arg; + for(int i2 = 1; i2 <= iargs; i2++) { + arg = f->getArgumentDefinition(i2); + if(arg && !arg->name().empty()) { + str = QLatin1String(arg->name().c_str()); + } else { + str = QString::number(i2); + } + str += QLatin1String(": "); + if(arg) { + str2 = QLatin1String(arg->printlong().c_str()); + } else { + str2 = QLatin1String(default_arg.printlong().c_str()); + } + if(i2 > f->minargs()) { + str2 += QLatin1String(" ("); + //optional argument, in description + str2 += QLatin1String("optional"); + if(!f->getDefaultValue(i2).empty()) { + str2 += QLatin1String(", "); + //argument default, in description + str2 += QLatin1String("default: "); + str2 += QLatin1String(f->getDefaultValue(i2).c_str()); + } + str2 += QLatin1String(")"); + } + str += str2; + arguments += QString::fromLatin1("

    %1

    ").arg(str); + } + } + + QString desc = QString::fromLatin1("

    %1

    ").arg(QLatin1String(item->description().c_str())); + + m_answer = title + desc + syntax + arguments; + setHtml(QLatin1String("

    ") + syntax + QLatin1String("

    ")); + emit done(); + } +} + +void QalculateSyntaxHelpObject::setPlotInformation() +{ + QString title = QLatin1String("

    ") + i18n("Plotting interface") + QLatin1String("

    "); + QString desc = QLatin1String("

    ") + i18n("Plots one or more functions either inline or in a separate window.") + QLatin1String("

    "); + QString expression = i18n("expression"); + QString option = i18n("option"); + QString value = i18n("value"); + QString syntax = QLatin1String("

    plot %1 [%2=%3 ...] [, %4 [%5=%6 ...]] ...

    "); + syntax = syntax.arg(expression, option, value, expression, option, value); + + QString integer = i18n("integer"); + QString boolean = i18n("boolean"); + QString number = i18n("number"); + QString defaultValue = i18n("default: %1"); + QString noDefault = QLatin1String(""); + QString optionFormat2 = QLatin1String("

    %1: %2

    "); + QString optionFormat3 = QLatin1String("

    %1: %2 (%3)

    "); + QString optionFormat4 = QLatin1String("

    %1: %2 (%3, %4)

    "); + + QStringList boolList; + boolList << QLatin1String("false") << QLatin1String("true"); + + QString legendDefault; + QString styleDefault; + QString smoothingDefault; + switch (QalculateSettings::plotLegend()) { + case QalculateSettings::LEGEND_NONE: + legendDefault = QLatin1String("none"); break; + case QalculateSettings::LEGEND_TOP_LEFT: + legendDefault = QLatin1String("top_left"); break; + case QalculateSettings::LEGEND_TOP_RIGHT: + legendDefault = QLatin1String("top_right"); break; + case QalculateSettings::LEGEND_BOTTOM_LEFT: + legendDefault = QLatin1String("bottom_left"); break; + case QalculateSettings::LEGEND_BOTTOM_RIGHT: + legendDefault = QLatin1String("bottom_right"); break; + case QalculateSettings::LEGEND_BELOW: + legendDefault = QLatin1String("below"); break; + case QalculateSettings::LEGEND_OUTSIDE: + legendDefault = QLatin1String("outside"); break; + } + switch(QalculateSettings::plotSmoothing()) { + case QalculateSettings::SMOOTHING_NONE: + smoothingDefault = QLatin1String("none"); break; + case QalculateSettings::SMOOTHING_UNIQUE: + smoothingDefault = QLatin1String("monotonic"); break; + case QalculateSettings::SMOOTHING_CSPLINES: + smoothingDefault = QLatin1String("csplines"); break; + case QalculateSettings::SMOOTHING_BEZIER: + smoothingDefault = QLatin1String("bezier"); break; + case QalculateSettings::SMOOTHING_SBEZIER: + smoothingDefault = QLatin1String("sbezier"); break; + } + switch(QalculateSettings::plotStyle()) { + case QalculateSettings::STYLE_LINES: + styleDefault = QLatin1String("lines"); break; + case QalculateSettings::STYLE_POINTS: + styleDefault = QLatin1String("points"); break; + case QalculateSettings::STYLE_LINES_POINTS: + styleDefault = QLatin1String("points_lines"); break; + case QalculateSettings::STYLE_BOXES: + styleDefault = QLatin1String("boxes"); break; + case QalculateSettings::STYLE_HISTOGRAM: + styleDefault = QLatin1String("histogram"); break; + case QalculateSettings::STYLE_STEPS: + styleDefault = QLatin1String("steps"); break; + case QalculateSettings::STYLE_CANDLESTICKS: + styleDefault = QLatin1String("candlesticks"); break; + case QalculateSettings::STYLE_DOTS: + styleDefault = QLatin1String("dots"); break; + } + + QString arguments = QLatin1String(""); + arguments += optionFormat3.arg(QLatin1String("title"), i18n("The function's name"), + defaultValue.arg(QLatin1String("expression"))); + arguments += optionFormat2.arg(QLatin1String("plottitle"), i18n("Title label")); + arguments += optionFormat2.arg(QLatin1String("xlabel"), i18n("x-axis label")); + arguments += optionFormat2.arg(QLatin1String("ylabel"), i18n("y-axis label")); + arguments += optionFormat2.arg(QLatin1String("filename"), i18n("Image to save plot to. If empty shows plot in a window on the screen. If inline=true the image is shown regardless of this option.")); + arguments += optionFormat3.arg(QLatin1String("filetype"), i18n("The image type to save as. One of auto, png, ps, eps, latex, svg, fig."), defaultValue.arg(QLatin1String("auto"))); + arguments += optionFormat4.arg(QLatin1String("color"), i18n("Set to true for colored plot, false for monochrome."), boolean, defaultValue.arg(boolList[QalculateSettings::coloredPlot()])); + arguments += optionFormat3.arg(QLatin1String("xmin"), i18n("Minimum x-axis value."), number); + arguments += optionFormat3.arg(QLatin1String("xmax"), i18n("Maximum x-axis value."), number); + arguments += optionFormat4.arg(QLatin1String("xlog"), i18n("If a logarithmic scale shall be used for the x-axis."), boolean, defaultValue.arg(QLatin1String("false"))); + arguments += optionFormat4.arg(QLatin1String("ylog"), i18n("If a logarithmic scale shall be used for the y-axis."), boolean, defaultValue.arg(QLatin1String("false"))); + arguments += optionFormat4.arg(QLatin1String("xlogbase"), i18n("Logarithmic base for the x-axis."), number, defaultValue.arg(QLatin1String("10"))); + arguments += optionFormat4.arg(QLatin1String("ylogbase"), i18n("Logarithmic base for the y-axis."), boolean, defaultValue.arg(QLatin1String("10"))); + arguments += optionFormat4.arg(QLatin1String("grid"), i18n("If a grid shall be shown in the plot."), boolean, defaultValue.arg(boolList[QalculateSettings::plotGrid()])); + arguments += optionFormat4.arg(QLatin1String("border"), i18n("If the plot shall be surrounded by borders on all sides (not just axis)."), boolean, defaultValue.arg(boolList[QalculateSettings::plotBorder()])); + arguments += optionFormat4.arg(QLatin1String("linewidth"), i18n("Width of lines."), integer, defaultValue.arg(QString::number(QalculateSettings::plotLineWidth()))); + arguments += optionFormat3.arg(QLatin1String("legend"), i18n("Where the plot legend shall be placed. One of none, top_left, top_right, bottom_left, bottom_right, below, outside"), defaultValue.arg(legendDefault)); + arguments += optionFormat3.arg(QLatin1String("smoothing"), i18n("Plot smoothing. One of none, unique, csplines, bezier, sbezier"), defaultValue.arg(smoothingDefault)); + arguments += optionFormat3.arg(QLatin1String("style"), i18n("Plot style. One of lines, points, points_lines, boxes, histogram, steps, candlesticks, dots"), defaultValue.arg(styleDefault)); + arguments += optionFormat4.arg(QLatin1String("xaxis2"), i18n("Use scale on second x-axis."), boolean, defaultValue.arg(QLatin1String("false"))); + arguments += optionFormat4.arg(QLatin1String("yaxis2"), i18n("Use scale on second y-axis."), boolean, defaultValue.arg(QLatin1String("false"))); + arguments += optionFormat4.arg(QLatin1String("inline"), i18n("If the plot is to be drawn inline, instead of in a new window."), boolean, defaultValue.arg(boolList[QalculateSettings::inlinePlot()])); + arguments += optionFormat3.arg(QLatin1String("step"), i18n("Distance between two interpolation points. See also steps."), number); + arguments += optionFormat4.arg(QLatin1String("steps"), i18n("Number of interpolation points. See also step."), integer, defaultValue.arg(QString::number(QalculateSettings::plotSteps()))); + arguments += optionFormat3.arg(QLatin1String("xvar"), i18n("The name of the x variable. This must be an unknown variable"), defaultValue.arg(QLatin1String("x"))); + + m_answer = title + desc + syntax + arguments; + + +} + +void QalculateSyntaxHelpObject::setSaveVariablesInformation() +{ + QString title = QLatin1String("

    ") + i18n("Save variables to a file") + QLatin1String("

    "); + QString desc = QLatin1String("

    ") + i18n("Save all currently defined variables to a file. They can be reloaded with %1.", QLatin1String("loadVariables")) + QLatin1String("

    "); + QString syntax = QLatin1String("

    saveVariables ") + i18n("file") + QLatin1String("

    "); + QString arguments = QLatin1String("

    ") + i18n("file: the file to save to") + QLatin1String("

    "); + m_answer = title + desc + syntax + arguments; +} + +void QalculateSyntaxHelpObject::setLoadVariablesInformation() +{ + QString title = QLatin1String("

    ") + i18n("Load variables from a file") + QLatin1String("

    "); + QString desc = QLatin1String("

    ") + i18n("Load variables from a file that has previously been created by %1.", QLatin1String("saveVariables")) + QLatin1String("

    "); + QString syntax = QLatin1String("

    loadVariables ") + i18n("file") + QLatin1String("

    "); + QString arguments = QLatin1String("

    ") + i18n("file: the file to load") + QLatin1String("

    "); + m_answer = title + desc + syntax + arguments; +} + + +QString QalculateSyntaxHelpObject::answer() +{ + fetchInformation(); + return m_answer; +} + diff --git a/src/backends/qalculate/qalculatesyntaxhelpobject.h b/src/backends/qalculate/qalculatesyntaxhelpobject.h new file mode 100644 index 0000000..1d3139d --- /dev/null +++ b/src/backends/qalculate/qalculatesyntaxhelpobject.h @@ -0,0 +1,42 @@ +/************************************************************************************* + * Copyright (C) 2009 by Milian Wolff * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 2 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the Free Software * + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * + *************************************************************************************/ + +#ifndef QALCULATESYNTAXHELPOBJECT_H +#define QALCULATESYNTAXHELPOBJECT_H + +#include + +class QalculateSession; + +class QalculateSyntaxHelpObject : public Cantor::SyntaxHelpObject +{ +public: + QalculateSyntaxHelpObject( const QString& command, QalculateSession* session ); + QString answer(); + +protected: + void fetchInformation() override; + + void setPlotInformation(); + void setSaveVariablesInformation(); + void setLoadVariablesInformation(); + + QString m_answer; +}; + +#endif // QALCULATESYNTAXHELPOBJECT_H diff --git a/src/backends/qalculate/settings.kcfgc b/src/backends/qalculate/settings.kcfgc new file mode 100644 index 0000000..6bbe336 --- /dev/null +++ b/src/backends/qalculate/settings.kcfgc @@ -0,0 +1,3 @@ +File=qalculatebackend.kcfg +ClassName=QalculateSettings +Singleton=true diff --git a/src/backends/qalculate/settings.ui b/src/backends/qalculate/settings.ui new file mode 100644 index 0000000..b4192e9 --- /dev/null +++ b/src/backends/qalculate/settings.ui @@ -0,0 +1,652 @@ + + + QalculateSettingsBase + + + + 0 + 0 + 420 + 327 + + + + + + + 0 + + + + General + + + + + + + + Number base: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Fraction format: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Decimal + + + + + Exact + + + + + Fractional + + + + + Combined + + + + + + + + + + + + Numerical display: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + None + + + + + Pure + + + + + Scientific + + + + + Precision + + + + + + + + + + + + Indicate infinite series: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Use all SI prefixes: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Use negative exponents: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 102 + + + + + + + + + Evaluate + + + + + + + + Convert to best SI units: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Angle unit: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + None + + + + + Radians + + + + + Degrees + + + + + Gradians + + + + + + + + + + + + Structuring Mode: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + None + + + + + Simplify + + + + + Factorize + + + + + + + + + + Qt::Vertical + + + + 20 + 185 + + + + + + + + + Plotting + + + + + + + + Display plots inline: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Colored Plots: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Show grid: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Show full borders: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Enabled + + + + + + + + + + + Width of lines: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1 + + + + + + + + + + + Sampling rate: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1 + + + + + + + + + + + Smoothing Mode: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + None + + + + + Monotonic + + + + + Natural cubic Splines + + + + + Bezier + + + + + Bezier (monotonic) + + + + + + + + + + + + Plot Style: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Lines + + + + + Points + + + + + Points and Lines + + + + + Boxes + + + + + Histogram + + + + + Steps + + + + + Candlesticks + + + + + Dots + + + + + + + + + + + + Legend Position: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Hide legend + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Below + + + + + Outside + + + + + + + + + + Qt::Vertical + + + + 20 + 22 + + + + + + + + + + + + + KComboBox + QComboBox +
    kcombobox.h
    +
    +
    + + kcfg_base + kcfg_fractionFormat + kcfg_minExp + kcfg_indicateInfiniteSeries + kcfg_useAllPrefixes + kcfg_negativeExponents + kcfg_postConversion + kcfg_angleUnit + kcfg_structuring + kcfg_inlinePlot + kcfg_coloredPlot + kcfg_plotGrid + kcfg_plotBorder + kcfg_plotLineWidth + kcfg_plotSteps + kcfg_plotSmoothing + kcfg_plotStyle + kcfg_plotLegend + + + +
    diff --git a/src/backends/sage/CMakeLists.txt b/src/backends/sage/CMakeLists.txt new file mode 100644 index 0000000..1f1f4eb --- /dev/null +++ b/src/backends/sage/CMakeLists.txt @@ -0,0 +1,37 @@ +set( SageBackend_SRCS + sagebackend.cpp + sagesession.cpp + sageexpression.cpp + sageextensions.cpp + sagekeywords.cpp + sagehighlighter.cpp + sagecompletionobject.cpp +) + +kconfig_add_kcfg_files(SageBackend_SRCS settings.kcfgc) +install(FILES sagebackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(SageBackend_SRCS settings.ui) + +add_backend(sagebackend ${SageBackend_SRCS}) + +target_link_libraries( cantor_sagebackend + KF5::Pty + KF5::SyntaxHighlighting) + +if(BUILD_TESTING) + add_executable( testsage testsage.cpp) + add_test(testsage testsage) + target_link_libraries( testsage + Qt5::Test + cantorlibs + cantortest + ) +endif() + +install(FILES cantor_sage.knsrc DESTINATION ${KDE_INSTALL_CONFDIR}) + +install( + PROGRAMS cantor-execsage + DESTINATION ${KDE_INSTALL_DATADIR}/cantor/sagebackend +) diff --git a/src/backends/sage/DESIGN b/src/backends/sage/DESIGN new file mode 100644 index 0000000..516ef71 --- /dev/null +++ b/src/backends/sage/DESIGN @@ -0,0 +1,22 @@ +This backend creates a bridge between Cantor and the Sage mathematical software. + +To accomplish this, it launches a sage session using KPtyProcess. +It sends the input to the process, and tries to parse the output. +(NOTE: KPtyProcess is used instead of a regular KProcess, because +when using KProcess, some weird errors showed up. e.g. when running +sage.misc.latex.pretty_print_default) + +The backend basically works by comparing the number of lines, +fed to the process, and the number of prompts read from it to +determine when a process is finished. To find out if a computation +has returned an image(e.g. whe plotting) it monitors the tmp directory +used by sage using KDirWatch, and returns an ImageResult if a new +file was created there while the computation was in progress. + +Sage offers the pretty_print_default option to automatically return latex code +for the results. This is used when Typesetting is enabled. + +TabCompletion is implemented by calling __IPYTHON.complete in the Session and parsing the +output. To make sure it doesn't mess with the history, some tricks are used. (see the code) + +Highlighting uses a simple list of known keywords and some regular expressions. (so no magic here) diff --git a/src/backends/sage/cantor-execsage b/src/backends/sage/cantor-execsage new file mode 100644 index 0000000..2d6ef2c --- /dev/null +++ b/src/backends/sage/cantor-execsage @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +ROOT="$($1 --root)" + +if [[ -f $ROOT"/bin/sage-env" ]]; then + . "$ROOT/bin/sage-env" >&2 +elif [[ -f $ROOT"/src/bin/sage-env" ]]; then + . "$ROOT/src/bin/sage-env" >&2 +else + exit 1 # We have a problem +fi + +exec sage-ipython -i --simple-prompt \ No newline at end of file diff --git a/src/backends/sage/cantor_sage.knsrc b/src/backends/sage/cantor_sage.knsrc new file mode 100644 index 0000000..cd6715a --- /dev/null +++ b/src/backends/sage/cantor_sage.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Sage) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/sage/sagebackend.cpp b/src/backends/sage/sagebackend.cpp new file mode 100644 index 0000000..0e4b367 --- /dev/null +++ b/src/backends/sage/sagebackend.cpp @@ -0,0 +1,110 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "sagebackend.h" + +#include "sagesession.h" +#include "settings.h" +#include "ui_settings.h" +#include "sageextensions.h" +#include "sagehighlighter.h" + +#include +#include + +#include "cantor_macros.h" + + +SageBackend::SageBackend( QObject* parent,const QList& args ) : Cantor::Backend( parent,args ) +{ + setObjectName(QLatin1String("sagebackend")); + qDebug()<<"Creating SageBackend"; + //initialize the supported extensions + new SageHistoryExtension(this); + new SageScriptExtension(this); + new SageCASExtension(this); + new SageCalculusExtension(this); + new SageLinearAlgebraExtension(this); + new SagePlotExtension(this); + new SagePackagingExtension(this); +} + +SageBackend::~SageBackend() +{ + qDebug()<<"Destroying SageBackend"; +} + +QString SageBackend::id() const +{ + return QLatin1String("sage"); +} + +QString SageBackend::version() const +{ + return QLatin1String("8.1 and 8.2"); +} + +Cantor::Session* SageBackend::createSession() +{ + qDebug()<<"Spawning a new Sage session"; + + return new SageSession(this); +} + +Cantor::Backend::Capabilities SageBackend::capabilities() const +{ + qDebug()<<"Requesting capabilities of SageSession"; + //Disable Cantor::Backend::LaTexOutput, see sagesession.cpp:421 + return Cantor::Backend::SyntaxHighlighting|Cantor::Backend::Completion; +} + +bool SageBackend::requirementsFullfilled() const +{ + QFileInfo info(SageSettings::self()->path().toLocalFile()); + return info.isExecutable(); +} + +QWidget* SageBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget=new QWidget(parent); + Ui::SageSettingsBase s; + s.setupUi(widget); + return widget; +} + +KConfigSkeleton* SageBackend::config() const +{ + return SageSettings::self(); +} + +QUrl SageBackend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation of Sage, please check if there is a translated version and use the correct url", + "http://www.sagemath.org/doc/reference/index.html")); +} + +QString SageBackend::description() const +{ + return i18n("Sage is a free open-source mathematics software system licensed under the GPL.
    " \ + "It combines the power of many existing open-source packages into a common Python-based interface."); +} + +K_PLUGIN_FACTORY_WITH_JSON(sagebackend, "sagebackend.json", registerPlugin();) +#include "sagebackend.moc" diff --git a/src/backends/sage/sagebackend.h b/src/backends/sage/sagebackend.h new file mode 100644 index 0000000..218b70e --- /dev/null +++ b/src/backends/sage/sagebackend.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SAGEBACKEND_H +#define _SAGEBACKEND_H + +#include "backend.h" + +class SageBackend : public Cantor::Backend +{ + Q_OBJECT + public: + explicit SageBackend( QObject* parent = nullptr, const QList& args = QList()); + ~SageBackend() override; + + QString id() const override; + QString version() const override; + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + bool requirementsFullfilled() const override; + + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; + + QUrl helpUrl() const override; + QString description() const override; +}; + + +#endif /* _SAGEBACKEND_H */ diff --git a/src/backends/sage/sagebackend.json b/src/backends/sage/sagebackend.json new file mode 100644 index 0000000..3e979ab --- /dev/null +++ b/src/backends/sage/sagebackend.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for the Sage Mathematics Software", + "Description[ca@valencia]": "Dorsal per al programari matemàtic Sage", + "Description[ca]": "Dorsal per al programari matemàtic Sage", + "Description[cs]": "Podpůrná vrstva pro matematický software Sage", + "Description[de]": "„Sage Mathematics Software“-Modul für Cantor", + "Description[el]": "Σύστημα υποστήριξης για το μαθηματικό λογισμικό Sage", + "Description[en_GB]": "Backend for the Sage Mathematics Software", + "Description[es]": "Motor para el software matemático Sage", + "Description[et]": "Sage matemaatikatarkvara taustaprogramm", + "Description[fi]": "Sage-matematiikkaohjelmiston taustajärjestelmä", + "Description[fr]": "Moteur pour le logiciel de mathématiques « Sage »", + "Description[gl]": "Infraestrutura do Software de matemáticas Sage", + "Description[it]": "Backend per il software matematico Sage", + "Description[nl]": "Backend voor de Sage wiskundige software", + "Description[nn]": "Motor for matematikkprogramvara Sage", + "Description[pl]": "Silnik dla programu matematycznego Sage", + "Description[pt]": "Infra-Estrutura da Aplicação Matemática Sage", + "Description[pt_BR]": "Infraestrutura para o Sage Mathematics Software", + "Description[ru]": "Модуль поддержки Sage", + "Description[sk]": "Backend pre matematický softvér Sage", + "Description[sl]": "Zaledje za matematično programsko opremo Sage", + "Description[sv]": "Bakgrundsprogram för matematikprogramvaran Sage", + "Description[tr]": "Sage Matematik Yazılımı için arka uç", + "Description[uk]": "Модуль математичного програмного забезпечення Sage", + "Description[x-test]": "xxBackend for the Sage Mathematics Softwarexx", + "Description[zh_CN]": "Sage 数学软件的后端", + "Description[zh_TW]": "Sage 數學系統的後端介面", + "Icon": "sagebackend", + "Id": "Sage", + "License": "GPL", + "Name": "Sage", + "Name[ca@valencia]": "Sage", + "Name[ca]": "Sage", + "Name[cs]": "Sage", + "Name[da]": "Sage", + "Name[de]": "Sage", + "Name[el]": "Sage", + "Name[en_GB]": "Sage", + "Name[es]": "Sage", + "Name[et]": "Sage", + "Name[fi]": "Sage", + "Name[fr]": "Sage", + "Name[gl]": "Sage", + "Name[it]": "Sage", + "Name[nl]": "Sage", + "Name[nn]": "Sage", + "Name[pl]": "Sage", + "Name[pt]": "Sage", + "Name[pt_BR]": "Sage", + "Name[ru]": "Sage", + "Name[sk]": "Sage", + "Name[sl]": "Sage", + "Name[sv]": "Sage", + "Name[tr]": "Sage", + "Name[uk]": "Sage", + "Name[x-test]": "xxSagexx", + "Name[zh_CN]": "Sage", + "Name[zh_TW]": "Sage", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://www.sagemath.org/" + } +} diff --git a/src/backends/sage/sagebackend.kcfg b/src/backends/sage/sagebackend.kcfg new file mode 100644 index 0000000..e2f36c4 --- /dev/null +++ b/src/backends/sage/sagebackend.kcfg @@ -0,0 +1,17 @@ + + + QStandardPaths + + + + + QUrl::fromLocalFile(QStandardPaths::findExecutable( QLatin1String("sage") )) + + + + + + diff --git a/src/backends/sage/sagecompletionobject.cpp b/src/backends/sage/sagecompletionobject.cpp new file mode 100644 index 0000000..28e96d7 --- /dev/null +++ b/src/backends/sage/sagecompletionobject.cpp @@ -0,0 +1,235 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "sagecompletionobject.h" + +#include "sagesession.h" +#include "sagekeywords.h" +#include "textresult.h" + +#include +#include + +SageCompletionObject::SageCompletionObject(const QString& command, int index, SageSession* session) : Cantor::CompletionObject(session) +{ + setLine(command, index); + m_expression=nullptr; +} + +SageCompletionObject::~SageCompletionObject() +{ + if(m_expression) + { + m_expression->interrupt(); + m_expression->deleteLater(); + } +} + +void SageCompletionObject::fetchCompletions() +{ + if (session()->status() == Cantor::Session::Disable) + { + QStringList allCompletions; + + allCompletions << SageKeywords::instance()->keywords(); + allCompletions << SageKeywords::instance()->functions(); + allCompletions << SageKeywords::instance()->variables(); + + setCompletions(allCompletions); + emit fetchingDone(); + } + else + { + if (m_expression) + return; + + //cache the value of the "_" variable into __hist_tmp__, so we can restore the previous result + //after complete() was evaluated + const QString& cmd = QLatin1String("__hist_tmp__=_; __CANTOR_IPYTHON_SHELL__.complete(\"")+command()+QLatin1String("\");_=__hist_tmp__"); + m_expression=session()->evaluateExpression(cmd, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::gotResult, this, &SageCompletionObject::extractCompletions); + } +} + +void SageCompletionObject::extractCompletions() +{ + SageSession* s=qobject_cast(session()); + if(s&&s->sageVersion()result(); + m_expression->deleteLater(); + m_expression=nullptr; + + if(!res || !(res->type()==Cantor::TextResult::Type)) + { + qDebug()<<"something went wrong fetching tab completion"; + fetchingDone(); + return; + } + + //the result looks like "['comp1', 'comp2']" parse it + + //for sage version 5.7 this looks like + //('s1', ['comp1','comp2']) where s1 is the string we called complete with + + QString txt=res->toHtml().trimmed(); + txt.remove(QLatin1String("
    ")); + txt=txt.mid(txt.indexOf(command())+command().length()+2).trimmed(); + txt=txt.mid(1); //remove [ + txt.chop(2); //remove ] + + qDebug()<<"completion string: "<keywords(); + setCompletions(completions); + + emit fetchingDone(); +} + +void SageCompletionObject::extractCompletionsLegacy() +{ + Cantor::Result* res=m_expression->result(); + m_expression->deleteLater(); + m_expression=nullptr; + + if(!res || !(res->type()==Cantor::TextResult::Type)) + { + qDebug()<<"something went wrong fetching tab completion"; + fetchingDone(); + return; + } + + //the result looks like "['comp1', 'comp2']" parse it + QString txt=res->toHtml().trimmed(); + txt=txt.mid(1); //remove [ + txt.chop(1); //remove ] + + QStringList tmp=txt.split(QLatin1Char(',')); + QStringList completions; + + foreach(QString c, tmp) // krazy:exclude=foreach + { + c=c.trimmed(); + c.chop(1); + completions<keywords(); + setCompletions(completions); + + emit fetchingDone(); +} + + +void SageCompletionObject::fetchIdentifierType() +{ + if (SageKeywords::instance()->keywords().contains(identifier())) + { + emit fetchingTypeDone(KeywordType); + return; + } + + if (session()->status() == Cantor::Session::Disable) + { + if (SageKeywords::instance()->functions().contains(identifier())) + emit fetchingTypeDone(FunctionType); + else if (SageKeywords::instance()->variables().contains(identifier())) + emit fetchingTypeDone(VariableType); + else + emit fetchingTypeDone(UnknownType); + } + else + { + if (m_expression) + return; + + QString expr = QString::fromLatin1("__cantor_internal__ = _; type(%1); _ = __cantor_internal__").arg(identifier()); + m_expression = session()->evaluateExpression(expr, Cantor::Expression::FinishingBehavior::DoNotDelete, true); + connect(m_expression, &Cantor::Expression::statusChanged, this, &SageCompletionObject::extractIdentifierType); + } +} + +void SageCompletionObject::extractIdentifierType(Cantor::Expression::Status status) +{ + if (!m_expression) + return; + + switch(status) + { + case Cantor::Expression::Error: + qDebug() << "Error with SageCompletionObject" << m_expression->errorMessage(); + emit fetchingTypeDone(UnknownType); + break; + + case Cantor::Expression::Interrupted: + qDebug() << "SageCompletionObject was interrupted"; + emit fetchingTypeDone(UnknownType); + break; + + case Cantor::Expression::Done: + { + Cantor::Result* result = m_expression->result(); + if (result) + { + QString res = result->toHtml(); + if (res.contains(QLatin1String("function")) || res.contains(QLatin1String("method"))) + emit fetchingTypeDone(FunctionType); + else + emit fetchingTypeDone(VariableType); + } + else + emit fetchingTypeDone(UnknownType); + break; + } + + default: + return; + } + + m_expression->deleteLater(); + m_expression = nullptr; + return; +} + +bool SageCompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_') || c == QLatin1Char('.'); +} + +bool SageCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_'); +} diff --git a/src/backends/sage/sagecompletionobject.h b/src/backends/sage/sagecompletionobject.h new file mode 100644 index 0000000..9e7adc5 --- /dev/null +++ b/src/backends/sage/sagecompletionobject.h @@ -0,0 +1,55 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SAGECOMPLETIONOBJECT_H +#define _SAGECOMPLETIONOBJECT_H + +#include "completionobject.h" +#include "expression.h" + +class SageSession; + +class SageCompletionObject : public Cantor::CompletionObject +{ + Q_OBJECT + public: + SageCompletionObject( const QString& command, int index, SageSession* session); + ~SageCompletionObject() override; + + protected: + bool mayIdentifierContain(QChar c) const override; + bool mayIdentifierBeginWith(QChar c) const override; + + + protected Q_SLOTS: + void fetchCompletions() override; + void extractCompletions(); + void fetchIdentifierType() override; + void extractIdentifierType(Cantor::Expression::Status status); + + private: + void extractCompletionsNew(); + void extractCompletionsLegacy(); + + private: + Cantor::Expression* m_expression; +}; + +#endif /* _SAGECOMPLETIONOBJECT_H */ diff --git a/src/backends/sage/sageexpression.cpp b/src/backends/sage/sageexpression.cpp new file mode 100644 index 0000000..b3b49cd --- /dev/null +++ b/src/backends/sage/sageexpression.cpp @@ -0,0 +1,265 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "sageexpression.h" + +#include "sagesession.h" +#include "textresult.h" +#include "imageresult.h" +#include "animationresult.h" +#include "helpresult.h" + +#include +#include +#include +#include + +SageExpression::SageExpression( Cantor::Session* session, bool internal ) : Cantor::Expression(session, internal), + m_isHelpRequest(false), + m_promptCount(0), + m_syntaxError(false) +{ +} + +void SageExpression::evaluate() +{ + m_imagePath.clear(); + + m_isHelpRequest=false; + + //check if this is a ?command or help command + if( command().startsWith(QLatin1Char('?')) + || command().endsWith(QLatin1Char('?')) + || command().contains(QLatin1String("help(")) + ) + m_isHelpRequest=true; + + //coun't how many newlines are in the command, + //as sage will output one "sage: " or "....:" for + //each. + m_promptCount=command().count(QLatin1Char('\n'))+2; + + session()->enqueueExpression(this); +} + +void SageExpression::interrupt() +{ + qDebug()<<"interrupting"; + + setStatus(Cantor::Expression::Interrupted); +} + +void SageExpression::parseOutput(const QString& text) +{ + if (m_syntaxError) + { + setErrorMessage(i18n("Syntax Error")); + setStatus(Cantor::Expression::Error); + return; + } + + QString output=text; + //remove carriage returns, we only use \n internally + output.remove(QLatin1Char('\r')); + //replace appearing backspaces, as they mess the whole output up + output.remove(QRegExp(QLatin1String(".\b"))); + //replace Escape sequences (only tested with `ls` command) + const QChar ESC(0x1b); + output.remove(QRegExp(QString(ESC)+QLatin1String("\\][^\a]*\a"))); + + const QString promptRegexpBase(QLatin1String("(^|\\n)%1")); + const QRegExp promptRegexp(promptRegexpBase.arg(QRegExp::escape(QLatin1String(SageSession::SagePrompt)))); + const QRegExp altPromptRegexp(promptRegexpBase.arg(QRegExp::escape(QLatin1String(SageSession::SageAlternativePrompt)))); + + bool endsWithAlternativePrompt=output.endsWith(QLatin1String(SageSession::SageAlternativePrompt)); + + //remove all prompts. we do this in a loop, because after we removed the first prompt, + //there could be a second one, that isn't matched by promptRegexp in the first run, because + //it originally isn't at the beginning of a line. + int index=-1, index2=-1; + while ( (index=output.indexOf(promptRegexp)) != -1 || (index2=output.indexOf(altPromptRegexp)) != -1 ) + { + qDebug()<<"got prompt"<(session())->sendInputToProcess(QLatin1String(")\n")); + m_syntaxError = true; + } + else + { + m_outputCache=m_outputCache.trimmed(); + evalFinished(); + } + } + +} + +void SageExpression::parseError(const QString& text) +{ + qDebug()<<"error"; + setErrorMessage(text); + setStatus(Cantor::Expression::Error); +} + +void SageExpression::addFileResult( const QString& path ) +{ + QUrl url = QUrl::fromLocalFile(path); + QMimeDatabase db; + QMimeType type = db.mimeTypeForUrl(url); + + if(m_imagePath.isEmpty()||type.name().contains(QLatin1String("image"))||path.endsWith(QLatin1String(".png"))||path.endsWith(QLatin1String(".gif"))) + { + m_imagePath=path; + } +} + +void SageExpression::evalFinished() +{ + qDebug()<<"evaluation finished"; + qDebug()<")); + const bool isLatex=m_outputCache.contains(QLatin1String("\\newcommand{\\Bold}")); //Check if it's latex stuff + if(isLatex) //It's latex stuff so encapsulate it into an eqnarray environment + { + stripped.prepend(QLatin1String("\\begin{eqnarray*}")); + stripped.append(QLatin1String("\\end{eqnarray*}")); + } + + //strip html tags + if(isHtml) + { + stripped.remove( QRegExp( QLatin1String("<[a-zA-Z\\/][^>]*>") ) ); + } + + if (stripped.endsWith(QLatin1Char('\n'))) + stripped.chop(1); + + if (m_isHelpRequest) + { + stripped = stripped.toHtmlEscaped(); + stripped.replace(QLatin1Char(' '), QLatin1String(" ")); + stripped.replace(QLatin1Char('\n'), QLatin1String("
    \n")); + + //make things quoted in `` `` bold + stripped.replace(QRegExp(QLatin1String("``([^`]*)``")), QLatin1String("\\1")); + + addResult(new Cantor::HelpResult(stripped, true)); + } + else + { + Cantor::TextResult* result=new Cantor::TextResult(stripped); + if(isLatex) + result->setFormat(Cantor::TextResult::LatexFormat); + addResult(result); + } + } + + if (hasImage) + { + QMimeDatabase db; + QMimeType type = db.mimeTypeForUrl(QUrl::fromLocalFile(m_imagePath)); + if(type.inherits(QLatin1String("image/gif"))) + addResult( new Cantor::AnimationResult(QUrl::fromLocalFile(m_imagePath ),i18n("Result of %1" , command() ) ) ); + else + addResult( new Cantor::ImageResult( QUrl::fromLocalFile(m_imagePath ),i18n("Result of %1" , command() ) ) ); + } + setStatus(Cantor::Expression::Done); +} + +void SageExpression::onProcessError(const QString& msg) +{ + QString errMsg=i18n("%1\nThe last output was: \n %2", msg, m_outputCache.trimmed()); + setErrorMessage(errMsg); + setStatus(Cantor::Expression::Error); +} + +QString SageExpression::additionalLatexHeaders() +{ + //The LaTeX sage needs the amsmath package and some specific macros. + //So include them in the header. + //More about the macros requirement in bug #312738 + return QLatin1String("\\usepackage{amsmath}\n" \ + "\\newcommand{\\ZZ}{\\Bold{Z}}\n" \ + "\\newcommand{\\NN}{\\Bold{N}}\n" \ + "\\newcommand{\\RR}{\\Bold{R}}\n" \ + "\\newcommand{\\CC}{\\Bold{C}}\n" \ + "\\newcommand{\\QQ}{\\Bold{Q}}\n" \ + "\\newcommand{\\QQbar}{\\overline{\\QQ}}\n" \ + "\\newcommand{\\GF}[1]{\\Bold{F}_{#1}}\n" \ + "\\newcommand{\\Zp}[1]{\\ZZ_{#1}}\n" \ + "\\newcommand{\\Qp}[1]{\\QQ_{#1}}\n" \ + "\\newcommand{\\Zmod}[1]{\\ZZ/#1\\ZZ}\n" \ + "\\newcommand{\\CDF}{\\Bold{C}}\n" \ + "\\newcommand{\\CIF}{\\Bold{C}}\n" \ + "\\newcommand{\\CLF}{\\Bold{C}}\n" \ + "\\newcommand{\\RDF}{\\Bold{R}}\n" \ + "\\newcommand{\\RIF}{\\Bold{I} \\Bold{R}}\n"\ + "\\newcommand{\\RLF}{\\Bold{R}}\n" \ + "\\newcommand{\\CFF}{\\Bold{CFF}}\n"); +} + diff --git a/src/backends/sage/sageexpression.h b/src/backends/sage/sageexpression.h new file mode 100644 index 0000000..a6169c5 --- /dev/null +++ b/src/backends/sage/sageexpression.h @@ -0,0 +1,56 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SAGEEXPRESSION_H +#define _SAGEEXPRESSION_H + +#include "expression.h" + +class SageExpression : public Cantor::Expression +{ + Q_OBJECT + public: + explicit SageExpression(Cantor::Session*, bool internal = false); + + void evaluate() override; + void interrupt() override; + + void parseOutput(const QString&); + void parseError(const QString&); + + void addFileResult(const QString&); + + void onProcessError(const QString&); + + public Q_SLOTS: + void evalFinished(); + + protected: + QString additionalLatexHeaders() override; + + private: + QString m_outputCache; + QString m_imagePath; + bool m_isHelpRequest; + int m_promptCount; + bool m_syntaxError; +}; + +#endif /* _SAGEEXPRESSION_H */ diff --git a/src/backends/sage/sageextensions.cpp b/src/backends/sage/sageextensions.cpp new file mode 100644 index 0000000..ed8caa0 --- /dev/null +++ b/src/backends/sage/sageextensions.cpp @@ -0,0 +1,201 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "sageextensions.h" +#include +#include + +#define SAGE_EXTENSION_CONSTRUCTORS(name) Sage##name##Extension::Sage##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Sage##name##Extension::~Sage##name##Extension() {} + + +//History Extension +SAGE_EXTENSION_CONSTRUCTORS(History) + +QString SageHistoryExtension::lastResult() +{ + return QLatin1String("_"); +} + +//Script Extension +SAGE_EXTENSION_CONSTRUCTORS(Script) + +QString SageScriptExtension::runExternalScript(const QString& path) +{ + return QString::fromLatin1("execfile(\"%1\")").arg(path); +} + +QString SageScriptExtension::scriptFileFilter() +{ + return i18n("Python script file (*.py);;Sage script file (*.sage)"); +} + +QString SageScriptExtension::highlightingMode() +{ + return QLatin1String("python"); +} + +//CAS extension +SAGE_EXTENSION_CONSTRUCTORS(CAS) + +QString SageCASExtension::solve(const QStringList& equations, const QStringList& variables) +{ + QString eqstr=QString::fromLatin1("[%1]").arg(equations.join(QLatin1String(","))); + eqstr.replace(QLatin1Char('='), QLatin1String("==")); //Sage uses == for equations and = for assignments + QString variablestr=variables.join(QLatin1String(",")); + + return QString::fromLatin1("solve(%1,%2)").arg(eqstr, variablestr); +} + +QString SageCASExtension::simplify(const QString& expression) +{ + return QString::fromLatin1("simplify(%1)").arg(expression); +} + +QString SageCASExtension::expand(const QString& expression) +{ + return QString::fromLatin1("expand(%1)").arg(expression); +} + +//Calculus Extension +SAGE_EXTENSION_CONSTRUCTORS(Calculus) + +QString SageCalculusExtension::limit(const QString& expression, const QString& variable, const QString& limit) +{ + return QString::fromLatin1("limit(%1,%2=%3)").arg(expression, variable, limit); +} + +QString SageCalculusExtension::differentiate(const QString& function,const QString& variable, int times) +{ + return QString::fromLatin1("diff(%1,%2,%3)").arg(function, variable, QString::number(times)); +} + +QString SageCalculusExtension::integrate(const QString& function, const QString& variable) +{ + return QString::fromLatin1("integral(%1,%2)").arg(function, variable); +} + +QString SageCalculusExtension::integrate(const QString& function,const QString& variable, const QString& left, const QString& right) +{ + return QString::fromLatin1("integral(%1,%2,%3,%4)").arg(function, variable, left, right); +} + +//Linear Algebra +SAGE_EXTENSION_CONSTRUCTORS(LinearAlgebra) + +QString SageLinearAlgebraExtension::createVector(const QStringList& entries, VectorType type) +{ + QString cmd=QLatin1String("vector("); + foreach(const QString& e, entries) + cmd+=e+QLatin1Char(','); + cmd.chop(1); + cmd+=QLatin1Char(')'); + + if(type==Cantor::LinearAlgebraExtension::ColumnVector) + cmd+=QLatin1String(".transpose()"); + + return cmd; +} + +QString SageLinearAlgebraExtension::nullVector(int size, VectorType type) +{ + QString cmd=QString::fromLatin1("vector(seq(0 for i in range(0,%1)))").arg(size); + if(type==Cantor::LinearAlgebraExtension::ColumnVector) + cmd+=QLatin1String(".transpose()"); + + return cmd; +} + +QString SageLinearAlgebraExtension::createMatrix(const Matrix& matrix) +{ + QString cmd=QLatin1String("matrix(["); + foreach(const QStringList& row, matrix) + { + cmd+=QLatin1Char('['); + foreach(const QString& entry, row) + cmd+=entry+QLatin1Char(','); + cmd.chop(1); + cmd+=QLatin1String("],"); + } + cmd.chop(1); + cmd+=QLatin1String("])"); + + return cmd; +} + +QString SageLinearAlgebraExtension::identityMatrix(int size) +{ + return QString::fromLatin1("identity_matrix(%1)").arg(size); +} + +QString SageLinearAlgebraExtension::nullMatrix(int rows,int columns) +{ + return QString::fromLatin1("null_matrix(%1,%2)").arg(rows, columns); +} + +QString SageLinearAlgebraExtension::rank(const QString& matrix) +{ + return QString::fromLatin1("%1.rank()").arg(matrix); +} + +QString SageLinearAlgebraExtension::invertMatrix(const QString& matrix) +{ + return QString::fromLatin1("%1.inverse()").arg(matrix); +} + +QString SageLinearAlgebraExtension::charPoly(const QString& matrix) +{ + return QString::fromLatin1("%1.char_poly()").arg(matrix); +} + +QString SageLinearAlgebraExtension::eigenVectors(const QString& matrix) +{ + return QString::fromLatin1("%1.eigenvectors_right()").arg(matrix); +} + +QString SageLinearAlgebraExtension::eigenValues(const QString& matrix) +{ + return QString::fromLatin1("%1.eigenvalues()").arg(matrix); +} + +//Plotting +SAGE_EXTENSION_CONSTRUCTORS(Plot) + +QString SagePlotExtension::plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) +{ + return QString::fromLatin1("plot(%1,%2,%3,%4)").arg(function, variable, left, right); +} + +QString SagePlotExtension::plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) +{ + const Interval& int1=var1.second; + const Interval& int2=var2.second; + return QString::fromLatin1("plot3d(%1,(%2,%3,%4),(%6,%7,%8))").arg(function, + var1.first, int1.first, int1.second, + var2.first, int2.first, int2.second); +} + +//Packaging +SAGE_EXTENSION_CONSTRUCTORS(Packaging) + +QString SagePackagingExtension::importPackage(const QString& module) +{ + return QString::fromLatin1("import %1").arg(module); +} diff --git a/src/backends/sage/sageextensions.h b/src/backends/sage/sageextensions.h new file mode 100644 index 0000000..8f8482f --- /dev/null +++ b/src/backends/sage/sageextensions.h @@ -0,0 +1,114 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SAGEEXTENSIONS_H +#define _SAGEEXTENSIONS_H + +#include "extension.h" + +class SageHistoryExtension : public Cantor::HistoryExtension +{ + public: + explicit SageHistoryExtension( QObject* parent ); + ~SageHistoryExtension() override; + public Q_SLOTS: + QString lastResult() override; +}; + +class SageScriptExtension : public Cantor::ScriptExtension +{ + public: + explicit SageScriptExtension(QObject* parent); + ~SageScriptExtension() override; + public Q_SLOTS: + QString runExternalScript(const QString& path) override; + QString scriptFileFilter() override; + QString highlightingMode() override; +}; + +class SageCASExtension : public Cantor::CASExtension +{ + public: + explicit SageCASExtension( QObject* parent); + ~SageCASExtension() override; + + public Q_SLOTS: + QString solve(const QStringList& equations, const QStringList& variables) override; + QString simplify(const QString& expression) override; + QString expand(const QString& expression) override; + +}; + +class SageCalculusExtension : public Cantor::CalculusExtension +{ + public: + explicit SageCalculusExtension( QObject* parent); + ~SageCalculusExtension() override; + + public Q_SLOTS: + QString limit(const QString& expression, const QString& variable, const QString& limit) override; + QString differentiate(const QString& function,const QString& variable, int times) override; + QString integrate(const QString& function, const QString& variable) override; + QString integrate(const QString& function,const QString& variable, const QString& left, const QString& right) override; +}; + +class SageLinearAlgebraExtension : public Cantor::LinearAlgebraExtension +{ + public: + explicit SageLinearAlgebraExtension( QObject* parent); + ~SageLinearAlgebraExtension() override; + + public Q_SLOTS: + //Commands to create Vectors/Matrices + QString createVector(const QStringList& entries, Cantor::LinearAlgebraExtension::VectorType type) override; + QString nullVector(int size, Cantor::LinearAlgebraExtension::VectorType type) override; + QString createMatrix(const Matrix& matrix) override; + QString identityMatrix(int size) override; + QString nullMatrix(int rows,int columns) override; + + //basic functions + QString rank(const QString& matrix) override; + QString invertMatrix(const QString& matrix) override; + QString charPoly(const QString& matrix) override; + QString eigenVectors(const QString& matrix) override; + QString eigenValues(const QString& matrix) override; +}; + +class SagePlotExtension : public Cantor::PlotExtension +{ + public: + explicit SagePlotExtension(QObject* parent); + ~SagePlotExtension() override; + public Q_SLOTS: + QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) override; + QString plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) override; +}; + +class SagePackagingExtension : public Cantor::PackagingExtension +{ + public: + explicit SagePackagingExtension(QObject* parent); + ~SagePackagingExtension() override; + + public Q_SLOTS: + QString importPackage(const QString& module) override; +}; + +#endif /* _SAGEEXTENSIONS_H */ diff --git a/src/backends/sage/sagehighlighter.cpp b/src/backends/sage/sagehighlighter.cpp new file mode 100644 index 0000000..a0525b3 --- /dev/null +++ b/src/backends/sage/sagehighlighter.cpp @@ -0,0 +1,33 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "sagehighlighter.h" +#include "sagekeywords.h" + +SageHighlighter::SageHighlighter(QObject* parent) : Cantor::DefaultHighlighter(parent) +{ + addRule(QRegExp(QLatin1String("[A-Za-z0-9_]+(?=\\()")), functionFormat()); + + addKeywords(SageKeywords::instance()->keywords()); + addFunctions(SageKeywords::instance()->functions()); + addVariables(SageKeywords::instance()->variables()); + + addRule(QRegExp(QLatin1String("#[^\n]*")), commentFormat()); +} diff --git a/src/backends/sage/sagehighlighter.h b/src/backends/sage/sagehighlighter.h new file mode 100644 index 0000000..0bf8eff --- /dev/null +++ b/src/backends/sage/sagehighlighter.h @@ -0,0 +1,40 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SAGEHIGHLIGHTER_H +#define _SAGEHIGHLIGHTER_H + +#include "defaulthighlighter.h" + + +/* + this is basically a syntax highlighter for the + Python programming Language, as Sage is based on + it +*/ + +class SageHighlighter : public Cantor::DefaultHighlighter +{ + public: + explicit SageHighlighter( QObject* parent); + ~SageHighlighter() override = default; +}; + +#endif /* _SAGEHIGHLIGHTER_H */ diff --git a/src/backends/sage/sagekeywords.cpp b/src/backends/sage/sagekeywords.cpp new file mode 100644 index 0000000..685c3e4 --- /dev/null +++ b/src/backends/sage/sagekeywords.cpp @@ -0,0 +1,68 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ +#include "sagekeywords.h" + +#include +#include + +#include + +SageKeywords* SageKeywords::instance() +{ + static SageKeywords* inst=nullptr; + if(inst==nullptr) + { + inst = new SageKeywords(); + inst->loadKeywords(); + } + + return inst; +} + +void SageKeywords::loadKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("Python")); + + m_keywords << definition.keywordList(QLatin1String("import")); + m_keywords << definition.keywordList(QLatin1String("defs")); + m_keywords << definition.keywordList(QLatin1String("operators")); + m_keywords << definition.keywordList(QLatin1String("flow")); + + m_functions << definition.keywordList(QLatin1String("builtinfuncs")); + m_functions << definition.keywordList(QLatin1String("overloaders")); + + m_variables << definition.keywordList(QLatin1String("specialvars")); +} + +const QStringList& SageKeywords::keywords() const +{ + return m_keywords; +} + +const QStringList& SageKeywords::functions() const +{ + return m_functions; +} + +const QStringList& SageKeywords::variables() const +{ + return m_variables; +} diff --git a/src/backends/sage/sagekeywords.h b/src/backends/sage/sagekeywords.h new file mode 100644 index 0000000..229114c --- /dev/null +++ b/src/backends/sage/sagekeywords.h @@ -0,0 +1,54 @@ +/* + Copyright 2012 Martin Kuettler + + 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) version 3 or any later version + accepted by the membership of KDE e.V. (or its successor approved + by the membership of KDE e.V.), which shall act as a proxy + defined in Section 14 of version 3 of the license. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + */ + +#ifndef _SAGEKEYWORDS_H +#define _SAGEKEYWORDS_H + +#include + +/** + Class to store all Sage keywords (i.e. Python keywords) + It is similar to MaximaKeywords or ScilabKeywords, but for Sage we only + need to store actual keywords, as variables and functions can be fetched from + the backend. + */ + +class SageKeywords +{ +private: + SageKeywords() = default; + ~SageKeywords() = default; + +public: + static SageKeywords* instance(); + + const QStringList& keywords() const; + const QStringList& functions() const; + const QStringList& variables() const; + + private: + void loadKeywords(); + + QStringList m_keywords; + QStringList m_functions; + QStringList m_variables; +}; + +#endif /* _SAGEKEYWORDS_H */ diff --git a/src/backends/sage/sagesession.cpp b/src/backends/sage/sagesession.cpp new file mode 100644 index 0000000..f83550f --- /dev/null +++ b/src/backends/sage/sagesession.cpp @@ -0,0 +1,500 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "sagesession.h" +#include "sageexpression.h" +#include "sagecompletionobject.h" +#include "sagehighlighter.h" + +#include +#include +#include +#include +#include +#include +#include "settings.h" + +#ifndef Q_OS_WIN +#include +#endif + +const QByteArray SageSession::SagePrompt="sage: "; //Text, sage outputs after each command +const QByteArray SageSession::SageAlternativePrompt="....: "; //Text, sage outputs when it expects further input + +//some commands that are run after login +static QByteArray initCmd="os.environ['PAGER'] = 'cat' \n "\ + "sage.misc.pager.EMBEDDED_MODE = True \n "\ + "sage.misc.viewer.BROWSER='' \n "\ + "sage.misc.viewer.viewer.png_viewer('false') \n" \ + "sage.plot.plot3d.base.SHOW_DEFAULTS['viewer'] = 'tachyon' \n"\ + "sage.misc.latex.EMBEDDED_MODE = True \n "\ + "os.environ['PAGER'] = 'cat' \n "\ + "%colors nocolor \n "\ + "print '____TMP_DIR____', sage.misc.misc.SAGE_TMP\n"; + +static QByteArray newInitCmd= + "__CANTOR_IPYTHON_SHELL__=get_ipython() \n "\ + "__CANTOR_IPYTHON_SHELL__.autoindent=False\n "; + +static QByteArray legacyInitCmd= + "__CANTOR_IPYTHON_SHELL__=__IPYTHON__ \n " \ + "__CANTOR_IPYTHON_SHELL__.autoindent=False\n "; + +static QByteArray endOfInitMarker="print '____END_OF_INIT____'\n "; + + + +SageSession::VersionInfo::VersionInfo(int major, int minor) +{ + m_major=major; + m_minor=minor; +} + +int SageSession::VersionInfo::majorVersion() const +{ + return m_major; +} + +int SageSession::VersionInfo::minorVersion() const +{ + return m_minor; +} + +bool SageSession::VersionInfo::operator==(VersionInfo other) const +{ + return m_major==other.m_major&&m_minor==other.m_minor; +} + +bool SageSession::VersionInfo::operator<(VersionInfo other) const +{ + return (m_major!= -1 && other.m_major==-1) || + ( ((m_major!=-1 && other.m_major!=-1) || (m_major==other.m_major && m_major==-1) ) && ( m_major(SageSession::VersionInfo other) const +{ + return !( (*this <= other )); +} + +bool SageSession::VersionInfo::operator>=(SageSession::VersionInfo other) const +{ + return !( *this < other); +} + +SageSession::SageSession(Cantor::Backend* backend) : Session(backend), +m_process(nullptr), +m_isInitialized(false), +m_waitingForPrompt(false), +m_haveSentInitCmd(false) +{ + connect( &m_dirWatch, SIGNAL(created(QString)), this, SLOT(fileCreated(QString)) ); +} + +void SageSession::login() +{ + qDebug()<<"login"; + emit loginStarted(); + + m_process=new KPtyProcess(this); + updateSageVersion(); + const QString& sageExecFile = SageSettings::self()->path().toLocalFile(); + if (false) +// Reenable when https://trac.sagemath.org/ticket/25363 is merged +// if (m_sageVersion >= SageSession::VersionInfo(8, 4)) + m_process->setProgram(sageExecFile, QStringList() << QLatin1String("--simple-prompt")); + else + { + const QString& sageStartScript = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("cantor/sagebackend/cantor-execsage")); + m_process->setProgram(sageStartScript, QStringList(sageExecFile)); + } + + m_process->setOutputChannelMode(KProcess::SeparateChannels); + m_process->setPtyChannels(KPtyProcess::AllChannels); + m_process->pty()->setEcho(false); + + connect(m_process->pty(), SIGNAL(readyRead()), this, SLOT(readStdOut())); + connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readStdErr())); + connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus))); + connect(m_process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(reportProcessError(QProcess::ProcessError))); + m_process->start(); + m_process->waitForStarted(); + + m_process->pty()->write(initCmd); + + if(!SageSettings::self()->autorunScripts().isEmpty()){ + QString autorunScripts = SageSettings::self()->autorunScripts().join(QLatin1String("\n")); + evaluateExpression(autorunScripts, SageExpression::DeleteOnFinish, true); + } + + changeStatus(Session::Done); + emit loginDone(); +} + +void SageSession::logout() +{ + qDebug()<<"logout"; + + disconnect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int,QProcess::ExitStatus))); + m_process->pty()->write("exit\n"); + + m_process->kill(); + //Run sage-cleaner to kill all the orphans + KProcess::startDetached(SageSettings::self()->path().toLocalFile(),QStringList()<setFinishingBehavior(behave); + expr->setCommand(cmd); + expr->evaluate(); + + return expr; +} + +void SageSession::readStdOut() +{ + m_outputCache.append(QString::fromUtf8(m_process->pty()->readAll())); + qDebug()<<"out: "<= SageSession::VersionInfo(7,4)) + { + const QString message = i18n( + "Sage version %1.%2 is unsupported. Please update your installation "\ + "to the supported versions to make it work with Cantor.", m_sageVersion.majorVersion(), m_sageVersion.minorVersion()); + KMessageBox::error(nullptr, message, i18n("Cantor")); + interrupt(); + logout(); + } + else if(m_sageVersion<=SageSession::VersionInfo(5, 7)) + { + qDebug()<<"using an old version of sage: "<pty()->write(legacyInitCmd); + defineCustomFunctions(); + m_process->pty()->write(endOfInitMarker); + m_haveSentInitCmd=true; + } + + } + else + { + qDebug()<<"using the current set of commands"; + + if(!m_haveSentInitCmd) + { + m_process->pty()->write(newInitCmd); + defineCustomFunctions(); + m_process->pty()->write(endOfInitMarker); + m_haveSentInitCmd=true; + } + } + } + } + + + int indexOfEOI=m_outputCache.indexOf(QLatin1String("____END_OF_INIT____")); + if(indexOfEOI!=-1&&m_outputCache.indexOf(QLatin1String(SagePrompt), indexOfEOI)!=-1) + { + qDebug()<<"initialized"; + //out.remove("____END_OF_INIT____"); + //out.remove(SagePrompt); + m_isInitialized=true; + m_waitingForPrompt=false; + runFirstExpression(); + changeStatus(Cantor::Session::Done); + m_outputCache.clear(); + } + + //If we are waiting for another prompt, drop every output + //until a prompt is found + if(m_isInitialized&&m_waitingForPrompt) + { + qDebug()<<"waiting for prompt"; + if(m_outputCache.contains(QLatin1String(SagePrompt))) + m_waitingForPrompt=false; + + m_outputCache.clear(); + return; + } + + if(m_isInitialized) + { + if (!expressionQueue().isEmpty()) + { + SageExpression* expr = static_cast(expressionQueue().first()); + expr->parseOutput(m_outputCache); + } + m_outputCache.clear(); + } +} + +void SageSession::readStdErr() +{ + qDebug()<<"reading stdErr"; + QString out=QLatin1String(m_process->readAllStandardError()); + qDebug()<<"err: "<(expressionQueue().first()); + expr->parseError(out); + } +} + +void SageSession::currentExpressionChangedStatus(Cantor::Expression::Status status) +{ + switch (status) + { + case Cantor::Expression::Done: + case Cantor::Expression::Error: + expressionQueue().removeFirst(); + if (expressionQueue().isEmpty()) + changeStatus(Done); + else + runFirstExpression(); + break; + default: + break; + } +} + +void SageSession::processFinished(int exitCode, QProcess::ExitStatus exitStatus) +{ + Q_UNUSED(exitCode); + if(exitStatus==QProcess::CrashExit) + { + if(!expressionQueue().isEmpty()) + { + static_cast(expressionQueue().last()) + ->onProcessError(i18n("The Sage process crashed while evaluating this expression")); + }else + { + //We don't have an actual command. it crashed for some other reason, just show a plain error message box + KMessageBox::error(nullptr, i18n("The Sage process crashed"), i18n("Cantor")); + } + }else + { + if(!expressionQueue().isEmpty()) + { + static_cast(expressionQueue().last()) + ->onProcessError(i18n("The Sage process exited while evaluating this expression")); + }else + { + //We don't have an actual command. it crashed for some other reason, just show a plain error message box + KMessageBox::error(nullptr, i18n("The Sage process exited"), i18n("Cantor")); + } + } +} + +void SageSession::reportProcessError(QProcess::ProcessError e) +{ + if(e==QProcess::FailedToStart) + { + changeStatus(Cantor::Session::Done); + emit error(i18n("Failed to start Sage")); + } +} + +void SageSession::runFirstExpression() +{ + if(!expressionQueue().isEmpty()) + { + SageExpression* expr = static_cast(expressionQueue().first()); + if (m_isInitialized) + { + connect(expr, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(currentExpressionChangedStatus(Cantor::Expression::Status))); + + QString command=expr->command(); + if(command.endsWith(QLatin1Char('?')) && !command.endsWith(QLatin1String("??"))) + command=QLatin1String("help(")+command.left(command.size()-1)+QLatin1Char(')'); + if(command.startsWith(QLatin1Char('?'))) + command=QLatin1String("help(")+command.mid(1)+QLatin1Char(')'); + command.append(QLatin1String("\n\n")); + + qDebug()<<"writing "<setStatus(Cantor::Expression::Computing); + m_process->pty()->write(command.toUtf8()); + } + else if (expressionQueue().size() == 1) + // If queue contains one expression, it means, what we run this expression immediately (drop setting queued status) + // But we can't run expression before initializing, so mark expression, as queue + expr->setStatus(Cantor::Expression::Queued); + } +} + +void SageSession::interrupt() +{ + if(!expressionQueue().isEmpty()) + { + qDebug()<<"interrupting " << expressionQueue().first()->command(); + if(m_process->state() != QProcess::NotRunning) + { +#ifndef Q_OS_WIN + const int pid=m_process->pid(); + kill(pid, SIGINT); +#else + ; //TODO: interrupt the process on windows +#endif + } + expressionQueue().first()->interrupt(); + expressionQueue().removeFirst(); + foreach (Cantor::Expression* expression, expressionQueue()) + expression->setStatus(Cantor::Expression::Done); + expressionQueue().clear(); + + qDebug()<<"done interrupting"; + } + + changeStatus(Cantor::Session::Done); + m_outputCache.clear(); +} + +void SageSession::sendInputToProcess(const QString& input) +{ + m_process->pty()->write(input.toUtf8()); +} + +void SageSession::fileCreated( const QString& path ) +{ + qDebug()<<"got a file "<(expressionQueue().first()); + if ( expr ) + expr->addFileResult( path ); + } +} + +void SageSession::setTypesettingEnabled(bool enable) +{ + Cantor::Session::setTypesettingEnabled(enable); + + // We have problems with Sage latex output (generates invalid code sometimes), so disable sage + // latex output until this not be solved. Users can enable sage latex by hands using %display + // sage magic. + + //tell the sage server to enable/disable pretty_print + //const QString cmd=QLatin1String("__cantor_enable_typesetting(%1)"); + //evaluateExpression(cmd.arg(enable ? QLatin1String("true"):QLatin1String("false")), Cantor::Expression::DeleteOnFinish); +} + +void SageSession::setWorksheetPath(const QString& path) +{ + //save the path to the worksheet as variable "__file__" + //this variable is usually set by the "os" package when running a script + //but when it is run in an interpreter (like sage server) it is not set + const QString cmd = QLatin1String("__file__ = '%1'"); + evaluateExpression(cmd.arg(path), Cantor::Expression::DeleteOnFinish, true); +} + +Cantor::CompletionObject* SageSession::completionFor(const QString& command, int index) +{ + return new SageCompletionObject(command, index, this); +} + +QSyntaxHighlighter* SageSession::syntaxHighlighter(QObject* parent) +{ + return new SageHighlighter(parent); +} + +SageSession::VersionInfo SageSession::sageVersion() +{ + return m_sageVersion; +} + +void SageSession::defineCustomFunctions() +{ + //typesetting + QString cmd=QLatin1String("def __cantor_enable_typesetting(enable):\n"); + if(m_sageVersion VersionInfo(5, 7) && m_sageVersion< VersionInfo(5, 12)) + { + cmd+=QLatin1String("\t sage.misc.latex.pretty_print_default(enable)\n\n"); + }else + { + cmd+=QLatin1String("\t if(enable==true):\n "\ + "\t \t %display typeset \n"\ + "\t else: \n" \ + "\t \t %display simple \n\n"); + } + + sendInputToProcess(cmd); +} + +bool SageSession::updateSageVersion() +{ + QProcess get_sage_version; + get_sage_version.setProgram(SageSettings::self()->path().toLocalFile()); + get_sage_version.setArguments(QStringList()< + */ + +#ifndef _SAGESESSION_H +#define _SAGESESSION_H + +#include "session.h" +#include "expression.h" + +#include +#include + +class SageExpression; +class KPtyProcess; + + +class SageSession : public Cantor::Session +{ + Q_OBJECT + public: + static const QByteArray SagePrompt; + static const QByteArray SageAlternativePrompt; + + //small helper class to deal with sage versions + //Note: major version -1 is treated as most current + class VersionInfo{ + public: + explicit VersionInfo(int major = -1, int minor = -1); + + //bool operator <=(VersionInfo v2); + bool operator <(VersionInfo other) const; + bool operator <=(VersionInfo other) const; + bool operator >(VersionInfo other) const; + bool operator >=(VersionInfo other) const; + bool operator ==( VersionInfo other) const; + + // These are not called major() and minor() because some libc's have + // macros with those names. + int majorVersion() const; + int minorVersion() const; + private: + int m_major; + int m_minor; + }; + + + explicit SageSession( Cantor::Backend* backend); + ~SageSession() override = default; + + void login() override; + void logout() override; + + Cantor::Expression* evaluateExpression(const QString& command,Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + + void runFirstExpression() override; + + void interrupt() override; + + void sendInputToProcess(const QString& input); + + void setTypesettingEnabled(bool enable) override; + void setWorksheetPath(const QString& path) override; + + Cantor::CompletionObject* completionFor(const QString& command, int index=-1) override; + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + + VersionInfo sageVersion(); + public Q_SLOTS: + void readStdOut(); + void readStdErr(); + + private Q_SLOTS: + void currentExpressionChangedStatus(Cantor::Expression::Status); + void processFinished(int exitCode, QProcess::ExitStatus); + void reportProcessError(QProcess::ProcessError); + void fileCreated(const QString& path); + + private: + void defineCustomFunctions(); + bool updateSageVersion(); + private: + KPtyProcess* m_process; + bool m_isInitialized; + QString m_tmpPath; + KDirWatch m_dirWatch; + bool m_waitingForPrompt; + QString m_outputCache; + VersionInfo m_sageVersion; + bool m_haveSentInitCmd; +}; + +#endif /* _SAGESESSION_H */ diff --git a/src/backends/sage/settings.kcfgc b/src/backends/sage/settings.kcfgc new file mode 100644 index 0000000..57d8220 --- /dev/null +++ b/src/backends/sage/settings.kcfgc @@ -0,0 +1,3 @@ +File=sagebackend.kcfg +ClassName=SageSettings +Singleton=true diff --git a/src/backends/sage/settings.ui b/src/backends/sage/settings.ui new file mode 100644 index 0000000..321a37a --- /dev/null +++ b/src/backends/sage/settings.ui @@ -0,0 +1,64 @@ + + + SageSettingsBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Path to Sage: + + + + + + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/backends/sage/testsage.cpp b/src/backends/sage/testsage.cpp new file mode 100644 index 0000000..0bec6ea --- /dev/null +++ b/src/backends/sage/testsage.cpp @@ -0,0 +1,124 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "testsage.h" + +#include "session.h" +#include "backend.h" +#include "expression.h" +#include "result.h" +#include "imageresult.h" +#include "textresult.h" + +#include + +QString TestSage::backendName() +{ + return QLatin1String("sage"); +} + +void TestSage::testSimpleCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + QCOMPARE( e->result()->toHtml(), QLatin1String(("4")) ); +} + +void TestSage::testCommandQueue() +{ + //only wait for the last Expression to return, so the queue gets + //actually filled + + Cantor::Expression* e1=session()->evaluateExpression(QLatin1String("0+1")); + Cantor::Expression* e2=session()->evaluateExpression(QLatin1String("1+1")); + Cantor::Expression* e3=evalExp(QLatin1String("1+2")); + + QVERIFY(e1!=nullptr); + QVERIFY(e2!=nullptr); + QVERIFY(e3!=nullptr); + + QVERIFY(e1->result()); + QVERIFY(e2->result()); + QVERIFY(e3->result()); + + QCOMPARE(cleanOutput(e1->result()->toHtml()), QLatin1String("1")); + QCOMPARE(cleanOutput(e2->result()->toHtml()), QLatin1String("2")); + QCOMPARE(cleanOutput(e3->result()->toHtml()), QLatin1String("3")); +} + +void TestSage::testMultilineCommand() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2 \n simplify(1 - x + x)") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result()!=nullptr ); + QCOMPARE( e->result()->toHtml(), QLatin1String("4
    \n1") ); +} + +void TestSage::testDefineFunction() +{ + const char* cmd="def func1(param) : \n" \ + " return param*param\n\n"; + + Cantor::Expression* e1=evalExp( QLatin1String(cmd) ); + + QVERIFY( e1!=nullptr ); + + Cantor::Expression* e2=evalExp( QLatin1String("func1(2)") ); + QVERIFY( e2!=nullptr ); + QVERIFY( e2->result()!=nullptr ); + QCOMPARE( e2->result()->toHtml(), QLatin1String("4") ); +} + +void TestSage::testPlot() +{ + Cantor::Expression* e=evalExp( QLatin1String("plot(sin(x))") ); + + QVERIFY( e!=nullptr ); + QCOMPARE( e->results().size(), 2); + QVERIFY( e->results()[0]->type() == Cantor::TextResult::Type); + QCOMPARE( e->results()[0]->data().toString(), QLatin1String("Launched png viewer for Graphics object consisting of 1 graphics primitive")); + + QVERIFY( e->results()[1]->type() == Cantor::ImageResult::Type); + QVERIFY( !e->results()[1]->data().isNull() ); +} + +void TestSage::testInvalidSyntax() +{ + Cantor::Expression* e=evalExp( QLatin1String("2+2*(") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->errorMessage()== QLatin1String("Syntax Error") ); +} + +void TestSage::testNoOutput() +{ + Cantor::Expression* e=evalExp( QLatin1String("f(x)=x^2+3*x+2\nf(0)") ); + + QVERIFY( e!=nullptr ); + QVERIFY( e->result() != nullptr ); + QCOMPARE( e->result()->toHtml(), QLatin1String("2") ); +} + + +QTEST_MAIN( TestSage ) + diff --git a/src/backends/sage/testsage.h b/src/backends/sage/testsage.h new file mode 100644 index 0000000..de6ad61 --- /dev/null +++ b/src/backends/sage/testsage.h @@ -0,0 +1,63 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _TESTSAGE_H +#define _TESTSAGE_H + +#include "backendtest.h" + +/** This class test some of the basic functions of the sage backend + The different tests represent some general expressions, as well + as expressions, that are known to have caused problems in earlier + versions +**/ +class TestSage : public BackendTest +{ + Q_OBJECT + +private Q_SLOTS: + //tests evaluating a simple command + void testSimpleCommand(); + + //tests if the backend gets confused if more than + //one command is in the queue + void testCommandQueue(); + //tests a command, containing more than 1 line + void testMultilineCommand(); + + //tests defining and calling a function + void testDefineFunction(); + + //tests doing a plot + void testPlot(); + + //tests a syntax error (not closing bracket) + void testInvalidSyntax(); + + //tests a two-line command, where one doesn't deliver output + //(source of problem in earlier versions) + void testNoOutput(); + +private: + QString backendName() override; + +}; + +#endif /* _TESTSAGE_H */ diff --git a/src/backends/scilab/CMakeLists.txt b/src/backends/scilab/CMakeLists.txt new file mode 100644 index 0000000..1fb03e1 --- /dev/null +++ b/src/backends/scilab/CMakeLists.txt @@ -0,0 +1,23 @@ +set( ScilabBackend_SRCS + scilabbackend.cpp + scilabsession.cpp + scilabexpression.cpp + scilabextensions.cpp + scilabkeywords.cpp + scilabhighlighter.cpp + scilabcompletionobject.cpp +) + +kconfig_add_kcfg_files(ScilabBackend_SRCS settings.kcfgc) +install(FILES scilabbackend.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +ki18n_wrap_ui(ScilabBackend_SRCS settings.ui) + +add_backend(scilabbackend ${ScilabBackend_SRCS}) + +target_link_libraries(cantor_scilabbackend + KF5::KIOCore + KF5::SyntaxHighlighting +) + +install(FILES cantor_scilab.knsrc DESTINATION ${KDE_INSTALL_CONFDIR}) diff --git a/src/backends/scilab/cantor_scilab.knsrc b/src/backends/scilab/cantor_scilab.knsrc new file mode 100644 index 0000000..8ef0564 --- /dev/null +++ b/src/backends/scilab/cantor_scilab.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Scilab) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/backends/scilab/scilabbackend.cpp b/src/backends/scilab/scilabbackend.cpp new file mode 100644 index 0000000..57ff012 --- /dev/null +++ b/src/backends/scilab/scilabbackend.cpp @@ -0,0 +1,106 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "scilabbackend.h" + +#include "scilabsession.h" +#include "scilabextensions.h" +#include "settings.h" +#include "ui_settings.h" + +#include +#include + +#include "cantor_macros.h" + +ScilabBackend::ScilabBackend(QObject* parent,const QList args) : Cantor::Backend(parent, args) +{ + qDebug()<<"Creating ScilabBackend"; + + new ScilabVariableManagementExtension(this); + new ScilabScriptExtension(this); + + setObjectName(QLatin1String("scilabbackend")); +} + +ScilabBackend::~ScilabBackend() +{ + qDebug()<<"Destroying ScilabBackend"; +} + +QString ScilabBackend::id() const +{ + return QLatin1String("scilab"); +} + +QString ScilabBackend::version() const +{ + return QLatin1String("5.5, 6.0"); +} + +Cantor::Session* ScilabBackend::createSession() +{ + qDebug()<<"Spawning a new Scilab session"; + + return new ScilabSession(this); +} + +Cantor::Backend::Capabilities ScilabBackend::capabilities() const +{ + qDebug()<<"Requesting capabilities of ScilabSession"; + + return Cantor::Backend::SyntaxHighlighting | + Cantor::Backend::Completion | + Cantor::Backend::VariableManagement; +} + +bool ScilabBackend::requirementsFullfilled() const +{ + QFileInfo info(ScilabSettings::self()->path().toLocalFile()); + return info.isExecutable(); +} + +QWidget* ScilabBackend::settingsWidget(QWidget* parent) const +{ + QWidget* widget=new QWidget(parent); + Ui::ScilabSettingsBase s; + s.setupUi(widget); + return widget; +} + +KConfigSkeleton* ScilabBackend::config() const +{ + return ScilabSettings::self(); +} + +QUrl ScilabBackend::helpUrl() const +{ + return QUrl(i18nc("the url to the documentation of Scilab, please check if there is a translated version and use the correct url", + "http://www.scilab.org/support/documentation")); +} + +QString ScilabBackend::description() const +{ + return i18n("

    Scilab is a free software, cross-platform numerical computational package and a high-level, numerically oriented programming language.

    " \ + "Scilab is distributed under CeCILL license (GPL compatible)"); +} + +K_PLUGIN_FACTORY_WITH_JSON(scilabbackend, "scilabbackend.json", registerPlugin();) +#include "scilabbackend.moc" diff --git a/src/backends/scilab/scilabbackend.h b/src/backends/scilab/scilabbackend.h new file mode 100644 index 0000000..e0b1e46 --- /dev/null +++ b/src/backends/scilab/scilabbackend.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#ifndef _SCILABBACKEND_H +#define _SCILABBACKEND_H + +#include "backend.h" + +class ScilabBackend : public Cantor::Backend +{ + Q_OBJECT + + public: + explicit ScilabBackend( QObject* parent = nullptr,const QList args = QList()); + ~ScilabBackend() override; + + QString id() const override; + QString version() const override; + Cantor::Session *createSession() override; + Cantor::Backend::Capabilities capabilities() const override; + bool requirementsFullfilled() const override; + + QWidget* settingsWidget(QWidget* parent) const override; + KConfigSkeleton* config() const override; + + QUrl helpUrl() const override; + QString description() const override; +}; + +#endif /* _SCILABBACKEND_H */ diff --git a/src/backends/scilab/scilabbackend.json b/src/backends/scilab/scilabbackend.json new file mode 100644 index 0000000..eedd5cc --- /dev/null +++ b/src/backends/scilab/scilabbackend.json @@ -0,0 +1,66 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "Backend for the Scilab Scientific Programming Environment", + "Description[ca@valencia]": "Dorsal per a l'entorn de programació científic Scilab", + "Description[ca]": "Dorsal per a l'entorn de programació científic Scilab", + "Description[cs]": "Podpůrná vrstva pro vědecké programovací prostředí Scilab", + "Description[de]": "Modul für die wissenschaftliche Programmierumgebung Scilab", + "Description[el]": "Σύστημα υποστήριξης για το περιβάλλον επιστημονικού προγραμματισμού Scilab", + "Description[en_GB]": "Backend for the Scilab Scientific Programming Environment", + "Description[es]": "Motor para el entorno de programación científico Scilab", + "Description[et]": "Scilabi teadusliku programmeerimise keskkonna taustaprogramm", + "Description[fi]": "Scilabin, tieteellisen ohjelmointiympäristön, taustajärjestelmä", + "Description[fr]": "Moteur pour l'environnement de programmation scientifique « Scilab »", + "Description[gl]": "Infraestrutura para o ambiente científico de programación Scilab", + "Description[it]": "Backend per l'ambiente scientifico di programmazione Scilab", + "Description[nl]": "Backend voor de Scilab wetenschappelijke programmeeromgeving", + "Description[nn]": "Motor for det Scilab «Scientific Programming Environment»", + "Description[pl]": "Silnika dla naukowego środowiska programistycznego Scilab", + "Description[pt]": "Infra-Estrutura do Ambiente de Programação Científica com o Scilab", + "Description[pt_BR]": "Infraestrutura do ambiente de programação científica Scilab", + "Description[ru]": "Поддержка программного окружения Scilab для инженерных и научных расчётов", + "Description[sk]": "Backend pre vedecké programovacie prostredie Scilab", + "Description[sl]": "Zaledje za znanstveno programersko okolje Scilab", + "Description[sv]": "Bakgrundsprogram för Scilab vetenskaplig programmeringsmiljö", + "Description[tr]": "Scilab Bilimsel Programlama Ortamı için arka uç", + "Description[uk]": "Модуль наукового середовища програмування Scilab", + "Description[x-test]": "xxBackend for the Scilab Scientific Programming Environmentxx", + "Description[zh_CN]": "Scilab 科学编程环境的后端", + "Description[zh_TW]": "Scilab 科學程式環境的後端介面", + "Icon": "scilabbackend", + "Id": "Scilab", + "License": "GPL", + "Name": "Scilab", + "Name[ca@valencia]": "Scilab", + "Name[ca]": "Scilab", + "Name[cs]": "Scilab", + "Name[de]": "Scilab", + "Name[el]": "Scilab", + "Name[en_GB]": "Scilab", + "Name[es]": "Scilab", + "Name[et]": "Scilab", + "Name[fi]": "Scilab", + "Name[fr]": "Scilab", + "Name[gl]": "Scilab", + "Name[it]": "Scilab", + "Name[nl]": "Scilab", + "Name[nn]": "Scilab", + "Name[pl]": "Scilab", + "Name[pt]": "Scilab", + "Name[pt_BR]": "Scilab", + "Name[ru]": "Scilab", + "Name[sk]": "Scilab", + "Name[sl]": "Scilab", + "Name[sv]": "Scilab", + "Name[tr]": "Scilab", + "Name[uk]": "Scilab", + "Name[x-test]": "xxScilabxx", + "Name[zh_CN]": "Scilab", + "Name[zh_TW]": "Scilab", + "ServiceTypes": [ + "Cantor/Backend" + ], + "Website": "http://scilab.org/" + } +} diff --git a/src/backends/scilab/scilabbackend.kcfg b/src/backends/scilab/scilabbackend.kcfg new file mode 100644 index 0000000..a502e79 --- /dev/null +++ b/src/backends/scilab/scilabbackend.kcfg @@ -0,0 +1,21 @@ + + + QStandardPaths + + + + + QUrl::fromLocalFile(QStandardPaths::findExecutable( QLatin1String("scilab-adv-cli") )) + + + + false + + + + + + diff --git a/src/backends/scilab/scilabcompletionobject.cpp b/src/backends/scilab/scilabcompletionobject.cpp new file mode 100644 index 0000000..b0e5704 --- /dev/null +++ b/src/backends/scilab/scilabcompletionobject.cpp @@ -0,0 +1,74 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "scilabcompletionobject.h" + +#include + +#include "scilabsession.h" +#include "scilabkeywords.h" + +ScilabCompletionObject::ScilabCompletionObject(const QString& command, int index, ScilabSession* session) : Cantor::CompletionObject(session) +{ + setLine(command, index); +} + +void ScilabCompletionObject::fetchCompletions() +{ + // A more elegant approach would be to use Scilab's completion() function, + // similarly to how fetching is done in OctaveCompletionObject. + // Unfortunately its interactive behavior is not handled well by cantor. + QStringList allCompletions; + + allCompletions << ScilabKeywords::instance()->variables(); + allCompletions << ScilabKeywords::instance()->functions(); + allCompletions << ScilabKeywords::instance()->keywords(); + + setCompletions(allCompletions); + + emit fetchingDone(); +} + +void ScilabCompletionObject::fetchIdentifierType() +{ + // Scilab's typeof function could be used here, but as long as these lists + // are used just looking up the name is easier. + + if (qBinaryFind(ScilabKeywords::instance()->functions().begin(), + ScilabKeywords::instance()->functions().end(), identifier()) + != ScilabKeywords::instance()->functions().end()) + emit fetchingTypeDone(FunctionType); + else if (qBinaryFind(ScilabKeywords::instance()->keywords().begin(), + ScilabKeywords::instance()->keywords().end(), identifier()) + != ScilabKeywords::instance()->keywords().end()) + emit fetchingTypeDone(KeywordType); + else + emit fetchingTypeDone(VariableType); +} + +bool ScilabCompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_') || c == QLatin1Char('%') || c == QLatin1Char('$'); +} + +bool ScilabCompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c == QLatin1Char('_') || c == QLatin1Char('%') || c == QLatin1Char('$'); +} diff --git a/src/backends/scilab/scilabcompletionobject.h b/src/backends/scilab/scilabcompletionobject.h new file mode 100644 index 0000000..eb18a98 --- /dev/null +++ b/src/backends/scilab/scilabcompletionobject.h @@ -0,0 +1,43 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#ifndef _SCILABCOMPLETIONOBJECT_H +#define _SCILABCOMPLETIONOBJECT_H + +#include "completionobject.h" + +class ScilabSession; + +class ScilabCompletionObject : public Cantor::CompletionObject +{ + public: + ScilabCompletionObject(const QString& cmd, int index, ScilabSession* session) ; + ~ScilabCompletionObject() override = default; + + protected: + bool mayIdentifierContain(QChar c) const override; + bool mayIdentifierBeginWith(QChar c) const override; + + protected Q_SLOTS: + void fetchCompletions() override; + void fetchIdentifierType() override; +}; + +#endif /* _SCILABCOMPLETIONOBJECT_H */ diff --git a/src/backends/scilab/scilabexpression.cpp b/src/backends/scilab/scilabexpression.cpp new file mode 100644 index 0000000..f3cba70 --- /dev/null +++ b/src/backends/scilab/scilabexpression.cpp @@ -0,0 +1,153 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "scilabexpression.h" + +#include + +#include "textresult.h" +#include "imageresult.h" +#include "helpresult.h" + +#include +#include +#include + +#include + +#include "settings.h" +#include "defaultvariablemodel.h" + +using ScilabPlotResult = Cantor::ImageResult; + +ScilabExpression::ScilabExpression( Cantor::Session* session, bool internal ) : Cantor::Expression(session, internal), +m_finished(false), +m_plotPending(false) +{ + qDebug() << "ScilabExpression constructor"; +} + +void ScilabExpression::evaluate() +{ + if((ScilabSettings::integratePlots()) && (command().contains(QLatin1String("plot")))){ + + qDebug() << "Preparing export figures property"; + + QString exportCommand; + + QStringList commandList = command().split(QLatin1String("\n")); + + for(int count = 0; count < commandList.size(); count++){ + + if(commandList.at(count).toLocal8Bit().contains("plot")){ + + exportCommand = QString::fromLatin1("\nxs2png(gcf(), 'cantor-export-scilab-figure-%1.png');\ndelete(gcf());").arg(qrand()); + + commandList[count].append(exportCommand); + + exportCommand.clear(); + } + + qDebug() << "Command " << count << ": " << commandList.at(count).toLocal8Bit().constData(); + } + + QString newCommand = commandList.join(QLatin1String("\n")); + newCommand.prepend(QLatin1String("clf();\n")); + newCommand.append(QLatin1String("\n")); + + this->setCommand(newCommand); + + qDebug() << "New Command " << command(); + + } + + session()->enqueueExpression(this); +} + +void ScilabExpression::parseOutput(QString output) +{ + qDebug() << "output: " << output; + + m_output = output; + setResult(new Cantor::TextResult(output)); + + evalFinished(); + setStatus(Cantor::Expression::Done); +} + +void ScilabExpression::parseError(QString error) +{ + qDebug() << "error" << error; + + setErrorMessage(error.replace(QLatin1String("\n"), QLatin1String("
    ")).remove(0, 2) + .replace(QLatin1String(" "), QLatin1String(" "))); + + evalFinished(); + setStatus(Cantor::Expression::Error); +} + +void ScilabExpression::parsePlotFile(QString filename) +{ + qDebug() << "parsePlotFile"; + + qDebug() << "ScilabExpression::parsePlotFile: " << filename; + + setResult(new ScilabPlotResult(QUrl::fromLocalFile(filename))); + + setPlotPending(false); + + if (m_finished){ + qDebug() << "ScilabExpression::parsePlotFile: done"; + setStatus(Done); + } +} + +void ScilabExpression::interrupt() +{ + qDebug()<<"interruptinging command"; + setStatus(Cantor::Expression::Interrupted); +} + +void ScilabExpression::evalFinished() +{ + qDebug()<<"evaluation finished"; + + foreach (const QString& line, m_output.simplified().split(QLatin1Char('\n'), QString::SkipEmptyParts)){ + if (m_output.contains(QLatin1Char('='))){ + + qDebug() << line; + + QStringList parts = line.split(QLatin1Char('=')); + + if (parts.size() >= 2){ + Cantor::DefaultVariableModel* model = dynamic_cast(session()->variableModel()); + + if (model){ + model->addVariable(parts.first().trimmed(), parts.last().trimmed()); + } + } + } + } +} + +void ScilabExpression::setPlotPending(bool plot) +{ + m_plotPending = plot; +} diff --git a/src/backends/scilab/scilabexpression.h b/src/backends/scilab/scilabexpression.h new file mode 100644 index 0000000..b2f9c34 --- /dev/null +++ b/src/backends/scilab/scilabexpression.h @@ -0,0 +1,51 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#ifndef _SCILABEXPRESSION_H +#define _SCILABEXPRESSION_H + +#include "expression.h" +#include + +class ScilabExpression : public Cantor::Expression +{ + Q_OBJECT + + public: + explicit ScilabExpression(Cantor::Session* session, bool internal = false); + ~ScilabExpression() override = default; + + void evaluate() override; + void interrupt() override; + void parseOutput(QString output); + void parseError(QString error); + void parsePlotFile(QString filename); + void setPlotPending(bool plot); + + public Q_SLOTS: + void evalFinished(); + + private: + QString m_output; + bool m_finished; + bool m_plotPending; +}; + +#endif /* _SCILABEXPRESSION_H */ diff --git a/src/backends/scilab/scilabextensions.cpp b/src/backends/scilab/scilabextensions.cpp new file mode 100644 index 0000000..474b73d --- /dev/null +++ b/src/backends/scilab/scilabextensions.cpp @@ -0,0 +1,81 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#include "scilabextensions.h" +#include + +#include + +#define SCILAB_EXT_CDTOR(name) Scilab##name##Extension::Scilab##name##Extension(QObject* parent) : name##Extension(parent) {} \ + Scilab##name##Extension::~Scilab##name##Extension() {} + +SCILAB_EXT_CDTOR(Script) + +QString ScilabScriptExtension::runExternalScript(const QString& path) +{ + return QString::fromLatin1("exec(\"%1\", -1)").arg(path); +} + +QString ScilabScriptExtension::scriptFileFilter() +{ + return i18n(";;Scilab script file (*.sce);;Scilab function file (*.sci)"); +} + +QString ScilabScriptExtension::highlightingMode() +{ + return QLatin1String("scilab"); +} + +QString ScilabScriptExtension::commandSeparator() +{ + return QLatin1String(";"); +} + +SCILAB_EXT_CDTOR(VariableManagement) + +QString ScilabVariableManagementExtension::addVariable(const QString& name, const QString& value) +{ + return setValue(name,value); +} + +QString ScilabVariableManagementExtension::setValue(const QString& name, const QString& value) +{ + return QString::fromLatin1("%1 = %2").arg(name).arg(value); +} + +QString ScilabVariableManagementExtension::removeVariable(const QString& name) +{ + return QString::fromLatin1("clear %1;").arg(name); +} + +QString ScilabVariableManagementExtension::clearVariables() +{ + return QLatin1String("clear;"); +} + +QString ScilabVariableManagementExtension::saveVariables(const QString& fileName) +{ + return QString::fromLatin1("save('%1');").arg(fileName); +} + +QString ScilabVariableManagementExtension::loadVariables(const QString& fileName) +{ + return QString::fromLatin1("load('%1');").arg(fileName); +} diff --git a/src/backends/scilab/scilabextensions.h b/src/backends/scilab/scilabextensions.h new file mode 100644 index 0000000..d3af16e --- /dev/null +++ b/src/backends/scilab/scilabextensions.h @@ -0,0 +1,51 @@ +/* + 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. + + --- + Copyright (C) 2013 Filipe Saraiva + */ + +#ifndef SCILABEXTENSIONS_H +#define SCILABEXTENSIONS_H + +#include + +#define SCILAB_EXT_CDTOR_DECL(name) Scilab##name##Extension(QObject* parent); \ + ~Scilab##name##Extension(); + +class ScilabScriptExtension : public Cantor::ScriptExtension +{ + public: + SCILAB_EXT_CDTOR_DECL(Script) + QString scriptFileFilter() override; + QString highlightingMode() override; + QString runExternalScript(const QString& path) override; + QString commandSeparator() override; +}; + +class ScilabVariableManagementExtension : public Cantor::VariableManagementExtension +{ + public: + SCILAB_EXT_CDTOR_DECL(VariableManagement) + QString addVariable(const QString& name, const QString& value) override; + QString setValue(const QString& name, const QString& value) override; + QString removeVariable(const QString& name) override; + QString saveVariables(const QString& fileName) override; + QString loadVariables(const QString& fileName) override; + QString clearVariables() override; +}; + +#endif // SCILABEXTENSIONS_H diff --git a/src/backends/scilab/scilabhighlighter.cpp b/src/backends/scilab/scilabhighlighter.cpp new file mode 100644 index 0000000..f4721e2 --- /dev/null +++ b/src/backends/scilab/scilabhighlighter.cpp @@ -0,0 +1,84 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "scilabhighlighter.h" +#include "scilabkeywords.h" +#include "result.h" +#include "textresult.h" +#include "session.h" + +#include +#include + +ScilabHighlighter::ScilabHighlighter(QObject* parent, Cantor::Session* session) : Cantor::DefaultHighlighter(parent), m_session(session) +{ + addKeywords(ScilabKeywords::instance()->keywords()); + addFunctions(ScilabKeywords::instance()->functions()); + addVariables(ScilabKeywords::instance()->variables()); + + addRule(QRegExp(QLatin1String("\\b[A-Za-z0-9_]+(?=\\()")), functionFormat()); + + addRule(QLatin1String("FIXME"), commentFormat()); + addRule(QLatin1String("TODO"), commentFormat()); + + addRule(QRegExp(QLatin1String("\"[^\"]*\"")), stringFormat()); + addRule(QRegExp(QLatin1String("'[^']*'")), stringFormat()); + addRule(QRegExp(QLatin1String("//[^\n]*")), commentFormat()); + + commentStartExpression = QRegExp(QLatin1String("/\\*")); + commentEndExpression = QRegExp(QLatin1String("\\*/")); +} + +void ScilabHighlighter::highlightBlock(const QString& text) +{ + if (skipHighlighting(text)){ + return; + } + + //Do some backend independent highlighting (brackets etc.) + DefaultHighlighter::highlightBlock(text); + + setCurrentBlockState(0); + + int startIndex = 0; + if (previousBlockState() != 1) + startIndex = commentStartExpression.indexIn(text); + + while (startIndex >= 0){ + + int endIndex = commentEndExpression.indexIn(text, startIndex); + int commentLength; + if (endIndex == -1){ + + setCurrentBlockState(1); + commentLength = text.length() - startIndex; + } else { + commentLength = endIndex - startIndex + + commentEndExpression.matchedLength(); + } + setFormat(startIndex, commentLength, commentFormat()); + startIndex = commentStartExpression.indexIn(text, startIndex + commentLength); + } +} + +QString ScilabHighlighter::nonSeparatingCharacters() const +{ + return QLatin1String("[%]"); +} diff --git a/src/backends/scilab/scilabhighlighter.h b/src/backends/scilab/scilabhighlighter.h new file mode 100644 index 0000000..20cbdfd --- /dev/null +++ b/src/backends/scilab/scilabhighlighter.h @@ -0,0 +1,45 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#ifndef _SCILABHIGHLIGHTER_H +#define _SCILABHIGHLIGHTER_H + +#include "defaulthighlighter.h" +#include "scilabexpression.h" + +class ScilabHighlighter : public Cantor::DefaultHighlighter +{ + Q_OBJECT + + public: + ScilabHighlighter(QObject* parent, Cantor::Session* session); + ~ScilabHighlighter() override = default; + + protected: + void highlightBlock(const QString&) override; + QString nonSeparatingCharacters() const override; + + private: + Cantor::Session* m_session; + QRegExp commentStartExpression; + QRegExp commentEndExpression; +}; + +#endif /* _SCILABHIGHLIGHTER_H */ diff --git a/src/backends/scilab/scilabkeywords.cpp b/src/backends/scilab/scilabkeywords.cpp new file mode 100644 index 0000000..31470b7 --- /dev/null +++ b/src/backends/scilab/scilabkeywords.cpp @@ -0,0 +1,79 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "scilabkeywords.h" + +#include +#include +#include +#include + +#include +#include + +ScilabKeywords::ScilabKeywords() +{ + KSyntaxHighlighting::Repository m_repository; + KSyntaxHighlighting::Definition definition = m_repository.definitionForName(QLatin1String("scilab")); + + m_keywords << definition.keywordList(QLatin1String("Structure-keywords")); + m_keywords << definition.keywordList(QLatin1String("Control-keywords")); + m_keywords << definition.keywordList(QLatin1String("Function-keywords")); + m_keywords << definition.keywordList(QLatin1String("Warning-keywords")); + m_keywords << definition.keywordList(QLatin1String("Function-keywords")); + + //TODO: This keywords missing in scilab syntax file + m_keywords << QLatin1String("case") << QLatin1String("catch") << QLatin1String("continue"); + m_keywords << QLatin1String("try"); + + m_functions << definition.keywordList(QLatin1String("functions")); + + //TODO: Should we use this keywordList as variables? + m_variables << definition.keywordList(QLatin1String("Constants-keyword")); +} + +ScilabKeywords* ScilabKeywords::instance() +{ + static ScilabKeywords* inst = nullptr; + + if(inst == nullptr){ + inst = new ScilabKeywords(); + qSort(inst->m_variables); + qSort(inst->m_functions); + qSort(inst->m_keywords); + } + + return inst; +} + +const QStringList& ScilabKeywords::variables() const +{ + return m_variables; +} + +const QStringList& ScilabKeywords::functions() const +{ + return m_functions; +} + +const QStringList& ScilabKeywords::keywords() const +{ + return m_keywords; +} diff --git a/src/backends/scilab/scilabkeywords.h b/src/backends/scilab/scilabkeywords.h new file mode 100644 index 0000000..11543e8 --- /dev/null +++ b/src/backends/scilab/scilabkeywords.h @@ -0,0 +1,42 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#ifndef _SCILABKEYWORDS_H +#define _SCILABKEYWORDS_H + +#include + +class ScilabKeywords +{ + public: + static ScilabKeywords* instance(); + + const QStringList& functions() const; + const QStringList& keywords() const; + const QStringList& variables() const; + + private: + ScilabKeywords(); + ~ScilabKeywords() = default; + QStringList m_functions; + QStringList m_keywords; + QStringList m_variables; +}; +#endif /* _SCILABKEYWORDS_H */ diff --git a/src/backends/scilab/scilabsession.cpp b/src/backends/scilab/scilabsession.cpp new file mode 100644 index 0000000..90774be --- /dev/null +++ b/src/backends/scilab/scilabsession.cpp @@ -0,0 +1,273 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#include "scilabsession.h" +#include "scilabexpression.h" +#include "scilabhighlighter.h" +#include "scilabcompletionobject.h" + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +ScilabSession::ScilabSession( Cantor::Backend* backend) : Session(backend), +m_process(nullptr), +m_watch(nullptr), +m_variableModel(new Cantor::DefaultVariableModel(this)) +{ +} + +ScilabSession::~ScilabSession() +{ + if (m_process) + m_process->terminate(); +} + +void ScilabSession::login() +{ + qDebug()<<"login"; + emit loginStarted(); + + QStringList args; + + args << QLatin1String("-nb"); + + m_process = new QProcess(this); + m_process->setArguments(args); + m_process->setProgram(ScilabSettings::self()->path().toLocalFile()); + + qDebug() << m_process->program(); + + m_process->setProcessChannelMode(QProcess::SeparateChannels); + m_process->start(); + m_process->waitForStarted(); + m_process->waitForReadyRead(); + + if(ScilabSettings::integratePlots()){ + + qDebug() << "integratePlots"; + + QString tempPath = QDir::tempPath(); + + QString pathScilabOperations = tempPath; + pathScilabOperations.prepend(QLatin1String("chdir('")); + pathScilabOperations.append(QLatin1String("');\n")); + + qDebug() << "Processing command to change chdir in Scilab. Command " << pathScilabOperations.toLocal8Bit(); + + m_process->write(pathScilabOperations.toLocal8Bit()); + + m_watch = new KDirWatch(this); + m_watch->setObjectName(QLatin1String("ScilabDirWatch")); + + m_watch->addDir(tempPath, KDirWatch::WatchFiles); + + qDebug() << "addDir " << tempPath << "? " << m_watch->contains(QLatin1String(tempPath.toLocal8Bit())); + + QObject::connect(m_watch, &KDirWatch::created, this, &ScilabSession::plotFileChanged); + } + + if(!ScilabSettings::self()->autorunScripts().isEmpty()){ + QString autorunScripts = ScilabSettings::self()->autorunScripts().join(QLatin1String("\n")); + m_process->write(autorunScripts.toLocal8Bit()); + } + + QObject::connect(m_process, &QProcess::readyReadStandardOutput, this, &ScilabSession::readOutput); + QObject::connect(m_process, &QProcess::readyReadStandardError, this, &ScilabSession::readError); + + m_process->readAllStandardOutput().clear(); + m_process->readAllStandardError().clear(); + + changeStatus(Cantor::Session::Done); + + emit loginDone(); +} + +void ScilabSession::logout() +{ + qDebug()<<"logout"; + + m_process->write("exit\n"); + + expressionQueue().clear(); + m_variableModel->clearVariables(); + + QDir removePlotFigures; + QListIterator i(m_listPlotName); + + while(i.hasNext()){ + removePlotFigures.remove(QLatin1String(i.next().toLocal8Bit().constData())); + } + + changeStatus(Status::Disable); +} + +void ScilabSession::interrupt() +{ + qDebug()<<"interrupt"; + + if (status() == Cantor::Session::Running) + expressionQueue().first()->interrupt(); + + changeStatus(Cantor::Session::Done); +} + +Cantor::Expression* ScilabSession::evaluateExpression(const QString& cmd, Cantor::Expression::FinishingBehavior behave, bool internal) +{ + qDebug() << "evaluating: " << cmd; + ScilabExpression* expr = new ScilabExpression(this, internal); + + expr->setFinishingBehavior(behave); + expr->setCommand(cmd); + expr->evaluate(); + + return expr; +} + +void ScilabSession::runFirstExpression() +{ + qDebug() <<"call runFirstExpression"; + qDebug() << "m_process: " << m_process; + qDebug() << "status: " << (status() == Cantor::Session::Running ? "Running" : "Done"); + + if (!m_process) + return; + + qDebug()<<"running next expression"; + + if(!expressionQueue().isEmpty()) + { + ScilabExpression* expr = static_cast(expressionQueue().first()); + + QString command; + command.prepend(QLatin1String("\nprintf('begin-cantor-scilab-command-processing')\n")); + command += expr->command(); + command += QLatin1String("\nprintf('terminated-cantor-scilab-command-processing')\n"); + + connect(expr, &ScilabExpression::statusChanged, this, &ScilabSession::currentExpressionStatusChanged); + expr->setStatus(Cantor::Expression::Computing); + + qDebug() << "Writing command to process" << command; + + m_process->write(command.toLocal8Bit()); + } +} + +void ScilabSession::readError() +{ + qDebug() << "readError"; + + QString error = QLatin1String(m_process->readAllStandardError()); + + qDebug() << "error: " << error; + static_cast(expressionQueue().first())->parseError(error); +} + +void ScilabSession::readOutput() +{ + qDebug() << "readOutput"; + + while(m_process->bytesAvailable() > 0){ + m_output.append(QString::fromLocal8Bit(m_process->readLine())); + } + + qDebug() << "output.isNull? " << m_output.isNull(); + qDebug() << "output: " << m_output; + + if(status() != Running || m_output.isNull()){ + return; + } + + if(m_output.contains(QLatin1String("begin-cantor-scilab-command-processing")) && + m_output.contains(QLatin1String("terminated-cantor-scilab-command-processing"))){ + + m_output.remove(QLatin1String("begin-cantor-scilab-command-processing")); + m_output.remove(QLatin1String("terminated-cantor-scilab-command-processing")); + + static_cast(expressionQueue().first())->parseOutput(m_output); + + m_output.clear(); + } +} + +void ScilabSession::plotFileChanged(const QString& filename) +{ + qDebug() << "plotFileChanged filename:" << filename; + + if (expressionQueue().first() && (filename.contains(QLatin1String("cantor-export-scilab-figure")))){ + qDebug() << "Calling parsePlotFile"; + static_cast(expressionQueue().first())->parsePlotFile(filename); + + m_listPlotName.append(filename); + } +} + +void ScilabSession::currentExpressionStatusChanged(Cantor::Expression::Status status) +{ + qDebug() << "currentExpressionStatusChanged: " << status; + + switch (status){ + case Cantor::Expression::Computing: + case Cantor::Expression::Interrupted: + case Cantor::Expression::Queued: + break; + + case Cantor::Expression::Done: + case Cantor::Expression::Error: + expressionQueue().removeFirst(); + + if (expressionQueue().isEmpty()) + changeStatus(Done); + else + runFirstExpression(); + + break; + } +} + +QSyntaxHighlighter* ScilabSession::syntaxHighlighter(QObject* parent) +{ + + ScilabHighlighter *highlighter = new ScilabHighlighter(parent, this); + + return highlighter; +} + +Cantor::CompletionObject* ScilabSession::completionFor(const QString& command, int index) +{ + return new ScilabCompletionObject(command, index, this); +} + +QAbstractItemModel* ScilabSession::variableModel() +{ + return m_variableModel; +} + diff --git a/src/backends/scilab/scilabsession.h b/src/backends/scilab/scilabsession.h new file mode 100644 index 0000000..250ca2e --- /dev/null +++ b/src/backends/scilab/scilabsession.h @@ -0,0 +1,74 @@ +/* + 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. + + --- + Copyright (C) 2011 Filipe Saraiva + */ + +#ifndef _SCILABSESSION_H +#define _SCILABSESSION_H + +#include "session.h" +#include "scilabexpression.h" +#include +#include + +namespace Cantor { + class DefaultVariableModel; +} + +class ScilabExpression; +class KDirWatch; +class QProcess; + +class ScilabSession : public Cantor::Session +{ + Q_OBJECT + + public: + explicit ScilabSession(Cantor::Backend* backend); + ~ScilabSession() override; + + void login() override; + void logout() override; + + void interrupt() override; + void runExpression(ScilabExpression* expr); + + QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; + + Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior behave = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; + Cantor::CompletionObject* completionFor(const QString& command, int index=-1) override; + void runFirstExpression() override; + QAbstractItemModel* variableModel() override; + + public Q_SLOTS: + void readOutput(); + void readError(); + void plotFileChanged(const QString& filename); + + private: + QProcess* m_process; + KDirWatch* m_watch; + QStringList m_listPlotName; + QString m_output; + Cantor::DefaultVariableModel* m_variableModel; + private Q_SLOTS: + void currentExpressionStatusChanged(Cantor::Expression::Status status); + +}; + +#endif /* _SCILABSESSION_H */ diff --git a/src/backends/scilab/settings.kcfgc b/src/backends/scilab/settings.kcfgc new file mode 100644 index 0000000..005a5bd --- /dev/null +++ b/src/backends/scilab/settings.kcfgc @@ -0,0 +1,3 @@ +File=scilabbackend.kcfg +ClassName=ScilabSettings +Singleton=true diff --git a/src/backends/scilab/settings.ui b/src/backends/scilab/settings.ui new file mode 100644 index 0000000..3db03ab --- /dev/null +++ b/src/backends/scilab/settings.ui @@ -0,0 +1,71 @@ + + + ScilabSettingsBase + + + + 0 + 0 + 400 + 300 + + + + + + + + + Path to scilab-adv-cli command: + + + + + + + + + + + + Integrate Plots in Worksheet + + + + + + + Scripts to autorun + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KUrlRequester + QFrame +
    kurlrequester.h
    +
    +
    + + +
    diff --git a/src/cantor.cpp b/src/cantor.cpp new file mode 100644 index 0000000..1e90458 --- /dev/null +++ b/src/cantor.cpp @@ -0,0 +1,634 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ +#include "cantor.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "lib/backend.h" +#include "lib/panelpluginhandler.h" +#include "lib/panelplugin.h" +#include "lib/worksheetaccess.h" + +#include "settings.h" +#include "ui_settings.h" +#include "backendchoosedialog.h" + +CantorShell::CantorShell() : KParts::MainWindow(), m_part(nullptr) +{ + + // set the shell's ui resource file + setXMLFile(QLatin1String("cantor_shell.rc")); + + // then, setup our actions + setupActions(); + + createGUI(nullptr); + + m_tabWidget=new QTabWidget(this); + m_tabWidget->setTabsClosable(true); + m_tabWidget->setMovable(true); + m_tabWidget->setDocumentMode(true); + setCentralWidget(m_tabWidget); + + connect(m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(activateWorksheet(int))); + connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int))); + + // apply the saved mainwindow settings, if any, and ask the mainwindow + // to automatically save settings if changed: window size, toolbar + // position, icon size, etc. + setAutoSaveSettings(); + + setDockOptions(QMainWindow::AnimatedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::VerticalTabs); +} + +void CantorShell::load(const QUrl &url) +{ + if (!m_part||!m_part->url().isEmpty() || m_part->isModified() ) + { + addWorksheet(QLatin1String("null")); + m_tabWidget->setCurrentIndex(m_parts.size()-1); + } + m_part->openUrl( url ); +} + +bool CantorShell::hasAvailableBackend() +{ + bool hasBackend=false; + foreach(Cantor::Backend* b, Cantor::Backend::availableBackends()) + { + if(b->isEnabled()) + hasBackend=true; + } + + return hasBackend; +} + +void CantorShell::setupActions() +{ + QAction* openNew = KStandardAction::openNew(this, SLOT(fileNew()), actionCollection()); + openNew->setPriority(QAction::LowPriority); + QAction* open = KStandardAction::open(this, SLOT(fileOpen()), actionCollection()); + open->setPriority(QAction::LowPriority); + + KStandardAction::close (this, SLOT(closeTab()), actionCollection()); + + KStandardAction::quit(qApp, SLOT(closeAllWindows()), actionCollection()); + + createStandardStatusBarAction(); + //setStandardToolBarMenuEnabled(true); + + KStandardAction::keyBindings(this, SLOT(optionsConfigureKeys()), actionCollection()); + KStandardAction::configureToolbars(this, SLOT(configureToolbars()), actionCollection()); + + KStandardAction::preferences(this, SLOT(showSettings()), actionCollection()); + + QAction * downloadExamples = new QAction(i18n("Download Example Worksheets"), actionCollection()); + downloadExamples->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); + actionCollection()->addAction(QLatin1String("file_example_download"), downloadExamples); + connect(downloadExamples, SIGNAL(triggered()), this, SLOT(downloadExamples())); + + QAction * openExample =new QAction(i18n("&Open Example"), actionCollection()); + openExample->setIcon(QIcon::fromTheme(QLatin1String("document-open"))); + actionCollection()->addAction(QLatin1String("file_example_open"), openExample); + connect(openExample, SIGNAL(triggered()), this, SLOT(openExample())); + + QAction* toPreviousTab = new QAction(i18n("Go to previous worksheet"), actionCollection()); + actionCollection()->addAction(QLatin1String("go_to_previous_tab"), toPreviousTab); + actionCollection()->setDefaultShortcut(toPreviousTab, Qt::CTRL+Qt::Key_PageDown); + connect(toPreviousTab, &QAction::triggered, toPreviousTab, [this](){ + const int index = m_tabWidget->currentIndex()-1; + if (index >= 0) + m_tabWidget->setCurrentIndex(index); + else + m_tabWidget->setCurrentIndex(m_tabWidget->count()-1); + }); + addAction(toPreviousTab); + + QAction* toNextTab = new QAction(i18n("Go to next worksheet"), actionCollection()); + actionCollection()->addAction(QLatin1String("go_to_next_tab"), toNextTab); + actionCollection()->setDefaultShortcut(toNextTab, Qt::CTRL+Qt::Key_PageUp); + connect(toNextTab, &QAction::triggered, toNextTab, [this](){ + const int index = m_tabWidget->currentIndex()+1; + if (index < m_tabWidget->count()) + m_tabWidget->setCurrentIndex(index); + else + m_tabWidget->setCurrentIndex(0); + }); + addAction(toNextTab); +} + +void CantorShell::saveProperties(KConfigGroup & /*config*/) +{ + // the 'config' object points to the session managed + // config file. anything you write here will be available + // later when this app is restored +} + +void CantorShell::readProperties(const KConfigGroup & /*config*/) +{ + // the 'config' object points to the session managed + // config file. this function is automatically called whenever + // the app is being restored. read in here whatever you wrote + // in 'saveProperties' +} + +void CantorShell::fileNew() +{ + if (sender()->inherits("QAction")) + { + QAction * a = qobject_cast(sender()); + QString backendName = a->data().toString(); + if (!backendName.isEmpty()) + { + addWorksheet(backendName); + return; + } + } + addWorksheet(); +} + +void CantorShell::optionsConfigureKeys() +{ + KShortcutsDialog dlg( KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsDisallowed, this ); + dlg.addCollection( actionCollection(), i18n("Cantor") ); + if (m_part) + dlg.addCollection( m_part->actionCollection(), i18n("Cantor") ); + dlg.configure( true ); +} + +void CantorShell::fileOpen() +{ + // this slot is called whenever the File->Open menu is selected, + // the Open shortcut is pressed (usually CTRL+O) or the Open toolbar + // button is clicked + QUrl url = QFileDialog::getOpenFileUrl(this, i18n("Open file"), QUrl(), i18n("Cantor Worksheet (*.cws)")); + + if (url.isEmpty() == false) + { + // About this function, the style guide ( + // http://developer.kde.org/documentation/standards/kde/style/basics/index.html ) + // says that it should open a new window if the document is _not_ + // in its initial state. This is what we do here.. + /*if ( m_part->url().isEmpty() && ! m_part->isModified() ) + { + // we open the file in this window... + load( url ); + } + else + { + // we open the file in a new window... + CantorShell* newWin = new CantorShell; + newWin->load( url ); + newWin->show(); + }*/ + load( url ); + } +} + +void CantorShell::addWorksheet() +{ + if(hasAvailableBackend()) //There is no point in asking for the backend, if no one is available + { + QString backend = Settings::self()->defaultBackend(); + if (backend.isEmpty()) + { + QPointer dlg=new BackendChooseDialog(this); + if(dlg->exec()) + { + backend = dlg->backendName(); + addWorksheet(backend); + } + + delete dlg; + } + else + { + addWorksheet(backend); + } + + }else + { + QTextBrowser *browser=new QTextBrowser(this); + QString backendList=QLatin1String("
      "); + int backendListSize = 0; + foreach(Cantor::Backend* b, Cantor::Backend::availableBackends()) + { + if(!b->requirementsFullfilled()) //It's disabled because of misssing dependencies, not because of some other reason(like eg. nullbackend) + { + backendList+=QString::fromLatin1("
    • %1: %2
    • ").arg(b->name(), b->url()); + ++backendListSize; + } + } + browser->setHtml(i18np("

      No Backend Found

      \n" \ + "
      You could try:\n" \ + "
        " \ + "
      • Changing the settings in the config dialog;
      • " \ + "
      • Installing packages for the following program:
      • " \ + " %2 " \ + "
      " \ + "
      " + , "

      No Backend Found

      \n" \ + "
      You could try:\n" \ + "
        " \ + "
      • Changing the settings in the config dialog;
      • " \ + "
      • Installing packages for one of the following programs:
      • " \ + " %2 " \ + "
      " \ + "
      " + , backendListSize, backendList + )); + + browser->setObjectName(QLatin1String("ErrorMessage")); + m_tabWidget->addTab(browser, i18n("Error")); + } +} + +void CantorShell::addWorksheet(const QString& backendName) +{ + static int sessionCount=1; + + // this routine will find and load our Part. it finds the Part by + // name which is a bad idea usually.. but it's alright in this + // case since our Part is made for this Shell + KPluginFactory* factory = KPluginLoader(QLatin1String("libcantorpart")).factory(); + if (factory) + { + // now that the Part is loaded, we cast it to a Part to get + // our hands on it + KParts::ReadWritePart* part = factory->create(m_tabWidget, QVariantList()<addTab(part->widget(), QIcon::fromTheme(backend->icon()), i18n("Session %1", sessionCount++)); + m_tabWidget->setCurrentIndex(tab); + } + else + delete part; + } + else + { + qDebug()<<"error creating part "; + } + + } + else + { + // if we couldn't find our Part, we exit since the Shell by + // itself can't do anything useful + KMessageBox::error(this, i18n("Could not find the Cantor Part.")); + qApp->quit(); + // we return here, cause qApp->quit() only means "exit the + // next time we enter the event loop... + return; + } + +} + +void CantorShell::activateWorksheet(int index) +{ + QObject* pluginHandler=m_part->findChild(QLatin1String("PanelPluginHandler")); + if (pluginHandler) + disconnect(pluginHandler,SIGNAL(pluginsChanged()), this, SLOT(updatePanel())); + + // Save part state before change worksheet + if (m_part) + { + QStringList visiblePanelNames; + foreach (QDockWidget* doc, m_panels) + { + if (doc->widget() && doc->widget()->isVisible()) + visiblePanelNames << doc->objectName(); + } + m_pluginsVisibility[m_part] = visiblePanelNames; + } + + m_part=findPart(m_tabWidget->widget(index)); + if(m_part) + { + createGUI(m_part); + + QObject* pluginHandler=m_part->findChild(QLatin1String("PanelPluginHandler")); + connect(pluginHandler, SIGNAL(pluginsChanged()), this, SLOT(updatePanel())); + updatePanel(); + } + else + qDebug()<<"selected part doesn't exist"; + + m_tabWidget->setCurrentIndex(index); +} + +void CantorShell::setTabCaption(const QString& caption, const QIcon& icon) +{ + if (caption.isEmpty()) return; + + KParts::ReadWritePart* part=dynamic_cast(sender()); + m_tabWidget->setTabText(m_tabWidget->indexOf(part->widget()), caption); + m_tabWidget->setTabIcon(m_tabWidget->indexOf(part->widget()), icon); +} + +void CantorShell::closeTab(int index) +{ + if (!reallyClose(false)) + { + return; + } + + QWidget* widget = nullptr; + if (index >= 0) + { + widget = m_tabWidget->widget(index); + } + else if (m_part) + { + widget = m_part->widget(); + } + + if (!widget) + { + qWarning() << "Could not find widget by tab index" << index; + return; + } + + + m_tabWidget->removeTab(index); + + if(widget->objectName()==QLatin1String("ErrorMessage")) + { + widget->deleteLater(); + }else + { + KParts::ReadWritePart* part= findPart(widget); + if(part) + { + m_parts.removeAll(part); + m_pluginsVisibility.remove(part); + delete part; + } + } + updatePanel(); +} + +bool CantorShell::reallyClose(bool checkAllParts) { + if(checkAllParts && m_parts.count() > 1) { + bool modified = false; + foreach( KParts::ReadWritePart* const part, m_parts) + { + if(part->isModified()) { + modified = true; + break; + } + } + if(!modified) return true; + int want_save = KMessageBox::warningYesNo( this, + i18n("Multiple unsaved Worksheets are opened. Do you want to close them?"), + i18n("Close Cantor")); + switch (want_save) { + case KMessageBox::Yes: + return true; + case KMessageBox::No: + return false; + } + } + if (m_part && m_part->isModified() ) { + int want_save = KMessageBox::warningYesNoCancel( this, + i18n("The current project has been modified. Do you want to save it?"), + i18n("Save Project")); + switch (want_save) { + case KMessageBox::Yes: + m_part->save(); + if(m_part->waitSaveComplete()) { + return true; + } else { + m_part->setModified(true); + return false; + } + case KMessageBox::Cancel: + return false; + case KMessageBox::No: + return true; + } + } + return true; +} + +void CantorShell::closeEvent(QCloseEvent* event) { + if(!reallyClose()) { + event->ignore(); + } else { + KParts::MainWindow::closeEvent(event); + } +} + +void CantorShell::showSettings() +{ + KConfigDialog *dialog = new KConfigDialog(this, QLatin1String("settings"), Settings::self()); + QWidget *generalSettings = new QWidget; + Ui::SettingsBase base; + base.setupUi(generalSettings); + base.kcfg_DefaultBackend->addItems(Cantor::Backend::listAvailableBackends()); + + dialog->addPage(generalSettings, i18n("General"), QLatin1String("preferences-other")); + foreach(Cantor::Backend* backend, Cantor::Backend::availableBackends()) + { + if (backend->config()) //It has something to configure, so add it to the dialog + dialog->addPage(backend->settingsWidget(dialog), backend->config(), backend->name(), backend->icon()); + } + + dialog->show(); +} + +void CantorShell::downloadExamples() +{ + KNS3::DownloadDialog dialog; + dialog.exec(); + foreach (const KNS3::Entry& e, dialog.changedEntries()) + { + qDebug() << "Changed Entry: " << e.name(); + } +} + +void CantorShell::openExample() +{ + QString dir = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + QLatin1String("/examples"); + if (dir.isEmpty()) return; + QDir().mkpath(dir); + + QStringList files=QDir(dir).entryList(QDir::Files); + QPointer dlg=new QDialog(this); + QListWidget* list=new QListWidget(dlg); + foreach(const QString& file, files) + { + QString name=file; + name.remove(QRegExp(QLatin1String("-.*\\.hotstuff-access$"))); + list->addItem(name); + } + + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + mainLayout->addWidget(list); + + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + mainLayout->addWidget(buttonBox); + + buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + + connect(buttonBox, SIGNAL(accepted()), dlg, SLOT(accept()) ); + connect(buttonBox, SIGNAL(rejected()), dlg, SLOT(reject()) ); + + if (dlg->exec()==QDialog::Accepted&&list->currentRow()>=0) + { + const QString& selectedFile=files[list->currentRow()]; + QUrl url = QUrl::fromLocalFile(QDir(dir).absoluteFilePath(selectedFile)); + + qDebug()<<"loading file "<widget()==widget) + return part; + } + return nullptr; +} + +void CantorShell::updatePanel() +{ + unplugActionList(QLatin1String("view_show_panel_list")); + + //remove all of the previous panels (but do not delete the widgets) + foreach(QDockWidget* dock, m_panels) + { + QWidget* widget=dock->widget(); + if(widget!=nullptr) + { + widget->setParent(this); + widget->hide(); + } + dock->deleteLater(); + } + m_panels.clear(); + + QList panelActions; + + Cantor::PanelPluginHandler* handler=m_part->findChild(QLatin1String("PanelPluginHandler")); + if(!handler) + { + qDebug()<<"no PanelPluginHandle found for this part"; + return; + } + + QDockWidget* last=nullptr; + + QList plugins=handler->plugins(); + const bool isNewWorksheet = !m_pluginsVisibility.contains(m_part); + foreach(Cantor::PanelPlugin* plugin, plugins) + { + if(plugin==nullptr) + { + qDebug()<<"somethings wrong"; + continue; + } + + qDebug()<<"adding panel for "<name(); + plugin->setParentWidget(this); + + QDockWidget* docker=new QDockWidget(plugin->name(), this); + docker->setObjectName(plugin->name()); + docker->setWidget(plugin->widget()); + addDockWidget ( Qt::RightDockWidgetArea, docker ); + + // Set visibility for dock from saved info + if (!isNewWorksheet) + if (m_pluginsVisibility[m_part].contains(plugin->name())) + docker->show(); + else + docker->hide(); + else + docker->show(); + + if(last!=nullptr) + tabifyDockWidget(last, docker); + last=docker; + + connect(plugin, SIGNAL(visibilityRequested()), docker, SLOT(raise())); + + m_panels.append(docker); + + //Create the action to show/hide this panel + panelActions<toggleViewAction(); + + } + + plugActionList(QLatin1String("view_show_panel_list"), panelActions); + + unplugActionList(QLatin1String("new_worksheet_with_backend_list")); + QList newBackendActions; + foreach (Cantor::Backend* backend, Cantor::Backend::availableBackends()) + { + if (!backend->isEnabled()) + continue; + QAction * action = new QAction(QIcon::fromTheme(backend->icon()), backend->name(), nullptr); + action->setData(backend->name()); + connect(action, SIGNAL(triggered()), this, SLOT(fileNew())); + newBackendActions << action; + } + plugActionList(QLatin1String("new_worksheet_with_backend_list"), newBackendActions); +} + +Cantor::WorksheetAccessInterface* CantorShell::currentWorksheetAccessInterface() +{ + Cantor::WorksheetAccessInterface* wa=m_part->findChild(Cantor::WorksheetAccessInterface::Name); + + if (!wa) + qDebug()<<"failed to access worksheet access interface for current part"; + + return wa; +} diff --git a/src/cantor.h b/src/cantor.h new file mode 100644 index 0000000..dd8d4dd --- /dev/null +++ b/src/cantor.h @@ -0,0 +1,117 @@ +/* + Copyright (C) 2009 Alexander Rieder + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + + +#ifndef CANTOR_H +#define CANTOR_H + +#include +#include + +#include + +class QTabWidget; +class KTextEdit; + +namespace Cantor{ +class WorksheetAccessInterface; +} + +namespace KParts{ + class ReadWritePart; +} + +/** + * This is the application "Shell". It has a menubar, toolbar, and + * statusbar but relies on the "Part" to do all the real work. + */ +class CantorShell : public KParts::MainWindow +{ + Q_OBJECT +public: + /** + * Default Constructor + */ + CantorShell(); + + /** + * Default Destructor + */ + ~CantorShell() override = default; + + /** + * Use this method to load whatever file/URL you have + */ + void load(const QUrl& url); + + /** + * checks if at least one usable Backend is installed + */ + bool hasAvailableBackend(); + + Cantor::WorksheetAccessInterface* currentWorksheetAccessInterface(); +protected: + /** + * This method is called when it is time for the app to save its + * properties for session management purposes. + */ + void saveProperties(KConfigGroup &) override; + + /** + * This method is called when this app is restored. The KConfig + * object points to the session management config file that was saved + * with @ref saveProperties + */ + void readProperties(const KConfigGroup &) override; +public Q_SLOTS: + void addWorksheet(); + void addWorksheet(const QString& backendName); + +private Q_SLOTS: + void fileNew(); + void fileOpen(); + void optionsConfigureKeys(); + + void activateWorksheet(int index); + + void setTabCaption(const QString& tab, const QIcon& icon); + void closeTab(int index = -1); + + void showSettings(); + + void downloadExamples(); + void openExample(); + + void updatePanel(); +private: + void setupActions(); + void closeEvent(QCloseEvent*) override; + bool reallyClose(bool checkAllParts = true); + KParts::ReadWritePart* findPart(QWidget* widget); + +private: + QMap m_pluginsVisibility; + QList m_parts; + KParts::ReadWritePart* m_part; + QTabWidget* m_tabWidget; + QList m_panels; + QDockWidget* m_helpDocker; +}; + +#endif // CANTOR_H diff --git a/src/cantor.kcfg b/src/cantor.kcfg new file mode 100644 index 0000000..83354a1 --- /dev/null +++ b/src/cantor.kcfg @@ -0,0 +1,43 @@ + + + cantor_export.h + + + + + + + + + true + + + + true + + + + true + + + + false + + + + true + + + + false + + + + true + + + + diff --git a/src/cantor.knsrc b/src/cantor.knsrc new file mode 100644 index 0000000..2ffc29f --- /dev/null +++ b/src/cantor.knsrc @@ -0,0 +1,7 @@ +[KNewStuff3] +ProvidersUrl=http://download.kde.org/ocs/providers.xml +Categories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +UploadCategories=Cantor (Maxima),Cantor (Sage),Cantor (KAlgebra),Cantor (Qalculate),Cantor (Python 2),Cantor (Python 3),Cantor (Scilab),Cantor (Octave),Cantor (R),Cantor (Lua) +TargetDir=cantor/examples +Uncompress=never +CustomName=true diff --git a/src/cantor_part.cpp b/src/cantor_part.cpp new file mode 100644 index 0000000..aef08c3 --- /dev/null +++ b/src/cantor_part.cpp @@ -0,0 +1,976 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder +*/ + +#include "cantor_part.h" + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "worksheet.h" +#include "worksheetview.h" +#include "searchbar.h" +#include "scripteditor/scripteditorwidget.h" +#include "lib/backend.h" +#include "lib/extension.h" +#include "lib/assistant.h" +#include "lib/panelpluginhandler.h" +#include "lib/panelplugin.h" +#include "lib/worksheetaccess.h" + +#include "settings.h" + + +//A concrete implementation of the WorksheetAccesssInterface +class WorksheetAccessInterfaceImpl : public Cantor::WorksheetAccessInterface +{ + + public: + WorksheetAccessInterfaceImpl(QObject* parent, Worksheet* worksheet) : WorksheetAccessInterface(parent), m_worksheet(worksheet) + { + qDebug()<<"new worksheetaccess interface"; + connect(worksheet, SIGNAL(modified()), this, SIGNAL(modified())); + } + + ~WorksheetAccessInterfaceImpl() override = default; + + QByteArray saveWorksheetToByteArray() override + { + return m_worksheet->saveToByteArray(); + } + + void loadWorksheetFromByteArray(QByteArray* data) override + { + m_worksheet->load(data); + } + + Cantor::Session* session() override + { + return m_worksheet->session(); + } + + void evaluate() override + { + m_worksheet->evaluate(); + } + + void interrupt() override + { + m_worksheet->interrupt(); + } + + private: + Worksheet* m_worksheet; +}; + +CantorPart::CantorPart( QWidget *parentWidget, QObject *parent, const QVariantList & args ): KParts::ReadWritePart(parent), + m_searchBar(nullptr), + m_initProgressDlg(nullptr), + m_showProgressDlg(true), + m_showBackendHelp(nullptr), + m_statusBarBlocked(false), + m_sessionStatusCounter(0) +{ + m_panelHandler=new Cantor::PanelPluginHandler(this); + connect(m_panelHandler, SIGNAL(pluginsChanged()), this, SLOT(pluginsChanged())); + + QString backendName; + if(args.isEmpty()) + backendName=QLatin1String("null"); + else + backendName=args.first().toString(); + + for (const QVariant& arg : args) + { + if (arg.toString() == QLatin1String("--noprogress") ) + { + qWarning()<<"not showing the progress bar by request"; + m_showProgressDlg=false; + } + } + + Cantor::Backend* b=Cantor::Backend::getBackend(backendName); + if(!b) + { + KMessageBox::error(parentWidget, i18n("Backend %1 is not installed", backendName), i18n("Error - Cantor")); + setWidget(new QWidget(parentWidget)); + return; + } + + if (b && !b->isEnabled() && backendName != QLatin1String("null")) + { + KMessageBox::information(parentWidget, i18n("There are some problems with the %1 backend,\n"\ + "please check your configuration or install the needed packages.\n" + "You will only be able to view this worksheet.", backendName), i18n("Cantor")); + setWidget(new QWidget(parentWidget)); + return; + } + + qDebug()<<"Backend "<name()<<" offers extensions: "<extensions(); + + + auto* collection = actionCollection(); + + //central widget + QWidget* widget = new QWidget(parentWidget); + QVBoxLayout* layout = new QVBoxLayout(widget); + m_worksheet=new Worksheet(b, widget); + m_worksheetview=new WorksheetView(m_worksheet, widget); + m_worksheetview->setEnabled(false); //disable input until the session has successfully logged in and emits the ready signal + connect(m_worksheet, SIGNAL(modified()), this, SLOT(setModified())); + connect(m_worksheet, SIGNAL(showHelp(QString)), this, SIGNAL(showHelp(QString))); + connect(m_worksheet, SIGNAL(loaded()), this, SLOT(initialized())); + connect(collection, SIGNAL(inserted(QAction*)), m_worksheet, SLOT(registerShortcut(QAction*))); + layout->addWidget(m_worksheetview); + setWidget(widget); + + //create WorksheetAccessInterface, used at the moment by LabPlot only to access Worksheet's API + Cantor::WorksheetAccessInterface* iface = new WorksheetAccessInterfaceImpl(this, m_worksheet); + Q_UNUSED(iface); + + //initialize actions + m_worksheet->createActions(collection); + + KStandardAction::saveAs(this, SLOT(fileSaveAs()), collection); + m_save = KStandardAction::save(this, SLOT(save()), collection); + m_save->setPriority(QAction::LowPriority); + + QAction* savePlain = new QAction(i18n("Save Plain Text"), collection); + collection->addAction(QLatin1String("file_save_plain"), savePlain); + savePlain->setIcon(QIcon::fromTheme(QLatin1String("document-save"))); + connect(savePlain, SIGNAL(triggered()), this, SLOT(fileSavePlain())); + + QAction* undo = KStandardAction::undo(m_worksheet, SIGNAL(undo()), collection); + undo->setPriority(QAction::LowPriority); + connect(m_worksheet, SIGNAL(undoAvailable(bool)), undo, SLOT(setEnabled(bool))); + m_editActions.push_back(undo); + + QAction* redo = KStandardAction::redo(m_worksheet, SIGNAL(redo()), collection); + redo->setPriority(QAction::LowPriority); + connect(m_worksheet, SIGNAL(redoAvailable(bool)), redo, SLOT(setEnabled(bool))); + m_editActions.push_back(redo); + + QAction* cut = KStandardAction::cut(m_worksheet, SIGNAL(cut()), collection); + cut->setPriority(QAction::LowPriority); + connect(m_worksheet, SIGNAL(cutAvailable(bool)), cut, SLOT(setEnabled(bool))); + m_editActions.push_back(cut); + + QAction* copy = KStandardAction::copy(m_worksheet, SIGNAL(copy()), collection); + copy->setPriority(QAction::LowPriority); + connect(m_worksheet, SIGNAL(copyAvailable(bool)), copy, SLOT(setEnabled(bool))); + + QAction* paste = KStandardAction::paste(m_worksheet, SLOT(paste()), collection); + paste->setPriority(QAction::LowPriority); + connect(m_worksheet, SIGNAL(pasteAvailable(bool)), paste, SLOT(setEnabled(bool))); + m_editActions.push_back(paste); + + QAction* find = KStandardAction::find(this, SLOT(showSearchBar()), collection); + find->setPriority(QAction::LowPriority); + + QAction* replace = KStandardAction::replace(this, SLOT(showExtendedSearchBar()), collection); + replace->setPriority(QAction::LowPriority); + m_editActions.push_back(replace); + + m_findNext = KStandardAction::findNext(this, SLOT(findNext()), collection); + m_findNext->setEnabled(false); + + m_findPrev = KStandardAction::findPrev(this, SLOT(findPrev()), collection); + m_findPrev->setEnabled(false); + + QAction* latexExport = new QAction(i18n("Export to LaTeX"), collection); + collection->addAction(QLatin1String("file_export_latex"), latexExport); + latexExport->setIcon(QIcon::fromTheme(QLatin1String("document-export"))); + connect(latexExport, SIGNAL(triggered()), this, SLOT(exportToLatex())); + + QAction* print = KStandardAction::print(this, SLOT(print()), collection); + print->setPriority(QAction::LowPriority); + + QAction* printPreview = KStandardAction::printPreview(this, SLOT(printPreview()), collection); + printPreview->setPriority(QAction::LowPriority); + + KStandardAction::zoomIn(m_worksheetview, SLOT(zoomIn()), collection); + KStandardAction::zoomOut(m_worksheetview, SLOT(zoomOut()), collection); + KStandardAction::actualSize(m_worksheetview, SLOT(actualSize()), collection); + + m_evaluate = new QAction(i18n("Evaluate Worksheet"), collection); + collection->addAction(QLatin1String("evaluate_worksheet"), m_evaluate); + m_evaluate->setIcon(QIcon::fromTheme(QLatin1String("system-run"))); + collection->setDefaultShortcut(m_evaluate, Qt::CTRL+Qt::Key_E); + connect(m_evaluate, SIGNAL(triggered()), this, SLOT(evaluateOrInterrupt())); + m_editActions.push_back(m_evaluate); + + m_typeset = new KToggleAction(i18n("Typeset using LaTeX"), collection); + m_typeset->setChecked(Settings::self()->typesetDefault()); + // Disable until login, because we use session command for this action + m_typeset->setEnabled(false); + collection->addAction(QLatin1String("enable_typesetting"), m_typeset); + connect(m_typeset, SIGNAL(toggled(bool)), this, SLOT(enableTypesetting(bool))); + + m_highlight = new KToggleAction(i18n("Syntax Highlighting"), collection); + m_highlight->setChecked(Settings::self()->highlightDefault()); + collection->addAction(QLatin1String("enable_highlighting"), m_highlight); + connect(m_highlight, SIGNAL(toggled(bool)), m_worksheet, SLOT(enableHighlighting(bool))); + + m_completion = new KToggleAction(i18n("Completion"), collection); + m_completion->setChecked(Settings::self()->completionDefault()); + collection->addAction(QLatin1String("enable_completion"), m_completion); + connect(m_completion, SIGNAL(toggled(bool)), m_worksheet, SLOT(enableCompletion(bool))); + + m_exprNumbering = new KToggleAction(i18n("Line Numbers"), collection); + m_exprNumbering->setChecked(Settings::self()->expressionNumberingDefault()); + collection->addAction(QLatin1String("enable_expression_numbers"), m_exprNumbering); + connect(m_exprNumbering, SIGNAL(toggled(bool)), m_worksheet, SLOT(enableExpressionNumbering(bool))); + + m_animateWorksheet = new KToggleAction(i18n("Animate Worksheet"), collection); + m_animateWorksheet->setChecked(Settings::self()->animationDefault()); + collection->addAction(QLatin1String("enable_animations"), m_animateWorksheet); + connect(m_animateWorksheet, SIGNAL(toggled(bool)), m_worksheet, SLOT(enableAnimations(bool))); + + m_restart = new QAction(i18n("Restart Backend"), collection); + collection->addAction(QLatin1String("restart_backend"), m_restart); + m_restart->setIcon(QIcon::fromTheme(QLatin1String("system-reboot"))); + connect(m_restart, SIGNAL(triggered()), this, SLOT(restartBackend())); + m_restart->setEnabled(false); // No need show restart button before login + m_editActions.push_back(m_restart); + + QAction* evaluateCurrent = new QAction(QIcon::fromTheme(QLatin1String("media-playback-start")), i18n("Evaluate Entry"), collection); + collection->addAction(QLatin1String("evaluate_current"), evaluateCurrent); + collection->setDefaultShortcut(evaluateCurrent, Qt::SHIFT + Qt::Key_Return); + connect(evaluateCurrent, SIGNAL(triggered()), m_worksheet, SLOT(evaluateCurrentEntry())); + m_editActions.push_back(evaluateCurrent); + + QAction* insertCommandEntry = new QAction(QIcon::fromTheme(QLatin1String("run-build")), i18n("Insert Command Entry"), collection); + collection->addAction(QLatin1String("insert_command_entry"), insertCommandEntry); + collection->setDefaultShortcut(insertCommandEntry, Qt::CTRL + Qt::Key_Return); + connect(insertCommandEntry, SIGNAL(triggered()), m_worksheet, SLOT(insertCommandEntry())); + m_editActions.push_back(insertCommandEntry); + + QAction* insertTextEntry = new QAction(QIcon::fromTheme(QLatin1String("draw-text")), i18n("Insert Text Entry"), collection); + collection->addAction(QLatin1String("insert_text_entry"), insertTextEntry); + connect(insertTextEntry, SIGNAL(triggered()), m_worksheet, SLOT(insertTextEntry())); + m_editActions.push_back(insertTextEntry); + +#ifdef Discount_FOUND + QAction* insertMarkdownEntry = new QAction(QIcon::fromTheme(QLatin1String("text-x-markdown")), i18n("Insert Markdown Entry"), collection); + collection->addAction(QLatin1String("insert_markdown_entry"), insertMarkdownEntry); + connect(insertMarkdownEntry, SIGNAL(triggered()), m_worksheet, SLOT(insertMarkdownEntry())); + m_editActions.push_back(insertMarkdownEntry); +#endif + +#ifdef WITH_EPS + QAction* insertLatexEntry = new QAction(QIcon::fromTheme(QLatin1String("text-x-tex")), i18n("Insert Latex Entry"), collection); + collection->addAction(QLatin1String("insert_latex_entry"), insertLatexEntry); + connect(insertLatexEntry, SIGNAL(triggered()), m_worksheet, SLOT(insertLatexEntry())); + m_editActions.push_back(insertLatexEntry); +#endif + + QAction* insertPageBreakEntry = new QAction(QIcon::fromTheme(QLatin1String("go-next-view-page")), i18n("Insert Page Break"), collection); + collection->addAction(QLatin1String("insert_page_break_entry"), insertPageBreakEntry); + connect(insertPageBreakEntry, SIGNAL(triggered()), m_worksheet, SLOT(insertPageBreakEntry())); + m_editActions.push_back(insertPageBreakEntry); + + QAction* insertImageEntry = new QAction(QIcon::fromTheme(QLatin1String("image-x-generic")), i18n("Insert Image"), collection); + collection->addAction(QLatin1String("insert_image_entry"), insertImageEntry); + connect(insertImageEntry, SIGNAL(triggered()), m_worksheet, SLOT(insertImageEntry())); + m_editActions.push_back(insertImageEntry); + + QAction* removeCurrent = new QAction(QIcon::fromTheme(QLatin1String("edit-delete")), i18n("Remove current Entry"), collection); + collection->addAction(QLatin1String("remove_current"), removeCurrent); + collection->setDefaultShortcut(removeCurrent, Qt::ShiftModifier + Qt::Key_Delete); + connect(removeCurrent, SIGNAL(triggered()), m_worksheet, SLOT(removeCurrentEntry())); + m_editActions.push_back(removeCurrent); + + m_showBackendHelp = new QAction(i18n("Show %1 Help", b->name()) , collection); + m_showBackendHelp->setIcon(QIcon::fromTheme(QLatin1String("help-contents"))); + collection->addAction(QLatin1String("backend_help"), m_showBackendHelp); + connect(m_showBackendHelp, SIGNAL(triggered()), this, SLOT(showBackendHelp())); + + // Disabled, because uploading to kde store from program don't work + // See https://phabricator.kde.org/T9980 for details + // If this situation will changed, then uncomment this action + /* + QAction* publishWorksheet = new QAction(i18n("Publish Worksheet"), collection); + publishWorksheet->setIcon(QIcon::fromTheme(QLatin1String("get-hot-new-stuff"))); + collection->addAction(QLatin1String("file_publish_worksheet"), publishWorksheet); + connect(publishWorksheet, SIGNAL(triggered()), this, SLOT(publishWorksheet())); + */ + + KToggleAction* showEditor = new KToggleAction(i18n("Show Script Editor"), collection); + showEditor->setChecked(false); + collection->addAction(QLatin1String("show_editor"), showEditor); + connect(showEditor, SIGNAL(toggled(bool)), this, SLOT(showScriptEditor(bool))); + showEditor->setEnabled(b->extensions().contains(QLatin1String("ScriptExtension"))); + + QAction* showCompletion = new QAction(i18n("Show Completion"), collection); + collection->addAction(QLatin1String("show_completion"), showCompletion); + QList showCompletionShortcuts; + showCompletionShortcuts << Qt::Key_Tab << Qt::CTRL + Qt::Key_Space; + collection->setDefaultShortcuts(showCompletion, showCompletionShortcuts); + connect(showCompletion, SIGNAL(triggered()), m_worksheet, SLOT(showCompletion())); + m_editActions.push_back(showCompletion); + + // set our XML-UI resource file + setXMLFile(QLatin1String("cantor_part.rc")); + + // we are read-write by default + setReadWrite(true); + + // we are not modified since we haven't done anything yet + setModified(false); + + initialized(); +} + +CantorPart::~CantorPart() +{ + if (m_scriptEditor) + { + disconnect(m_scriptEditor, SIGNAL(destroyed()), this, SLOT(scriptEditorClosed())); + delete m_scriptEditor; + } + if (m_searchBar) + delete m_searchBar; +} + +void CantorPart::setReadWrite(bool rw) +{ + // notify your internal widget of the read-write state + m_worksheetview->setInteractive(rw); + + ReadWritePart::setReadWrite(rw); +} + +void CantorPart::setReadOnly() +{ + for (QAction* action : m_editActions) + action->setEnabled(false); + + if (m_showBackendHelp) + { + m_showBackendHelp->setEnabled(false); + m_showBackendHelp->setVisible(false); + } +} + +void CantorPart::setModified(bool modified) +{ + // get a handle on our Save action and make sure it is valid + if (!m_save) + return; + + // if so, we either enable or disable it based on the current state + m_save->setEnabled(modified); + + // in any event, we want our parent to do it's thing + ReadWritePart::setModified(modified); +} + +KAboutData& CantorPart::createAboutData() +{ + // the non-i18n name here must be the same as the directory in + // which the part's rc file is installed ('partrcdir' in the Makefile) + static KAboutData about(QLatin1String("cantorpart"), + QLatin1String("Cantor"), + QLatin1String(CANTOR_VERSION), + i18n("CantorPart"), + KAboutLicense::GPL, + i18n("(C) 2009-2015 Alexander Rieder"), + QString(), + QLatin1String("http://edu.kde.org/cantor")); + + about.addAuthor( i18n("Alexander Rieder"), QString(), QLatin1String("alexanderrieder@gmail.com") ); + return about; +} + +bool CantorPart::openFile() +{ + //don't crash if for some reason the worksheet is invalid + if(m_worksheet==nullptr) + { + qWarning()<<"trying to open in an invalid cantor part"; + return false; + } + + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); + QElapsedTimer timer; + timer.start(); + const bool rc = m_worksheet->load(localFilePath()); + QApplication::restoreOverrideCursor(); + + if (rc) { + qDebug()<< "Worksheet successfully loaded in " << (float)timer.elapsed()/1000 << " seconds)."; + updateCaption(); + // We modified, but it we load file now, so no need in save option + setModified(false); + } + + return rc; +} + +bool CantorPart::saveFile() +{ + // if we aren't read-write, return immediately + if (isReadWrite() == false) + return false; + + qDebug()<<"saving to: "<save( localFilePath() ); + setModified(false); + + return true; +} + +void CantorPart::fileSaveAs() +{ + // this slot is called whenever the File->Save As menu is selected + QString worksheetFilter = i18n("Cantor Worksheet (*.cws)"); + QString filter = worksheetFilter; + + if (!m_worksheet->isReadOnly()) + { + //if the backend supports scripts, also append their scriptFile endings to the filter + Cantor::Backend * const backend=m_worksheet->session()->backend(); + if (backend->extensions().contains(QLatin1String("ScriptExtension"))) + { + Cantor::ScriptExtension* e=dynamic_cast(backend->extension(QLatin1String("ScriptExtension"))); + filter+=QLatin1String(";;")+e->scriptFileFilter(); + } + } + + QString selectedFilter; + QString file_name = QFileDialog::getSaveFileName(widget(), i18n("Save as"), QString(), filter, &selectedFilter); + if (file_name.isEmpty()) + return; + + //depending on user's selection, save as a worksheet or as a plain script file + if (selectedFilter == worksheetFilter) + { + if (!file_name.endsWith(QLatin1String(".cws"))) + file_name += QLatin1String(".cws"); + saveAs(QUrl::fromLocalFile(file_name)); + } + else + m_worksheet->savePlain(file_name); + + updateCaption(); +} + +void CantorPart::fileSavePlain() +{ + QString file_name = QFileDialog::getSaveFileName(widget(), i18n("Save"), QString(), QString()); + if (!file_name.isEmpty()) + m_worksheet->savePlain(file_name); +} + +void CantorPart::exportToLatex() +{ + QString file_name = QFileDialog::getSaveFileName(widget(), i18n("Export to LaTeX"), QString(), QString()); + + if (file_name.isEmpty() == false) + { + if (!file_name.endsWith(QLatin1String(".tex"))) + file_name += QLatin1String(".tex"); + m_worksheet->saveLatex(file_name); + } +} + +void CantorPart::guiActivateEvent( KParts::GUIActivateEvent * event ) +{ + KParts::ReadWritePart::guiActivateEvent(event); + if(event->activated()) + { + if(m_scriptEditor) + m_scriptEditor->show(); + }else + { + if(m_scriptEditor) + m_scriptEditor->hide(); + } +} + +void CantorPart::evaluateOrInterrupt() +{ + qDebug()<<"evalorinterrupt"; + if(m_worksheet->isRunning()) + m_worksheet->interrupt(); + else + m_worksheet->evaluate(); +} +void CantorPart::restartBackend() +{ + bool restart = false; + if (Settings::self()->warnAboutSessionRestart()) + { + KMessageBox::ButtonCode tmp; + + // If we want the question box, but it is disable, then enable it + if (!KMessageBox::shouldBeShownYesNo(QLatin1String("WarnAboutSessionRestart"), tmp)) + KMessageBox::enableMessage(QLatin1String("WarnAboutSessionRestart")); + + const QString& name = m_worksheet->session()->backend()->name(); + KMessageBox::ButtonCode rc = KMessageBox::questionYesNo(widget(), + i18n("All the available calculation results will be lost. Do you really want to restart %1?", name), + i18n("Restart %1?", name), + KStandardGuiItem::yes(), + KStandardGuiItem::no(), + QLatin1String("WarnAboutSessionRestart") + ); + + // Update setting's value + Settings::self()->setWarnAboutSessionRestart( + KMessageBox::shouldBeShownYesNo(QLatin1String("WarnAboutSessionRestart"), tmp)); + Settings::self()->save(); + + restart = rc == KMessageBox::ButtonCode::Yes; + } + else + { + KMessageBox::ButtonCode rc; + KMessageBox::shouldBeShownYesNo(QLatin1String("WarnAboutSessionRestart"), rc); + restart = rc == KMessageBox::ButtonCode::Yes; + } + + if (restart) + { + m_worksheet->session()->logout(); + m_worksheet->loginToSession(); + } +} + +void CantorPart::worksheetStatusChanged(Cantor::Session::Status status) +{ + qDebug()<<"wsStatusChange"<session()->status() == Cantor::Session::Running && m_sessionStatusCounter == count) + { + m_evaluate->setText(i18n("Interrupt")); + m_evaluate->setShortcut(Qt::CTRL+Qt::Key_I); + m_evaluate->setIcon(QIcon::fromTheme(QLatin1String("dialog-close"))); + setStatusMessage(i18n("Calculating...")); + } + }); + }else if (status==Cantor::Session::Done) + { + m_evaluate->setText(i18n("Evaluate Worksheet")); + m_evaluate->setShortcut(Qt::CTRL+Qt::Key_E); + m_evaluate->setIcon(QIcon::fromTheme(QLatin1String("system-run"))); + + setStatusMessage(i18n("Ready")); + } +} + +void CantorPart::showSessionError(const QString& message) +{ + qDebug()<<"Error: "<isReadOnly()) + { + connect(m_worksheet->session(), SIGNAL(statusChanged(Cantor::Session::Status)), this, SLOT(worksheetStatusChanged(Cantor::Session::Status))); + connect(m_worksheet->session(), SIGNAL(loginStarted()),this, SLOT(worksheetSessionLoginStarted())); + connect(m_worksheet->session(), SIGNAL(loginDone()),this, SLOT(worksheetSessionLoginDone())); + connect(m_worksheet->session(), SIGNAL(error(QString)), this, SLOT(showSessionError(QString))); + + loadAssistants(); + m_panelHandler->setSession(m_worksheet->session()); + adjustGuiToSession(); + + // Don't set modification flag, if we add command entry in empty worksheet + const bool modified = this->isModified(); + if (m_worksheet->isEmpty()) + m_worksheet->appendCommandEntry(); + setModified(modified); + } + else + { + setReadOnly(); + // Clear assistants + for (KXMLGUIClient* client: childClients()) + { + Cantor::Assistant* assistant = dynamic_cast(client); + if (assistant) + { + factory()->removeClient(client); + removeChildClient(client); + assistant->deleteLater(); + } + } + } + + m_worksheetview->setEnabled(true); + m_worksheetview->setFocus(); + + setStatusMessage(i18n("Initialization complete")); + updateCaption(); +} + +void CantorPart::worksheetSessionLoginStarted() { + setStatusMessage(i18n("Initializing...")); + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); +} + +void CantorPart::worksheetSessionLoginDone() { + setStatusMessage(i18n("Ready")); + + m_typeset->setEnabled(true); + m_restart->setEnabled(true); + + QApplication::restoreOverrideCursor(); +} + +void CantorPart::enableTypesetting(bool enable) +{ + m_worksheet->session()->setTypesettingEnabled(enable); +} + +void CantorPart::showBackendHelp() +{ + qDebug()<<"showing backends help"; + Cantor::Backend* backend=m_worksheet->session()->backend(); + QUrl url = backend->helpUrl(); + qDebug()<<"launching url "<isReadOnly()) + emit setCaption(filename, QIcon::fromTheme(m_worksheet->session()->backend()->icon())); + else + emit setCaption(filename+QLatin1Char(' ')+i18n("[read-only]"), QIcon()); +} + +void CantorPart::pluginsChanged() +{ + for (auto* plugin : m_panelHandler->plugins()) + connect(plugin, SIGNAL(requestRunCommand(QString)), this, SLOT(runCommand(QString))); +} + +void CantorPart::loadAssistants() +{ + qDebug()<<"loading assistants..."; + + QStringList assistantDirs; + for (const QString& dir : QCoreApplication::libraryPaths()) + assistantDirs << dir + QDir::separator() + QLatin1String("cantor/assistants"); + + QPluginLoader loader; + for (const QString& dir : assistantDirs) { + + qDebug() << "dir: " << dir; + QStringList assistants; + QDir assistantDir = QDir(dir); + + assistants = assistantDir.entryList(); + + for (const QString& assistant : assistants) { + if (assistant==QLatin1String(".") || assistant==QLatin1String("..")) + continue; + + loader.setFileName(dir + QDir::separator() + assistant); + + if (!loader.load()){ + qDebug() << "Error while loading assistant: " << assistant; + continue; + } + + KPluginFactory* factory = KPluginLoader(loader.fileName()).factory(); + Cantor::Assistant* plugin = factory->create(this); + + Cantor::Backend* backend=worksheet()->session()->backend(); + + KPluginMetaData info(loader); + plugin->setPluginInfo(info); + plugin->setBackend(backend); + + bool supported=true; + for (const QString& req : plugin->requiredExtensions()) + supported=supported && backend->extensions().contains(req); + + if(supported) + { + qDebug() << "plugin " << info.name() << " is supported by " << backend->name() << ", requires extensions " << plugin->requiredExtensions(); + plugin->initActions(); + connect(plugin, SIGNAL(requested()), this, SLOT(runAssistant())); + }else + { + qDebug() << "plugin " << info.name() << " is not supported by "<name(); + removeChildClient(plugin); + plugin->deleteLater(); + } + } + } +} + +void CantorPart::runAssistant() +{ + Cantor::Assistant* a=qobject_cast(sender()); + QStringList cmds=a->run(widget()); + qDebug()<appendCommandEntry(cmd); +} + +void CantorPart::showSearchBar() +{ + if (!m_searchBar) { + m_searchBar = new SearchBar(widget(), m_worksheet); + widget()->layout()->addWidget(m_searchBar); + connect(m_searchBar, SIGNAL(destroyed(QObject*)), + this, SLOT(searchBarDeleted())); + } + + m_findNext->setEnabled(true); + m_findPrev->setEnabled(true); + + m_searchBar->showStandard(); + m_searchBar->setFocus(); +} + +void CantorPart::showExtendedSearchBar() +{ + if (!m_searchBar) { + m_searchBar = new SearchBar(widget(), m_worksheet); + widget()->layout()->addWidget(m_searchBar); + connect(m_searchBar, SIGNAL(destroyed(QObject*)), + this, SLOT(searchBarDeleted())); + } + + m_findNext->setEnabled(true); + m_findPrev->setEnabled(true); + + m_searchBar->showExtended(); + m_searchBar->setFocus(); +} + +void CantorPart::findNext() +{ + if (m_searchBar) + m_searchBar->next(); +} + +void CantorPart::findPrev() +{ + if (m_searchBar) + m_searchBar->prev(); +} + +void CantorPart::searchBarDeleted() +{ + m_searchBar = nullptr; + m_findNext->setEnabled(false); + m_findPrev->setEnabled(false); +} + +void CantorPart::adjustGuiToSession() +{ + Cantor::Backend::Capabilities capabilities = m_worksheet->session()->backend()->capabilities(); +#ifdef WITH_EPS + m_typeset->setVisible(capabilities.testFlag(Cantor::Backend::LaTexOutput)); +#else + m_typeset->setVisible(false); +#endif + m_completion->setVisible(capabilities.testFlag(Cantor::Backend::Completion)); + + //this is 0 on the first call + if(m_showBackendHelp) + m_showBackendHelp->setText(i18n("Show %1 Help", m_worksheet->session()->backend()->name())); +} + +void CantorPart::publishWorksheet() +{ + int ret = KMessageBox::questionYesNo(widget(), + i18n("Do you want to upload current Worksheet to public web server?"), + i18n("Question - Cantor")); + if (ret != KMessageBox::Yes) return; + + if (isModified()||url().isEmpty()) + { + ret = KMessageBox::warningContinueCancel(widget(), + i18n("The Worksheet is not saved. You should save it before uploading."), + i18n("Warning - Cantor"), KStandardGuiItem::save(), KStandardGuiItem::cancel()); + if (ret != KMessageBox::Continue) return; + if (!saveFile()) return; + } + + qDebug()<<"uploading file "<session()->backend()->id().toLower()), widget()); + dialog.setUploadFile(url()); + dialog.exec(); +} + +void CantorPart::print() +{ + QPrinter printer; + QPointer dialog = new QPrintDialog(&printer, widget()); + + // TODO: Re-enable print selection + //if (m_worksheet->textCursor().hasSelection()) + // dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection); + + if (dialog->exec() == QDialog::Accepted) + m_worksheet->print(&printer); + + delete dialog; +} + +void CantorPart::printPreview() +{ + QPrintPreviewDialog *dialog = new QPrintPreviewDialog(widget()); + connect(dialog, SIGNAL(paintRequested(QPrinter*)), m_worksheet, SLOT(print(QPrinter*))); + dialog->exec(); +} + +void CantorPart::showScriptEditor(bool show) +{ + if(show) + { + if (m_scriptEditor) + { + return; + } + Cantor::ScriptExtension* scriptE=dynamic_cast(m_worksheet->session()->backend()->extension(QLatin1String("ScriptExtension"))); + if (!scriptE) + { + return; + } + m_scriptEditor=new ScriptEditorWidget(scriptE->scriptFileFilter(), scriptE->highlightingMode(), widget()->window()); + connect(m_scriptEditor, SIGNAL(runScript(QString)), this, SLOT(runScript(QString))); + connect(m_scriptEditor, SIGNAL(destroyed()), this, SLOT(scriptEditorClosed())); + m_scriptEditor->show(); + }else + { + m_scriptEditor->deleteLater(); + } +} + +void CantorPart::scriptEditorClosed() +{ + QAction* showEditor = actionCollection()->action(QLatin1String("show_editor")); + if (showEditor) + { + showEditor->setChecked(false); + } +} + +void CantorPart::runScript(const QString& file) +{ + Cantor::Backend* backend=m_worksheet->session()->backend(); + if(!backend->extensions().contains(QLatin1String("ScriptExtension"))) + { + KMessageBox::error(widget(), i18n("This backend does not support scripts."), i18n("Error - Cantor")); + return; + } + + Cantor::ScriptExtension* scriptE=dynamic_cast(backend->extension(QLatin1String("ScriptExtension"))); + m_worksheet->appendCommandEntry(scriptE->runExternalScript(file)); +} + +void CantorPart::blockStatusBar() +{ + m_statusBarBlocked=true; +} + +void CantorPart::unblockStatusBar() +{ + m_statusBarBlocked=false; + if(!m_cachedStatusMessage.isNull()) + setStatusMessage(m_cachedStatusMessage); + m_cachedStatusMessage.clear(); +} + +void CantorPart::setStatusMessage(const QString& message) +{ + if(!m_statusBarBlocked) + emit setStatusBarText(message); + else + m_cachedStatusMessage=message; +} + +void CantorPart::showImportantStatusMessage(const QString& message) +{ + setStatusMessage(message); + blockStatusBar(); + QTimer::singleShot(3000, this, SLOT(unblockStatusBar())); +} + +K_PLUGIN_FACTORY_WITH_JSON(CantorPartFactory, "cantor_part.json", registerPlugin();) +#include "cantor_part.moc" diff --git a/src/cantor_part.h b/src/cantor_part.h new file mode 100644 index 0000000..f35cdf8 --- /dev/null +++ b/src/cantor_part.h @@ -0,0 +1,185 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder +*/ + +#ifndef CANTORPART_H +#define CANTORPART_H + +#include +#include + +#include +#include + +class QWidget; +class Worksheet; +class WorksheetView; +class SarchBar; +class SearchBar; +class ScriptEditorWidget; +class KAboutData; +class QAction; +class KToggleAction; +class QProgressDialog; + +namespace Cantor{ + class PanelPluginHandler; +} + +/** + * This is a "Part". It that does all the real work in a KPart + * application. + * + * @short Main Part + * @author Alexander Rieder + */ +class CantorPart : public KParts::ReadWritePart +{ + Q_OBJECT +public: + /** + * Default constructor + */ + CantorPart(QWidget *parentWidget,QObject *parent, const QVariantList &args); + + /** + * Destructor + */ + ~CantorPart() override; + + /** + * This is a virtual function inherited from KParts::ReadWritePart. + * A shell will use this to inform this Part if it should act + * read-only + */ + void setReadWrite(bool rw) override; + + /** + * Reimplemented to disable and enable Save action + */ + void setModified(bool modified) override; + + KAboutData& createAboutData(); + + Worksheet* worksheet(); + +Q_SIGNALS: + void setCaption(const QString& caption, const QIcon& icon); + void showHelp(const QString& help); + +protected: + /** + * This must be implemented by each part + */ + bool openFile() override; + + /** + * This must be implemented by each read-write part + */ + bool saveFile() override; + + /** + * Called when this part becomes the active one, + * or if it looses activity + **/ + void guiActivateEvent( KParts::GUIActivateEvent * event ) override; + + + void loadAssistants(); + void adjustGuiToSession(); + + void setReadOnly(); + +protected Q_SLOTS: + void fileSaveAs(); + void fileSavePlain(); + void exportToLatex(); + void evaluateOrInterrupt(); + void restartBackend(); + void enableTypesetting(bool enable); + void showBackendHelp(); + void print(); + void printPreview(); + + void worksheetStatusChanged(Cantor::Session::Status stauts); + void showSessionError(const QString& error); + void worksheetSessionLoginStarted(); + void worksheetSessionLoginDone(); + void initialized(); + void updateCaption(); + + void pluginsChanged(); + void runCommand(const QString& value); + + void runAssistant(); + void publishWorksheet(); + + void showScriptEditor(bool show); + void scriptEditorClosed(); + void runScript(const QString& file); + + void showSearchBar(); + void showExtendedSearchBar(); + void findNext(); + void findPrev(); + void searchBarDeleted(); + + /** sets the status message, or cached it, if the StatusBar is blocked. + * Use this method instead of "emit setStatusBarText" + */ + void setStatusMessage(const QString& message); + /** Shows an important status message. It makes sure the message is displayed, + * by blocking the statusbarText for 3 seconds + */ + void showImportantStatusMessage(const QString& message); + /** Blocks the StatusBar for new messages, so the currently shown one won't be overridden + */ + void blockStatusBar(); + /** Removes the block from the StatusBar, and shows the last one of the StatusMessages that + where set during the block + **/ + void unblockStatusBar(); +private: + Worksheet *m_worksheet; + WorksheetView *m_worksheetview; + SearchBar *m_searchBar; + QPointer m_scriptEditor; + Cantor::PanelPluginHandler* m_panelHandler; + + QProgressDialog* m_initProgressDlg; + bool m_showProgressDlg; + QAction * m_evaluate; + QAction * m_restart; + QAction * m_save; + QAction * m_findNext; + QAction * m_findPrev; + KToggleAction* m_typeset; + KToggleAction* m_highlight; + KToggleAction* m_completion; + KToggleAction* m_exprNumbering; + KToggleAction* m_animateWorksheet; + QAction * m_showBackendHelp; + QVector m_editActions; + + QString m_cachedStatusMessage; + bool m_statusBarBlocked; + unsigned int m_sessionStatusCounter; +}; + +#endif // CANTORPART_H diff --git a/src/cantor_part.json b/src/cantor_part.json new file mode 100644 index 0000000..b321d4d --- /dev/null +++ b/src/cantor_part.json @@ -0,0 +1,37 @@ +{ + "KPlugin": { + "Name": "CantorPart", + "Name[ca@valencia]": "CantorPart", + "Name[ca]": "CantorPart", + "Name[cs]": "CantorPart", + "Name[da]": "CantorPart", + "Name[de]": "CantorPart", + "Name[el]": "CantorPart", + "Name[en_GB]": "CantorPart", + "Name[es]": "CantorPart", + "Name[et]": "Cantori komponent", + "Name[fi]": "CantorPart", + "Name[fr]": "Module Cantor", + "Name[gl]": "CantorPart", + "Name[it]": "CantorPart", + "Name[nl]": "CantorPart", + "Name[nn]": "Cantor-del", + "Name[pl]": "ModułCantor", + "Name[pt]": "CantorPart", + "Name[pt_BR]": "Componente do Cantor", + "Name[ru]": "Компонент Cantor", + "Name[sk]": "CantorPart", + "Name[sl]": "CantorPart", + "Name[sv]": "Cantor-delprogram", + "Name[tr]": "CantorPart", + "Name[uk]": "CantorPart", + "Name[x-test]": "xxCantorPartxx", + "Name[zh_CN]": "Cantor 组件", + "Name[zh_TW]": "Cantor 部件", + "ServiceTypes": [ + "KParts/ReadOnlyPart", + "KParts/ReadWritePart" + ] + }, + "MimeType": "application/x-cantor;" +} diff --git a/src/cantor_part.rc b/src/cantor_part.rc new file mode 100644 index 0000000..6ff4638 --- /dev/null +++ b/src/cantor_part.rc @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + &Edit + + + + + + + + + + + + + &View + + + + + + &Worksheet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cantor_scripteditor.rc b/src/cantor_scripteditor.rc new file mode 100644 index 0000000..dd9a33d --- /dev/null +++ b/src/cantor_scripteditor.rc @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/cantor_shell.rc b/src/cantor_shell.rc new file mode 100644 index 0000000..6ed96ce --- /dev/null +++ b/src/cantor_shell.rc @@ -0,0 +1,44 @@ + + + + &File + + &New + + + + + + + + + + + + &Edit + + + &View + + Panels + + + + + &Settings + + + + + + + + + + + + + + + + diff --git a/src/commandentry.cpp b/src/commandentry.cpp new file mode 100644 index 0000000..b0f3404 --- /dev/null +++ b/src/commandentry.cpp @@ -0,0 +1,1136 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + Copyright (C) 2018 Alexander Semke + */ + +#include "commandentry.h" +#include "resultitem.h" +#include "loadedexpression.h" +#include "lib/result.h" +#include "lib/helpresult.h" +#include "lib/completionobject.h" +#include "lib/syntaxhelpobject.h" +#include "lib/session.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +const QString CommandEntry::Prompt=QLatin1String(">>> "); +const double CommandEntry::HorizontalSpacing = 4; +const double CommandEntry::VerticalSpacing = 4; + +static const int colorsCount = 26; +static QColor colors[colorsCount] = {QColor(255,255,255), QColor(0,0,0), + QColor(192,0,0), QColor(255,0,0), QColor(255,192,192), //red + QColor(0,192,0), QColor(0,255,0), QColor(192,255,192), //green + QColor(0,0,192), QColor(0,0,255), QColor(192,192,255), //blue + QColor(192,192,0), QColor(255,255,0), QColor(255,255,192), //yellow + QColor(0,192,192), QColor(0,255,255), QColor(192,255,255), //cyan + QColor(192,0,192), QColor(255,0,255), QColor(255,192,255), //magenta + QColor(192,88,0), QColor(255,128,0), QColor(255,168,88), //orange + QColor(128,128,128), QColor(160,160,160), QColor(195,195,195) //grey + }; + + +CommandEntry::CommandEntry(Worksheet* worksheet) : WorksheetEntry(worksheet), + m_promptItem(new WorksheetTextItem(this, Qt::NoTextInteraction)), + m_commandItem(new WorksheetTextItem(this, Qt::TextEditorInteraction)), + m_errorItem(nullptr), + m_expression(nullptr), + m_completionObject(nullptr), + m_syntaxHelpObject(nullptr), + m_evaluationOption(DoNothing), + m_menusInitialized(false), + m_backgroundColorActionGroup(nullptr), + m_backgroundColorMenu(nullptr), + m_textColorActionGroup(nullptr), + m_textColorMenu(nullptr), + m_fontMenu(nullptr) +{ + + m_promptItem->setPlainText(Prompt); + m_promptItem->setItemDragable(true); + m_commandItem->enableCompletion(true); + + KColorScheme scheme = KColorScheme(QPalette::Normal, KColorScheme::View); + m_commandItem->setBackgroundColor(scheme.background(KColorScheme::AlternateBackground).color()); + + m_promptItemAnimation = new QPropertyAnimation(m_promptItem, "opacity"); + m_promptItemAnimation->setDuration(600); + m_promptItemAnimation->setStartValue(1); + m_promptItemAnimation->setKeyValueAt(0.5, 0); + m_promptItemAnimation->setEndValue(1); + connect(m_promptItemAnimation, &QPropertyAnimation::finished, this, &CommandEntry::animatePromptItem); + + connect(m_commandItem, &WorksheetTextItem::tabPressed, this, &CommandEntry::showCompletion); + connect(m_commandItem, &WorksheetTextItem::backtabPressed, this, &CommandEntry::selectPreviousCompletion); + connect(m_commandItem, &WorksheetTextItem::applyCompletion, this, &CommandEntry::applySelectedCompletion); + connect(m_commandItem, SIGNAL(execute()), this, SLOT(evaluate())); + connect(m_commandItem, &WorksheetTextItem::moveToPrevious, this, &CommandEntry::moveToPreviousItem); + connect(m_commandItem, &WorksheetTextItem::moveToNext, this, &CommandEntry::moveToNextItem); + connect(m_commandItem, SIGNAL(receivedFocus(WorksheetTextItem*)), worksheet, SLOT(highlightItem(WorksheetTextItem*))); + connect(m_promptItem, &WorksheetTextItem::drag, this, &CommandEntry::startDrag); + connect(worksheet, SIGNAL(updatePrompt()), this, SLOT(updatePrompt())); +} + +CommandEntry::~CommandEntry() +{ + if (m_completionBox) + m_completionBox->deleteLater(); +} + +int CommandEntry::type() const +{ + return Type; +} + +void CommandEntry::initMenus() { + //background color + const QString colorNames[colorsCount] = {i18n("White"), i18n("Black"), + i18n("Dark Red"), i18n("Red"), i18n("Light Red"), + i18n("Dark Green"), i18n("Green"), i18n("Light Green"), + i18n("Dark Blue"), i18n("Blue"), i18n("Light Blue"), + i18n("Dark Yellow"), i18n("Yellow"), i18n("Light Yellow"), + i18n("Dark Cyan"), i18n("Cyan"), i18n("Light Cyan"), + i18n("Dark Magenta"), i18n("Magenta"), i18n("Light Magenta"), + i18n("Dark Orange"), i18n("Orange"), i18n("Light Orange"), + i18n("Dark Grey"), i18n("Grey"), i18n("Light Grey") + }; + + //background color + m_backgroundColorActionGroup = new QActionGroup(this); + m_backgroundColorActionGroup->setExclusive(true); + connect(m_backgroundColorActionGroup, &QActionGroup::triggered, this, &CommandEntry::backgroundColorChanged); + + m_backgroundColorMenu = new QMenu(i18n("Background Color")); + m_backgroundColorMenu->setIcon(QIcon::fromTheme(QLatin1String("format-fill-color"))); + + QPixmap pix(16,16); + QPainter p(&pix); + for (int i=0; isetCheckable(true); + m_backgroundColorMenu->addAction(action); + } + + //text color + m_textColorActionGroup = new QActionGroup(this); + m_textColorActionGroup->setExclusive(true); + connect(m_textColorActionGroup, &QActionGroup::triggered, this, &CommandEntry::textColorChanged); + + m_textColorMenu = new QMenu(i18n("Text Color")); + m_textColorMenu->setIcon(QIcon::fromTheme(QLatin1String("format-text-color"))); + + for (int i=0; isetCheckable(true); + m_textColorMenu->addAction(action); + } + + //font + m_fontMenu = new QMenu(i18n("Font")); + m_fontMenu->setIcon(QIcon::fromTheme(QLatin1String("preferences-desktop-font"))); + + QAction* action = new QAction(QIcon::fromTheme(QLatin1String("format-text-bold")), i18n("Bold")); + action->setCheckable(true); + connect(action, &QAction::triggered, this, &CommandEntry::fontBoldTriggered); + m_fontMenu->addAction(action); + + action = new QAction(QIcon::fromTheme(QLatin1String("format-text-italic")), i18n("Italic")); + action->setCheckable(true); + connect(action, &QAction::triggered, this, &CommandEntry::fontItalicTriggered); + m_fontMenu->addAction(action); + m_fontMenu->addSeparator(); + + action = new QAction(QIcon::fromTheme(QLatin1String("format-font-size-less")), i18n("Increase Size")); + connect(action, &QAction::triggered, this, &CommandEntry::fontIncreaseTriggered); + m_fontMenu->addAction(action); + + action = new QAction(QIcon::fromTheme(QLatin1String("format-font-size-more")), i18n("Decrease Size")); + connect(action, &QAction::triggered, this, &CommandEntry::fontDecreaseTriggered); + m_fontMenu->addAction(action); + m_fontMenu->addSeparator(); + + action = new QAction(QIcon::fromTheme(QLatin1String("preferences-desktop-font")), i18n("Select")); + connect(action, &QAction::triggered, this, &CommandEntry::fontSelectTriggered); + m_fontMenu->addAction(action); + + m_menusInitialized = true; +} + +void CommandEntry::backgroundColorChanged(QAction* action) { + int index = m_backgroundColorActionGroup->actions().indexOf(action); + if (index == -1 || index>=colorsCount) + index = 0; + + m_commandItem->setBackgroundColor(colors[index]); +} + +void CommandEntry::textColorChanged(QAction* action) { + int index = m_textColorActionGroup->actions().indexOf(action); + if (index == -1 || index>=colorsCount) + index = 0; + + m_commandItem->setDefaultTextColor(colors[index]); +} + +void CommandEntry::fontBoldTriggered() +{ + QAction* action = static_cast(QObject::sender()); + QFont font = m_commandItem->font(); + font.setBold(action->isChecked()); + m_commandItem->setFont(font); +} + +void CommandEntry::fontItalicTriggered() +{ + QAction* action = static_cast(QObject::sender()); + QFont font = m_commandItem->font(); + font.setItalic(action->isChecked()); + m_commandItem->setFont(font); +} + +void CommandEntry::fontIncreaseTriggered() +{ + QFont font = m_commandItem->font(); + const int currentSize = font.pointSize(); + QFontDatabase fdb; + QList sizes = fdb.pointSizes(font.family(), font.styleName()); + + for (int i = 0; i < sizes.size(); ++i) + { + const int size = sizes.at(i); + if (currentSize == size) + { + if (i + 1 < sizes.size()) + { + font.setPointSize(sizes.at(i+1)); + m_commandItem->setFont(font); + } + + break; + } + } +} + +void CommandEntry::fontDecreaseTriggered() +{ + QFont font = m_commandItem->font(); + const int currentSize = font.pointSize(); + QFontDatabase fdb; + QList sizes = fdb.pointSizes(font.family(), font.styleName()); + + for (int i = 0; i < sizes.size(); ++i) + { + const int size = sizes.at(i); + if (currentSize == size) + { + if (i - 1 >= 0) + { + font.setPointSize(sizes.at(i-1)); + m_commandItem->setFont(font); + } + + break; + } + } +} + +void CommandEntry::fontSelectTriggered() +{ + bool ok; + QFont font = QFontDialog::getFont(&ok, m_commandItem->font(), nullptr); + + if (ok) + m_commandItem->setFont(font); +} + +void CommandEntry::populateMenu(QMenu* menu, QPointF pos) +{ + if (!m_menusInitialized) + initMenus(); + + menu->addMenu(m_backgroundColorMenu); + menu->addMenu(m_textColorMenu); + menu->addMenu(m_fontMenu); + menu->addSeparator(); + WorksheetEntry::populateMenu(menu, pos); +} + +void CommandEntry::moveToNextItem(int pos, qreal x) +{ + WorksheetTextItem* item = qobject_cast(sender()); + + if (!item) + return; + + if (item == m_commandItem) { + if (m_informationItems.isEmpty() || + !currentInformationItem()->isEditable()) + moveToNextEntry(pos, x); + else + currentInformationItem()->setFocusAt(pos, x); + } else if (item == currentInformationItem()) { + moveToNextEntry(pos, x); + } +} + +void CommandEntry::moveToPreviousItem(int pos, qreal x) +{ + WorksheetTextItem* item = qobject_cast(sender()); + + if (!item) + return; + + if (item == m_commandItem || item == nullptr) { + moveToPreviousEntry(pos, x); + } else if (item == currentInformationItem()) { + m_commandItem->setFocusAt(pos, x); + } +} + +QString CommandEntry::command() +{ + QString cmd = m_commandItem->toPlainText(); + cmd.replace(QChar::ParagraphSeparator, QLatin1Char('\n')); //Replace the U+2029 paragraph break by a Normal Newline + cmd.replace(QChar::LineSeparator, QLatin1Char('\n')); //Replace the line break by a Normal Newline + return cmd; +} + +void CommandEntry::setExpression(Cantor::Expression* expr) +{ + /* + if ( m_expression ) { + if (m_expression->status() == Cantor::Expression::Computing) { + qDebug() << "OLD EXPRESSION STILL ACTIVE"; + m_expression->interrupt(); + } + m_expression->deleteLater(); + }*/ + + // Delete any previous error + if(m_errorItem) + { + m_errorItem->deleteLater(); + m_errorItem = nullptr; + } + + foreach(WorksheetTextItem* item, m_informationItems) + { + item->deleteLater(); + } + m_informationItems.clear(); + + // Delete any previous result + clearResultItems(); + + m_expression = expr; + + connect(expr, SIGNAL(gotResult()), this, SLOT(updateEntry())); + connect(expr, SIGNAL(resultsCleared()), this, SLOT(clearResultItems())); + connect(expr, SIGNAL(resultRemoved(int)), this, SLOT(removeResultItem(int))); + connect(expr, SIGNAL(resultReplaced(int)), this, SLOT(replaceResultItem(int))); + connect(expr, SIGNAL(idChanged()), this, SLOT(updatePrompt())); + connect(expr, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(expressionChangedStatus(Cantor::Expression::Status))); + connect(expr, SIGNAL(needsAdditionalInformation(QString)), this, SLOT(showAdditionalInformationPrompt(QString))); + connect(expr, SIGNAL(statusChanged(Cantor::Expression::Status)), this, SLOT(updatePrompt())); + + updatePrompt(); + + if(expr->result()) + { + worksheet()->gotResult(expr); + updateEntry(); + } + + expressionChangedStatus(expr->status()); +} + +Cantor::Expression* CommandEntry::expression() +{ + return m_expression; +} + +bool CommandEntry::acceptRichText() +{ + return false; +} + +void CommandEntry::setContent(const QString& content) +{ + m_commandItem->setPlainText(content); +} + +void CommandEntry::setContent(const QDomElement& content, const KZip& file) +{ + m_commandItem->setPlainText(content.firstChildElement(QLatin1String("Command")).text()); + + LoadedExpression* expr=new LoadedExpression( worksheet()->session() ); + expr->loadFromXml(content, file); + + //background color + QDomElement backgroundElem = content.firstChildElement(QLatin1String("Background")); + if (!backgroundElem.isNull()) + { + QColor color; + color.setRed(backgroundElem.attribute(QLatin1String("red")).toInt()); + color.setGreen(backgroundElem.attribute(QLatin1String("green")).toInt()); + color.setBlue(backgroundElem.attribute(QLatin1String("blue")).toInt()); + m_commandItem->setBackgroundColor(color); + } + + //text properties + QDomElement textElem = content.firstChildElement(QLatin1String("Text")); + if (!textElem.isNull()) + { + //text color + QDomElement colorElem = textElem.firstChildElement(QLatin1String("Color")); + QColor color; + color.setRed(colorElem.attribute(QLatin1String("red")).toInt()); + color.setGreen(colorElem.attribute(QLatin1String("green")).toInt()); + color.setBlue(colorElem.attribute(QLatin1String("blue")).toInt()); + m_commandItem->setDefaultTextColor(color); + + //font properties + QDomElement fontElem = textElem.firstChildElement(QLatin1String("Font")); + QFont font; + font.setFamily(fontElem.attribute(QLatin1String("family"))); + font.setPointSize(fontElem.attribute(QLatin1String("pointSize")).toInt()); + font.setWeight(fontElem.attribute(QLatin1String("weight")).toInt()); + font.setItalic(fontElem.attribute(QLatin1String("italic")).toInt()); + m_commandItem->setFont(font); + } + + setExpression(expr); +} + +void CommandEntry::showCompletion() +{ + const QString line = currentLine(); + + if(!worksheet()->completionEnabled() || line.trimmed().isEmpty()) + { + if (m_commandItem->hasFocus()) + m_commandItem->insertTab(); + return; + } else if (isShowingCompletionPopup()) { + QString comp = m_completionObject->completion(); + qDebug() << "command" << m_completionObject->command(); + qDebug() << "completion" << comp; + if (comp != m_completionObject->command() + || !m_completionObject->hasMultipleMatches()) { + if (m_completionObject->hasMultipleMatches()) { + completeCommandTo(comp, PreliminaryCompletion); + } else { + completeCommandTo(comp, FinalCompletion); + m_completionBox->hide(); + } + } else { + m_completionBox->down(); + } + } else { + int p = m_commandItem->textCursor().positionInBlock(); + Cantor::CompletionObject* tco=worksheet()->session()->completionFor(line, p); + if(tco) + setCompletion(tco); + } +} + +void CommandEntry::selectPreviousCompletion() +{ + if (isShowingCompletionPopup()) + m_completionBox->up(); +} + +QString CommandEntry::toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) +{ + Q_UNUSED(commentStartingSeq); + Q_UNUSED(commentEndingSeq); + + if (command().isEmpty()) + return QString(); + return command() + commandSep; +} + +QDomElement CommandEntry::toXml(QDomDocument& doc, KZip* archive) +{ + QDomElement exprElem = doc.createElement( QLatin1String("Expression") ); + QDomElement cmdElem = doc.createElement( QLatin1String("Command") ); + cmdElem.appendChild(doc.createTextNode( command() )); + exprElem.appendChild(cmdElem); + + // save results of the expression if they exist + if (expression()) + for (Cantor::Result * const result: expression()->results()) + { + const QDomElement& resultElem = result->toXml(doc); + exprElem.appendChild(resultElem); + + if (archive) + result->saveAdditionalData(archive); + } + + //save the background color if it differs from the default one + const QColor& backgroundColor = m_commandItem->backgroundColor(); + KColorScheme scheme = KColorScheme(QPalette::Normal, KColorScheme::View); + if (backgroundColor != scheme.background(KColorScheme::AlternateBackground).color()) + { + QDomElement colorElem = doc.createElement( QLatin1String("Background") ); + colorElem.setAttribute(QLatin1String("red"), QString::number(backgroundColor.red())); + colorElem.setAttribute(QLatin1String("green"), QString::number(backgroundColor.green())); + colorElem.setAttribute(QLatin1String("blue"), QString::number(backgroundColor.blue())); + exprElem.appendChild(colorElem); + } + + //save the text properties if they differ from default values + const QFont& font = m_commandItem->font(); + if (font != QFontDatabase::systemFont(QFontDatabase::FixedFont)) + { + QDomElement textElem = doc.createElement(QLatin1String("Text")); + + //font properties + QDomElement fontElem = doc.createElement(QLatin1String("Font")); + fontElem.setAttribute(QLatin1String("family"), font.family()); + fontElem.setAttribute(QLatin1String("pointSize"), QString::number(font.pointSize())); + fontElem.setAttribute(QLatin1String("weight"), QString::number(font.weight())); + fontElem.setAttribute(QLatin1String("italic"), QString::number(font.italic())); + textElem.appendChild(fontElem); + + //text color + const QColor& textColor = m_commandItem->defaultTextColor(); + QDomElement colorElem = doc.createElement( QLatin1String("Color") ); + colorElem.setAttribute(QLatin1String("red"), QString::number(textColor.red())); + colorElem.setAttribute(QLatin1String("green"), QString::number(textColor.green())); + colorElem.setAttribute(QLatin1String("blue"), QString::number(textColor.blue())); + textElem.appendChild(colorElem); + + exprElem.appendChild(textElem); + } + + return exprElem; +} + +QString CommandEntry::currentLine() +{ + if (!m_commandItem->hasFocus()) + return QString(); + + QTextBlock block = m_commandItem->textCursor().block(); + return block.text(); +} + +bool CommandEntry::evaluateCurrentItem() +{ + // we can't use m_commandItem->hasFocus() here, because + // that doesn't work when the scene doesn't have the focus, + // e.g. when an assistant is used. + if (m_commandItem == worksheet()->focusItem()) { + return evaluate(); + } else if (informationItemHasFocus()) { + addInformation(); + return true; + } + + return false; +} + +bool CommandEntry::evaluate(EvaluationOption evalOp) +{ + removeContextHelp(); + QToolTip::hideText(); + + QString cmd = command(); + m_evaluationOption = evalOp; + + if(cmd.isEmpty()) { + removeResults(); + foreach(WorksheetTextItem* item, m_informationItems) { + item->deleteLater(); + } + m_informationItems.clear(); + recalculateSize(); + + evaluateNext(m_evaluationOption); + return false; + } + + Cantor::Expression* expr; + expr = worksheet()->session()->evaluateExpression(cmd); + connect(expr, SIGNAL(gotResult()), worksheet(), SLOT(gotResult())); + + setExpression(expr); + + return true; +} + +void CommandEntry::interruptEvaluation() +{ + Cantor::Expression *expr = expression(); + if(expr) + expr->interrupt(); +} + +void CommandEntry::updateEntry() +{ + qDebug() << "update Entry"; + Cantor::Expression* expr = expression(); + if (expr == nullptr || expr->results().isEmpty()) + return; + + if (expr->results().last()->type() == Cantor::HelpResult::Type) + return; // Help is handled elsewhere + + //CommandEntry::updateEntry() is only called if the worksheet view is resized + //or when we got a new result(s). + //In the second case the number of results and the number of result graphic objects is different + //and we add a new graphic objects for the new result(s) (new result(s) are located in the end). + if (m_resultItems.size() < expr->results().size()) + { + for (int i = m_resultItems.size(); i < expr->results().size(); i++) + m_resultItems << ResultItem::create(this, expr->results()[i]); + animateSizeChange(); + } +} + +void CommandEntry::expressionChangedStatus(Cantor::Expression::Status status) +{ + switch (status) + { + case Cantor::Expression::Computing: + { + //change the background of the promt item and start animating it (fade in/out). + //don't start the animation immediately in order to avoid unwanted flickering for "short" commands, + //start the animation after 1 second passed. + if (worksheet()->animationsEnabled()) + { + const int id = m_expression->id(); + QTimer::singleShot(1000, this, [this, id] () { + if(m_expression->status() == Cantor::Expression::Computing && m_expression->id() == id) + m_promptItemAnimation->start(); + }); + } + break; + } + case Cantor::Expression::Error: + case Cantor::Expression::Interrupted: + m_promptItemAnimation->stop(); + m_promptItem->setOpacity(1.); + + m_commandItem->setFocusAt(WorksheetTextItem::BottomRight, 0); + + if(!m_errorItem) + { + m_errorItem = new WorksheetTextItem(this, Qt::TextSelectableByMouse); + } + + if (status == Cantor::Expression::Error) + m_errorItem->setHtml(m_expression->errorMessage()); + else + m_errorItem->setHtml(i18n("Interrupted")); + + recalculateSize(); + break; + case Cantor::Expression::Done: + m_promptItemAnimation->stop(); + m_promptItem->setOpacity(1.); + evaluateNext(m_evaluationOption); + m_evaluationOption = DoNothing; + break; + default: + break; + } +} + +void CommandEntry::animatePromptItem() { + if(m_expression->status() == Cantor::Expression::Computing) + m_promptItemAnimation->start(); +} + +bool CommandEntry::isEmpty() +{ + if (m_commandItem->toPlainText().trimmed().isEmpty()) { + if (!m_resultItems.isEmpty()) + return false; + return true; + } + return false; +} + +bool CommandEntry::focusEntry(int pos, qreal xCoord) +{ + if (aboutToBeRemoved()) + return false; + WorksheetTextItem* item; + if (pos == WorksheetTextItem::TopLeft || pos == WorksheetTextItem::TopCoord) + item = m_commandItem; + else if (m_informationItems.size() && currentInformationItem()->isEditable()) + item = currentInformationItem(); + else + item = m_commandItem; + + item->setFocusAt(pos, xCoord); + return true; +} + +void CommandEntry::setCompletion(Cantor::CompletionObject* tc) +{ + if (m_completionObject) + delete m_completionObject; + + m_completionObject = tc; + connect(m_completionObject, &Cantor::CompletionObject::done, this, &CommandEntry::showCompletions); + connect(m_completionObject, &Cantor::CompletionObject::lineDone, this, &CommandEntry::completeLineTo); +} + +void CommandEntry::showCompletions() +{ + disconnect(m_completionObject, &Cantor::CompletionObject::done, this, &CommandEntry::showCompletions); + QString completion = m_completionObject->completion(); + qDebug()<<"completion: "<allMatches(); + + if(m_completionObject->hasMultipleMatches()) + { + completeCommandTo(completion); + + QToolTip::showText(QPoint(), QString(), worksheetView()); + if (!m_completionBox) + m_completionBox = new KCompletionBox(worksheetView()); + + m_completionBox->clear(); + m_completionBox->setItems(m_completionObject->allMatches()); + QList items = m_completionBox->findItems(m_completionObject->command(), Qt::MatchFixedString|Qt::MatchCaseSensitive); + if (!items.empty()) + m_completionBox->setCurrentItem(items.first()); + m_completionBox->setTabHandling(false); + m_completionBox->setActivateOnSelect(true); + connect(m_completionBox.data(), &KCompletionBox::activated, this, &CommandEntry::applySelectedCompletion); + connect(m_commandItem->document(), SIGNAL(contentsChanged()), this, SLOT(completedLineChanged())); + connect(m_completionObject, &Cantor::CompletionObject::done, this, &CommandEntry::updateCompletions); + + m_commandItem->activateCompletion(true); + m_completionBox->popup(); + m_completionBox->move(getPopupPosition()); + } else + { + completeCommandTo(completion, FinalCompletion); + } +} + +bool CommandEntry::isShowingCompletionPopup() +{ + return m_completionBox && m_completionBox->isVisible(); +} + +void CommandEntry::applySelectedCompletion() +{ + QListWidgetItem* item = m_completionBox->currentItem(); + if(item) + completeCommandTo(item->text(), FinalCompletion); + m_completionBox->hide(); +} + +void CommandEntry::completedLineChanged() +{ + if (!isShowingCompletionPopup()) { + // the completion popup is not visible anymore, so let's clean up + removeContextHelp(); + return; + } + const QString line = currentLine(); + m_completionObject->updateLine(line, m_commandItem->textCursor().positionInBlock()); +} + +void CommandEntry::updateCompletions() +{ + if (!m_completionObject) + return; + QString completion = m_completionObject->completion(); + qDebug()<<"completion: "<allMatches(); + + if(m_completionObject->hasMultipleMatches() || !completion.isEmpty()) + { + QToolTip::showText(QPoint(), QString(), worksheetView()); + m_completionBox->setItems(m_completionObject->allMatches()); + QList items = m_completionBox->findItems(m_completionObject->command(), Qt::MatchFixedString|Qt::MatchCaseSensitive); + if (!items.empty()) + m_completionBox->setCurrentItem(items.first()); + + m_completionBox->move(getPopupPosition()); + } else + { + removeContextHelp(); + } +} + +void CommandEntry::completeCommandTo(const QString& completion, CompletionMode mode) +{ + qDebug() << "completion: " << completion; + + Cantor::CompletionObject::LineCompletionMode cmode; + if (mode == FinalCompletion) { + cmode = Cantor::CompletionObject::FinalCompletion; + Cantor::SyntaxHelpObject* obj = worksheet()->session()->syntaxHelpFor(completion); + if(obj) + setSyntaxHelp(obj); + } else { + cmode = Cantor::CompletionObject::PreliminaryCompletion; + if(m_syntaxHelpObject) + m_syntaxHelpObject->deleteLater(); + m_syntaxHelpObject=nullptr; + } + + m_completionObject->completeLine(completion, cmode); +} + +void CommandEntry::completeLineTo(const QString& line, int index) +{ + qDebug() << "line completion: " << line; + QTextCursor cursor = m_commandItem->textCursor(); + cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::MoveAnchor); + cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor); + int startPosition = cursor.position(); + cursor.insertText(line); + cursor.setPosition(startPosition + index); + m_commandItem->setTextCursor(cursor); + + if (m_syntaxHelpObject) { + m_syntaxHelpObject->fetchSyntaxHelp(); + // If we are about to show syntax help, then this was the final + // completion, and we should clean up. + removeContextHelp(); + } +} + +void CommandEntry::setSyntaxHelp(Cantor::SyntaxHelpObject* sh) +{ + if(m_syntaxHelpObject) + m_syntaxHelpObject->deleteLater(); + + m_syntaxHelpObject=sh; + connect(sh, SIGNAL(done()), this, SLOT(showSyntaxHelp())); +} + +void CommandEntry::showSyntaxHelp() +{ + QString msg = m_syntaxHelpObject->toHtml(); + const QPointF cursorPos = m_commandItem->cursorPosition(); + + // QToolTip don't support  , but support multiple spaces + msg.replace(QLatin1String(" "), QLatin1String(" ")); + // Don't support " too; + msg.replace(QLatin1String("""), QLatin1String("\"")); + + QToolTip::showText(toGlobalPosition(cursorPos), msg, worksheetView()); +} + +void CommandEntry::resultDeleted() +{ + qDebug()<<"result got removed..."; +} + +void CommandEntry::addInformation() +{ + WorksheetTextItem *answerItem = currentInformationItem(); + answerItem->setTextInteractionFlags(Qt::TextSelectableByMouse); + + QString inf = answerItem->toPlainText(); + inf.replace(QChar::ParagraphSeparator, QLatin1Char('\n')); + inf.replace(QChar::LineSeparator, QLatin1Char('\n')); + + qDebug()<<"adding information: "<addInformation(inf); +} + +void CommandEntry::showAdditionalInformationPrompt(const QString& question) +{ + WorksheetTextItem* questionItem = new WorksheetTextItem(this, Qt::TextSelectableByMouse); + WorksheetTextItem* answerItem = new WorksheetTextItem(this, Qt::TextEditorInteraction); + + //change the color and the font for when asking for additional information in order to + //better discriminate from the usual input in the command entry + KColorScheme scheme = KColorScheme(QPalette::Normal, KColorScheme::View); + QColor color = scheme.foreground(KColorScheme::PositiveText).color(); + + QFont font; + font.setItalic(true); + + questionItem->setFont(font); + questionItem->setDefaultTextColor(color); + answerItem->setFont(font); + answerItem->setDefaultTextColor(color); + + questionItem->setPlainText(question); + + m_informationItems.append(questionItem); + m_informationItems.append(answerItem); + connect(answerItem, &WorksheetTextItem::moveToPrevious, this, &CommandEntry::moveToPreviousItem); + connect(answerItem, &WorksheetTextItem::moveToNext, this, &CommandEntry::moveToNextItem); + + connect(answerItem, &WorksheetTextItem::execute, this, &CommandEntry::addInformation); + answerItem->setFocus(); + + recalculateSize(); +} + +void CommandEntry::removeResults() +{ + //clear the Result objects + if(m_expression) + m_expression->clearResults(); +} + +void CommandEntry::removeResult(Cantor::Result* result) +{ + if (m_expression) + m_expression->removeResult(result); +} + +void CommandEntry::removeResultItem(int index) +{ + fadeOutItem(m_resultItems[index]->graphicsObject()); + m_resultItems.remove(index); + recalculateSize(); +} + +void CommandEntry::clearResultItems() +{ + //fade out all result graphic objects + for(auto* item : m_resultItems) + fadeOutItem(item->graphicsObject()); + + m_resultItems.clear(); + recalculateSize(); +} + +void CommandEntry::replaceResultItem(int index) +{ + ResultItem* previousItem = m_resultItems[index]; + m_resultItems[index] = ResultItem::create(this, m_expression->results()[index]); + previousItem->deleteLater(); + recalculateSize(); +} + +void CommandEntry::removeContextHelp() +{ + disconnect(m_commandItem->document(), SIGNAL(contentsChanged()), this, SLOT(completedLineChanged())); + + m_commandItem->activateCompletion(false); + if (m_completionBox) + m_completionBox->hide(); +} + +void CommandEntry::updatePrompt() +{ + KColorScheme color = KColorScheme( QPalette::Normal, KColorScheme::View); + + m_promptItem->setPlainText(QLatin1String("")); + QTextCursor c = m_promptItem->textCursor(); + QTextCharFormat cformat = c.charFormat(); + + cformat.clearForeground(); + c.setCharFormat(cformat); + cformat.setFontWeight(QFont::Bold); + + //insert the session id if available + if(m_expression && worksheet()->showExpressionIds()&&m_expression->id()!=-1) + c.insertText(QString::number(m_expression->id()),cformat); + + //detect the correct color for the prompt, depending on the + //Expression state + if(m_expression) + { + if(m_expression ->status() == Cantor::Expression::Computing&&worksheet()->isRunning()) + cformat.setForeground(color.foreground(KColorScheme::PositiveText)); + else if(m_expression ->status() == Cantor::Expression::Queued) + cformat.setForeground(color.foreground(KColorScheme::InactiveText)); + else if(m_expression ->status() == Cantor::Expression::Error) + cformat.setForeground(color.foreground(KColorScheme::NegativeText)); + else if(m_expression ->status() == Cantor::Expression::Interrupted) + cformat.setForeground(color.foreground(KColorScheme::NeutralText)); + else + cformat.setFontWeight(QFont::Normal); + } + + c.insertText(CommandEntry::Prompt,cformat); + recalculateSize(); +} + +WorksheetTextItem* CommandEntry::currentInformationItem() +{ + if (m_informationItems.isEmpty()) + return nullptr; + return m_informationItems.last(); +} + +bool CommandEntry::informationItemHasFocus() +{ + if (m_informationItems.isEmpty()) + return false; + return m_informationItems.last()->hasFocus(); +} + +bool CommandEntry::focusWithinThisItem() +{ + return focusItem() != nullptr; +} + +QPoint CommandEntry::getPopupPosition() +{ + const QPointF cursorPos = m_commandItem->cursorPosition(); + const QPoint globalPos = toGlobalPosition(cursorPos); + const QDesktopWidget* desktop = QApplication::desktop(); + const QRect screenRect = desktop->screenGeometry(globalPos); + if (globalPos.y() + m_completionBox->height() < screenRect.bottom()) { + return (globalPos); + } else { + QTextBlock block = m_commandItem->textCursor().block(); + QTextLayout* layout = block.layout(); + int pos = m_commandItem->textCursor().position() - block.position(); + QTextLine line = layout->lineForTextPosition(pos); + int dy = - m_completionBox->height() - line.height() - line.leading(); + return QPoint(globalPos.x(), globalPos.y() + dy); + } +} + +void CommandEntry::invalidate() +{ + qDebug() << "ToDo: Invalidate here"; +} + +bool CommandEntry::wantToEvaluate() +{ + return !isEmpty(); +} + +QPoint CommandEntry::toGlobalPosition(QPointF localPos) +{ + const QPointF scenePos = mapToScene(localPos); + const QPoint viewportPos = worksheetView()->mapFromScene(scenePos); + return worksheetView()->viewport()->mapToGlobal(viewportPos); +} + +WorksheetCursor CommandEntry::search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos) +{ + if (pos.isValid() && pos.entry() != this) + return WorksheetCursor(); + + WorksheetCursor p = pos; + QTextCursor cursor; + if (flags & WorksheetEntry::SearchCommand) { + cursor = m_commandItem->search(pattern, qt_flags, p); + if (!cursor.isNull()) + return WorksheetCursor(this, m_commandItem, cursor); + } + + if (p.textItem() == m_commandItem) + p = WorksheetCursor(); + + if (m_errorItem && flags & WorksheetEntry::SearchError) { + cursor = m_errorItem->search(pattern, qt_flags, p); + if (!cursor.isNull()) + return WorksheetCursor(this, m_errorItem, cursor); + } + + if (p.textItem() == m_errorItem) + p = WorksheetCursor(); + + for (auto* resultItem : m_resultItems) + { + WorksheetTextItem* textResult = dynamic_cast + (resultItem); + if (textResult && flags & WorksheetEntry::SearchResult) { + cursor = textResult->search(pattern, qt_flags, p); + if (!cursor.isNull()) + return WorksheetCursor(this, textResult, cursor); + } + } + + return WorksheetCursor(); +} + +void CommandEntry::layOutForWidth(qreal w, bool force) +{ + if (w == size().width() && !force) + return; + + m_promptItem->setPos(0,0); + double x = 0 + m_promptItem->width() + HorizontalSpacing; + double y = 0; + double width = 0; + + m_commandItem->setGeometry(x,y, w-x); + width = qMax(width, m_commandItem->width()); + + y += qMax(m_commandItem->height(), m_promptItem->height()); + foreach(WorksheetTextItem* information, m_informationItems) { + y += VerticalSpacing; + y += information->setGeometry(x,y,w-x); + width = qMax(width, information->width()); + } + + if (m_errorItem) { + y += VerticalSpacing; + y += m_errorItem->setGeometry(x,y,w-x); + width = qMax(width, m_errorItem->width()); + } + + for (auto* resultItem : m_resultItems) + { + if (!resultItem) + continue; + y += VerticalSpacing; + y += resultItem->setGeometry(x, y, w-x); + width = qMax(width, resultItem->width()); + } + y += VerticalMargin; + + QSizeF s(x+ width, y); + if (animationActive()) { + updateSizeAnimation(s); + } else { + setSize(s); + } +} + +void CommandEntry::startRemoving() +{ + m_promptItem->setItemDragable(false); + WorksheetEntry::startRemoving(); +} + +WorksheetTextItem* CommandEntry::highlightItem() +{ + return m_commandItem; +} diff --git a/src/commandentry.h b/src/commandentry.h new file mode 100644 index 0000000..49937cf --- /dev/null +++ b/src/commandentry.h @@ -0,0 +1,176 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + Copyright (C) 2018 Alexander Semke + */ + +#ifndef COMMANDENTRY_H +#define COMMANDENTRY_H + +#include +#include + +#include "worksheetentry.h" +#include "lib/expression.h" + +class Worksheet; +class ResultItem; +class QTimer; + +namespace Cantor{ + class Result; + class CompletionObject; + class SyntaxHelpObject; +} + +class CommandEntry : public WorksheetEntry +{ + Q_OBJECT + public: + static const QString Prompt; + + explicit CommandEntry(Worksheet* worksheet); + ~CommandEntry() override; + + enum {Type = UserType + 2}; + int type() const override; + + QString command(); + void setExpression(Cantor::Expression* expr); + Cantor::Expression* expression(); + + QString currentLine(); + + bool isEmpty() override; + + void setContent(const QString& content) override; + void setContent(const QDomElement& content, const KZip& file) override; + + QDomElement toXml(QDomDocument& doc, KZip* archive) override; + QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) override; + + void setCompletion(Cantor::CompletionObject* tc); + void setSyntaxHelp(Cantor::SyntaxHelpObject* sh); + + bool acceptRichText() override; + + void removeContextHelp(); + + void interruptEvaluation() override; + bool isShowingCompletionPopup(); + + bool focusEntry(int pos = WorksheetTextItem::TopLeft, qreal xCoord = 0) override; + + void layOutForWidth(qreal w, bool force = false) override; + + WorksheetTextItem* highlightItem() override; + + WorksheetCursor search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos = WorksheetCursor()) override; + + public Q_SLOTS: + bool evaluateCurrentItem() override; + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void addInformation(); + void removeResults(); + void removeResult(Cantor::Result* result); + + void showCompletion() override; + void selectPreviousCompletion(); + void updateEntry() override; + void updatePrompt(); + void expressionChangedStatus(Cantor::Expression::Status status); + void showAdditionalInformationPrompt(const QString& question); + void showCompletions(); + void applySelectedCompletion(); + void completedLineChanged(); + void showSyntaxHelp(); + void completeLineTo(const QString& line, int index); + + void startRemoving() override; + + void moveToNextItem(int pos, qreal x); + void moveToPreviousItem(int pos, qreal x); + + void populateMenu(QMenu* menu, QPointF pos) override; + + protected: + bool wantToEvaluate() override; + + private: + WorksheetTextItem* currentInformationItem(); + bool informationItemHasFocus(); + bool focusWithinThisItem(); + QPoint getPopupPosition(); + QPoint toGlobalPosition(QPointF localPos); + void initMenus(); + + private: + enum CompletionMode { + PreliminaryCompletion, + FinalCompletion + }; + private Q_SLOTS: + void invalidate(); + void resultDeleted(); + void clearResultItems(); + void removeResultItem(int index); + void replaceResultItem(int index); + void updateCompletions(); + void completeCommandTo(const QString& completion, CommandEntry::CompletionMode mode = PreliminaryCompletion); + + void backgroundColorChanged(QAction*); + void textColorChanged(QAction*); + void fontBoldTriggered(); + void fontItalicTriggered(); + void fontIncreaseTriggered(); + void fontDecreaseTriggered(); + void fontSelectTriggered(); + + void animatePromptItem(); + + private: + static const double HorizontalSpacing; + static const double VerticalSpacing; + + WorksheetTextItem* m_promptItem; + WorksheetTextItem* m_commandItem; + QVector m_resultItems; + WorksheetTextItem* m_errorItem; + QList m_informationItems; + Cantor::Expression* m_expression; + + Cantor::CompletionObject* m_completionObject; + QPointer m_completionBox; + Cantor::SyntaxHelpObject* m_syntaxHelpObject; + + EvaluationOption m_evaluationOption; + QPropertyAnimation* m_promptItemAnimation; + bool m_menusInitialized; + + //formatting + QActionGroup* m_backgroundColorActionGroup; + QMenu* m_backgroundColorMenu; + QActionGroup* m_textColorActionGroup; + QMenu* m_textColorMenu; + QMenu* m_fontMenu; +}; + +#endif // COMMANDENTRY_H diff --git a/src/config-cantor.h.cmake b/src/config-cantor.h.cmake new file mode 100644 index 0000000..7877895 --- /dev/null +++ b/src/config-cantor.h.cmake @@ -0,0 +1,9 @@ +#include + +#define CANTOR_VERSION "${KDE_APPLICATIONS_VERSION}" + +#cmakedefine LIBSPECTRE_FOUND 1 + +#cmakedefine Discount_FOUND 1 + +#define PATH_TO_CANTOR_PLUGINS "${PATH_TO_CANTOR_BACKENDS}" diff --git a/src/epsrenderer.cpp b/src/epsrenderer.cpp new file mode 100644 index 0000000..772a197 --- /dev/null +++ b/src/epsrenderer.cpp @@ -0,0 +1,144 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "epsrenderer.h" + +#include + +#ifdef LIBSPECTRE_FOUND + #include "libspectre/spectre.h" +#endif + +#include + +EpsRenderer::EpsRenderer() : m_scale(1), m_useHighRes(false) +{ +} + +void EpsRenderer::setScale(qreal scale) +{ + m_scale = scale; +} + +qreal EpsRenderer::scale() +{ + return m_scale; +} + +void EpsRenderer::useHighResolution(bool b) +{ + m_useHighRes = b; +} + +QTextImageFormat EpsRenderer::render(QTextDocument *document, const QUrl &url) +{ + QTextImageFormat epsCharFormat; + + QSizeF s = renderToResource(document, url); + + QUrl internal = url; + internal.setScheme(QLatin1String("internal")); + if(s.isValid()) + { + epsCharFormat.setName(internal.url()); + epsCharFormat.setWidth(s.width()); + epsCharFormat.setHeight(s.height()); + } + + return epsCharFormat; +} + +QTextImageFormat EpsRenderer::render(QTextDocument *document, + const Cantor::LatexRenderer* latex) +{ + QTextImageFormat format = render(document, QUrl::fromLocalFile(latex->imagePath())); + + if (!format.name().isEmpty()) { + format.setProperty(CantorFormula, latex->method()); + format.setProperty(ImagePath, latex->imagePath()); + format.setProperty(Code, latex->latexCode()); + } + + return format; +} + +QSizeF EpsRenderer::renderToResource(QTextDocument *document, const QUrl &url) +{ + QSizeF size; + QImage img = renderToImage(url, &size); + + QUrl internal = url; + internal.setScheme(QLatin1String("internal")); + qDebug() << internal; + document->addResource(QTextDocument::ImageResource, internal, QVariant(img) ); + return size; +} + +QImage EpsRenderer::renderToImage(const QUrl& url, QSizeF* size) +{ +#ifdef LIBSPECTRE_FOUND + SpectreDocument* doc = spectre_document_new(); + SpectreRenderContext* rc = spectre_render_context_new(); + + qDebug() << "rendering eps file: " << url; + QByteArray local_file = url.toLocalFile().toUtf8(); + spectre_document_load(doc, local_file.data()); + + bool isEps = spectre_document_is_eps(doc); + if (!isEps) + qDebug() << "Error: spectre document is not eps! It means, that url is invalid"; + + int wdoc, hdoc; + qreal w, h; + double scale; + spectre_document_get_page_size(doc, &wdoc, &hdoc); + if(m_useHighRes) { + scale=1.2*4.0; //1.2 scaling factor, to make it look nice, 4x for high resolution + w = 1.2 * wdoc; + h = 1.2 * hdoc; + } else { + scale=1.8*m_scale; + w = 1.8 * wdoc; + h = 1.8 * hdoc; + } + + qDebug()<<"scale: "< + */ + +#ifndef EPSRENDERER_H +#define EPSRENDERER_H + +#include +#include +#include +#include +#include +#include "lib/latexrenderer.h" + +class EpsRenderer +{ + public: + EpsRenderer(); + ~EpsRenderer() = default; + + enum FormulaProperties {CantorFormula = 1, ImagePath = 2, Code = 3, + Delimiter = 4}; + enum FormulaType {LatexFormula = Cantor::LatexRenderer::LatexMethod, + MmlFormula = Cantor::LatexRenderer::MmlMethod}; + + QTextImageFormat render(QTextDocument *document, const QUrl& url); + QTextImageFormat render(QTextDocument *document, + const Cantor::LatexRenderer* latex); + + void setScale(qreal scale); + qreal scale(); + + void useHighResolution(bool b); + + QSizeF renderToResource(QTextDocument *document, const QUrl& url); + QImage renderToImage(const QUrl& url, QSizeF* size = nullptr); + + private: + double m_scale; + bool m_useHighRes; +}; + +#endif //EPSRENDERER_H diff --git a/src/extendedsearchbar.ui b/src/extendedsearchbar.ui new file mode 100644 index 0000000..522cbf7 --- /dev/null +++ b/src/extendedsearchbar.ui @@ -0,0 +1,203 @@ + + + ExtendedSearchBar + + + + 0 + 0 + 995 + 97 + + + + SearchBar + + + + + + + + ... + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Find: + + + + + + + true + + + + + + + &Next + + + + + + + &Previous + + + + + + + + + ... + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Replace: + + + + + + + true + + + + + + + &Replace + + + + + + + Replace &All + + + + + + + Qt::Horizontal + + + + + + + + + Search in: + + + + + + + + 4 + 0 + + + + true + + + + + + + ... + + + + + + + ... + + + + + + + &Match case + + + + + + + + 1 + 0 + + + + Qt::AlignCenter + + + + + + + + + + KSqueezedTextLabel + QLabel +
      ksqueezedtextlabel.h
      +
      +
      + + +
      diff --git a/src/imageentry.cpp b/src/imageentry.cpp new file mode 100644 index 0000000..074f193 --- /dev/null +++ b/src/imageentry.cpp @@ -0,0 +1,337 @@ +/* + 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. + + --- + Copyright (C) 2012 martin Kuettler + */ + +#include "imageentry.h" +#include "worksheetimageitem.h" +#include "actionbar.h" + +#include +#include +#include +#include + +ImageEntry::ImageEntry(Worksheet* worksheet) : WorksheetEntry(worksheet) +{ + m_imageItem = nullptr; + m_textItem = new WorksheetTextItem(this); + m_imageWatcher = new QFileSystemWatcher(this); + m_displaySize.width = -1; + m_displaySize.height = -1; + m_printSize.width = -1; + m_printSize.height = -1; + m_displaySize.widthUnit = ImageSize::Auto; + m_displaySize.heightUnit = ImageSize::Auto; + m_printSize.widthUnit = ImageSize::Auto; + m_printSize.heightUnit = ImageSize::Auto; + m_useDisplaySizeForPrinting = true; + connect(m_imageWatcher, &QFileSystemWatcher::fileChanged, this, &ImageEntry::updateEntry); + + setFlag(QGraphicsItem::ItemIsFocusable); + updateEntry(); + startConfigDialog(); +} + +void ImageEntry::populateMenu(QMenu* menu, QPointF pos) +{ + menu->addAction(QIcon::fromTheme(QLatin1String("configure")), i18n("Configure Image"), + this, SLOT(startConfigDialog())); + menu->addSeparator(); + + WorksheetEntry::populateMenu(menu, pos); +} + +bool ImageEntry::isEmpty() +{ + return false; +} + +int ImageEntry::type() const +{ + return Type; +} + +bool ImageEntry::acceptRichText() +{ + return false; +} + +void ImageEntry::setContent(const QString& content) +{ + Q_UNUSED(content); + return; +} + +void ImageEntry::setContent(const QDomElement& content, const KZip& file) +{ + Q_UNUSED(file); + static QStringList unitNames; + if (unitNames.isEmpty()) + unitNames << QLatin1String("(auto)") << QLatin1String("px") << QLatin1String("%"); + + QDomElement pathElement = content.firstChildElement(QLatin1String("Path")); + QDomElement displayElement = content.firstChildElement(QLatin1String("Display")); + QDomElement printElement = content.firstChildElement(QLatin1String("Print")); + m_imagePath = pathElement.text(); + m_displaySize.width = displayElement.attribute(QLatin1String("width")).toDouble(); + m_displaySize.height = displayElement.attribute(QLatin1String("height")).toDouble(); + m_displaySize.widthUnit = unitNames.indexOf(displayElement.attribute(QLatin1String("widthUnit"))); + m_displaySize.heightUnit = unitNames.indexOf(displayElement.attribute(QLatin1String("heightUnit"))); + m_useDisplaySizeForPrinting = printElement.attribute(QLatin1String("useDisplaySize")).toInt(); + m_printSize.width = printElement.attribute(QLatin1String("width")).toDouble(); + m_printSize.height = printElement.attribute(QLatin1String("height")).toDouble(); + m_printSize.widthUnit = unitNames.indexOf(printElement.attribute(QLatin1String("widthUnit"))); + m_printSize.heightUnit = unitNames.indexOf(printElement.attribute(QLatin1String("heightUnit"))); + updateEntry(); +} + +QDomElement ImageEntry::toXml(QDomDocument& doc, KZip* archive) +{ + Q_UNUSED(archive); + + static QStringList unitNames; + if (unitNames.isEmpty()) + unitNames << QLatin1String("(auto)") << QLatin1String("px") << QLatin1String("%"); + + QDomElement image = doc.createElement(QLatin1String("Image")); + QDomElement path = doc.createElement(QLatin1String("Path")); + QDomText pathText = doc.createTextNode(m_imagePath); + path.appendChild(pathText); + image.appendChild(path); + QDomElement display = doc.createElement(QLatin1String("Display")); + display.setAttribute(QLatin1String("width"), m_displaySize.width); + display.setAttribute(QLatin1String("widthUnit"), unitNames[m_displaySize.widthUnit]); + display.setAttribute(QLatin1String("height"), m_displaySize.height); + display.setAttribute(QLatin1String("heightUnit"), unitNames[m_displaySize.heightUnit]); + image.appendChild(display); + QDomElement print = doc.createElement(QLatin1String("Print")); + print.setAttribute(QLatin1String("useDisplaySize"), m_useDisplaySizeForPrinting); + print.setAttribute(QLatin1String("width"), m_printSize.width); + print.setAttribute(QLatin1String("widthUnit"), unitNames[m_printSize.widthUnit]); + print.setAttribute(QLatin1String("height"), m_printSize.height); + print.setAttribute(QLatin1String("heightUnit"), unitNames[m_printSize.heightUnit]); + image.appendChild(print); + + // For the conversion to latex + QDomElement latexSize = doc.createElement(QLatin1String("LatexSizeString")); + QString sizeString; + if (m_useDisplaySizeForPrinting) + sizeString = latexSizeString(m_displaySize); + else + sizeString = latexSizeString(m_printSize); + QDomText latexSizeString = doc.createTextNode(sizeString); + latexSize.appendChild(latexSizeString); + image.appendChild(latexSize); + + return image; +} + +QString ImageEntry::toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) +{ + Q_UNUSED(commandSep); + + return commentStartingSeq + QLatin1String("image: ") + m_imagePath + commentEndingSeq; +} + +QString ImageEntry::latexSizeString(const ImageSize& imgSize) +{ + // We use the transformation 1 px = 1/72 in ( = 1 pt in Latex) + + QString sizeString=QLatin1String(""); + if (imgSize.widthUnit == ImageSize::Auto && + imgSize.heightUnit == ImageSize::Auto) + return QLatin1String(""); + + if (imgSize.widthUnit == ImageSize::Percent) { + if (imgSize.heightUnit == ImageSize::Auto || + (imgSize.heightUnit == ImageSize::Percent && + imgSize.width == imgSize.height)) + return QLatin1String("[scale=") + QString::number(imgSize.width / 100) + QLatin1String("]"); + // else? We could set the size based on the actual image size + } else if (imgSize.widthUnit == ImageSize::Auto && + imgSize.heightUnit == ImageSize::Percent) { + return QLatin1String("[scale=") + QString::number(imgSize.height / 100) + QLatin1String("]"); + } + + if (imgSize.heightUnit == ImageSize::Pixel) + sizeString = QLatin1String("height=") + QString::number(imgSize.height) + QLatin1String("pt"); + if (imgSize.widthUnit == ImageSize::Pixel) { + if (!sizeString.isEmpty()) + sizeString += QLatin1String(","); + sizeString += QLatin1String("width=") + QString::number(imgSize.width) + QLatin1String("pt"); + } + return QLatin1String("[") + sizeString + QLatin1String("]"); +} + +void ImageEntry::interruptEvaluation() +{ +} + +bool ImageEntry::evaluate(EvaluationOption evalOp) +{ + evaluateNext(evalOp); + return true; +} + +qreal ImageEntry::height() +{ + if (m_imageItem && m_imageItem->isVisible()) + return m_imageItem->height(); + else + return m_textItem->height(); +} + +void ImageEntry::updateEntry() +{ + qreal oldHeight = height(); + if (m_imagePath.isEmpty()) { + m_textItem->setPlainText(i18n("Right click here to insert image")); + m_textItem->setVisible(true); + if (m_imageItem) + m_imageItem->setVisible(false); + } + + else { + if (!m_imageItem) + m_imageItem = new WorksheetImageItem(this); + + if (m_imagePath.toLower().endsWith(QLatin1String(".eps"))) { + m_imageItem->setEps(QUrl::fromLocalFile(m_imagePath)); + } else { + QImage img(m_imagePath); + m_imageItem->setImage(img); + } + + if (!m_imageItem->imageIsValid()) { + const QString msg = i18n("Cannot load image %1", m_imagePath); + m_textItem->setPlainText(msg); + m_textItem->setVisible(true); + m_imageItem->setVisible(false); + } else { + QSizeF size; + if (worksheet()->isPrinting() && ! m_useDisplaySizeForPrinting) + size = imageSize(m_printSize); + else + size = imageSize(m_displaySize); + // Hack: Eps images need to be scaled + if (m_imagePath.toLower().endsWith(QLatin1String(".eps"))) + size /= worksheet()->epsRenderer()->scale(); + m_imageItem->setSize(size); + qDebug() << size; + m_textItem->setVisible(false); + m_imageItem->setVisible(true); + } + } + + qDebug() << oldHeight << height(); + if (oldHeight != height()) + recalculateSize(); +} + +QSizeF ImageEntry::imageSize(const ImageSize& imgSize) +{ + const QSize& srcSize = m_imageItem->imageSize(); + qreal w = 0.0; + qreal h = 0.0; + if (imgSize.heightUnit == ImageSize::Percent) + h = srcSize.height() * imgSize.height / 100; + else if (imgSize.heightUnit == ImageSize::Pixel) + h = imgSize.height; + if (imgSize.widthUnit == ImageSize::Percent) + w = srcSize.width() * imgSize.width / 100; + else if (imgSize.widthUnit == ImageSize::Pixel) + w = imgSize.width; + + if (imgSize.widthUnit == ImageSize::Auto) { + if (imgSize.heightUnit == ImageSize::Auto) + return QSizeF(srcSize.width(), srcSize.height()); + else if (h == 0) + w = 0; + else + w = h / srcSize.height() * srcSize.width(); + } else if (imgSize.heightUnit == ImageSize::Auto) { + if (w == 0) + h = 0; + else + h = w / srcSize.width() * srcSize.height(); + } + + return QSizeF(w,h); +} + +void ImageEntry::startConfigDialog() +{ + ImageSettingsDialog* dialog = new ImageSettingsDialog(worksheet()->worksheetView()); + dialog->setData(m_imagePath, m_displaySize, m_printSize, + m_useDisplaySizeForPrinting); + connect(dialog, &ImageSettingsDialog::dataChanged, this, &ImageEntry::setImageData); + dialog->show(); +} + +void ImageEntry::setImageData(const QString& path, + const ImageSize& displaySize, + const ImageSize& printSize, + bool useDisplaySizeForPrinting) +{ + if (path != m_imagePath) { + m_imageWatcher->removePath(m_imagePath); + m_imageWatcher->addPath(path); + m_imagePath = path; + } + + m_displaySize = displaySize; + m_printSize = printSize; + m_useDisplaySizeForPrinting = useDisplaySizeForPrinting; + + updateEntry(); +} + +void ImageEntry::addActionsToBar(ActionBar* actionBar) +{ + actionBar->addButton(QIcon::fromTheme(QLatin1String("configure")), i18n("Configure Image"), + this, SLOT(startConfigDialog())); +} + + +void ImageEntry::layOutForWidth(qreal w, bool force) +{ + if (size().width() == w && !force) + return; + + double width; + if (m_imageItem && m_imageItem->isVisible()) { + m_imageItem->setGeometry(0, 0, w, true); + width = m_imageItem->width(); + } else { + m_textItem->setGeometry(0, 0, w, true); + width = m_textItem->width(); + } + + setSize(QSizeF(width, height() + VerticalMargin)); +} + +bool ImageEntry::wantToEvaluate() +{ + return false; +} + +bool ImageEntry::wantFocus() +{ + return false; +} diff --git a/src/imageentry.h b/src/imageentry.h new file mode 100644 index 0000000..f0ff44f --- /dev/null +++ b/src/imageentry.h @@ -0,0 +1,85 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef IMAGEENTRY_H +#define IMAGEENTRY_H + +#include "worksheetentry.h" +#include "imagesettingsdialog.h" + +#include + +class Worksheet; +class ActionBar; +class WorksheetImageItem; +class QFileSystemWatcher; + +class ImageEntry : public WorksheetEntry +{ + Q_OBJECT + + public: + explicit ImageEntry(Worksheet* worksheet); + ~ImageEntry() override = default; + + enum {Type = UserType + 4}; + int type() const override; + + bool isEmpty() override; + bool acceptRichText() override; + void setContent(const QString& content) override; + void setContent(const QDomElement& content, const KZip& file) override; + QDomElement toXml(QDomDocument& doc, KZip* archive) override; + QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) override; + + QSizeF imageSize(const ImageSize& imgSize); + + void interruptEvaluation() override; + + void layOutForWidth(qreal w, bool force = false) override; + + public Q_SLOTS: + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void updateEntry() override; + + void populateMenu(QMenu* menu, QPointF pos) override; + void startConfigDialog(); + void setImageData(const QString& path, const ImageSize& displaySize, + const ImageSize& printSize, bool useDisplaySizeForPrinting); + + protected: + bool wantToEvaluate() override; + bool wantFocus() override; + qreal height(); + + QString latexSizeString(const ImageSize& imgSize); + void addActionsToBar(ActionBar* actionBar) override; + + private: + QString m_imagePath; + ImageSize m_displaySize; + ImageSize m_printSize; + bool m_useDisplaySizeForPrinting; + WorksheetImageItem* m_imageItem; + WorksheetTextItem* m_textItem; + QFileSystemWatcher* m_imageWatcher; +}; + +#endif /* IMAGEENTRY_H */ diff --git a/src/imageresultitem.cpp b/src/imageresultitem.cpp new file mode 100644 index 0000000..2e0ace8 --- /dev/null +++ b/src/imageresultitem.cpp @@ -0,0 +1,98 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "imageresultitem.h" +#include "commandentry.h" +#include "lib/imageresult.h" +#include "lib/epsresult.h" + +#include +#include +#include + +ImageResultItem::ImageResultItem(QGraphicsObject* parent, Cantor::Result* result) + : WorksheetImageItem(parent), ResultItem(result) +{ + update(); +} + +double ImageResultItem::setGeometry(double x, double y, double w) +{ + Q_UNUSED(w); + setPos(x,y); + return height(); +} + +void ImageResultItem::populateMenu(QMenu* menu, QPointF pos) +{ + ResultItem::addCommonActions(this, menu); + + menu->addSeparator(); + qDebug() << "populate Menu"; + emit menuCreated(menu, mapToParent(pos)); +} + +void ImageResultItem::update() +{ + Q_ASSERT(m_result->type() == Cantor::ImageResult::Type || m_result->type() == Cantor::EpsResult::Type); + switch(m_result->type()) { + case Cantor::ImageResult::Type: + setImage(m_result->data().value()); + break; + case Cantor::EpsResult::Type: + setEps(m_result->data().toUrl()); + break; + default: + break; + } +} + +QRectF ImageResultItem::boundingRect() const +{ + return QRectF(0, 0, width(), height()); +} + +double ImageResultItem::width() const +{ + return WorksheetImageItem::width(); +} + +double ImageResultItem::height() const +{ + return WorksheetImageItem::height(); +} + +void ImageResultItem::saveResult() +{ + Cantor::Result* res = result(); + const QString& filename=QFileDialog::getSaveFileName(worksheet()->worksheetView(), i18n("Save result"), QString(), res->mimeType()); + qDebug()<<"saving result to "<save(filename); +} + +void ImageResultItem::deleteLater() +{ + WorksheetImageItem::deleteLater(); +} + +EpsRenderer* ImageResultItem::epsRenderer() +{ + return qobject_cast(scene())->epsRenderer(); +} diff --git a/src/imageresultitem.h b/src/imageresultitem.h new file mode 100644 index 0000000..7eff23b --- /dev/null +++ b/src/imageresultitem.h @@ -0,0 +1,54 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef IMAGERESULTITEM_H +#define IMAGERESULTITEM_H + +#include "resultitem.h" +#include "worksheetimageitem.h" + +class CommandEntry; +class EpsRenderer; + +class ImageResultItem : public WorksheetImageItem, public ResultItem +{ + Q_OBJECT + public: + explicit ImageResultItem(QGraphicsObject* parent, Cantor::Result* result); + ~ImageResultItem() override = default; + + using WorksheetImageItem::setGeometry; + double setGeometry(double x, double y, double w) override; + void populateMenu(QMenu* menu, QPointF pos) override; + + void update() override; + + QRectF boundingRect() const override; + double width() const override; + double height() const override; + + void deleteLater() override; + EpsRenderer* epsRenderer(); + + protected Q_SLOTS: + void saveResult(); +}; + +#endif // IMAGERESULTITEM_H diff --git a/src/imagesettings.ui b/src/imagesettings.ui new file mode 100644 index 0000000..d82b000 --- /dev/null +++ b/src/imagesettings.ui @@ -0,0 +1,163 @@ + + + ImageSettingsBase + + + + 0 + 0 + 586 + 352 + + + + Image Settings + + + + + + + + + + + Open + + + + + + + + + Display Size + + + false + + + + + + Width + + + + + + + + + + + + + Height + + + + + + + + + + + + + + + + Preview + + + + + + + + + + + + Print Size + + + + + + Use Display Size + + + + + + + Width + + + + + + + + + + + + + Height + + + + + + + + + + + + + + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KComboBox + QComboBox +
      kcombobox.h
      +
      + + KImageFilePreview + QWidget +
      kimagefilepreview.h
      +
      + + KLineEdit + QLineEdit +
      klineedit.h
      +
      +
      + + pathEdit + openDialogButton + displayWidthInput + displayWidthCombo + displayHeightInput + displayHeightCombo + printWidthInput + printWidthCombo + printHeightInput + printHeightCombo + + + +
      diff --git a/src/imagesettingsdialog.cpp b/src/imagesettingsdialog.cpp new file mode 100644 index 0000000..8775701 --- /dev/null +++ b/src/imagesettingsdialog.cpp @@ -0,0 +1,180 @@ +/* + 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. + + --- + Copyright (C) 2011 Martin Kuettler + */ + +#include "imagesettingsdialog.h" +#include +#include +#include +#include + +#include +#include + +ImageSettingsDialog::ImageSettingsDialog(QWidget* parent) : QDialog(parent) +{ + QWidget* w = new QWidget(this); + m_ui.setupUi(w); + + QVBoxLayout* vLayout = new QVBoxLayout(this); + vLayout->setSpacing(0); + vLayout->setContentsMargins(0,0,0,0); + vLayout->addWidget(w); + + m_ui.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + m_ui.buttonBox->button(QDialogButtonBox::Apply)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogApplyButton)); + m_ui.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + m_ui.openDialogButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)); + + m_unitNames << i18n("(auto)") << i18n("px") << i18n("%"); + + m_ui.displayWidthCombo->addItems(m_unitNames); + m_ui.displayHeightCombo->addItems(m_unitNames); + m_ui.printWidthCombo->addItems(m_unitNames); + m_ui.printHeightCombo->addItems(m_unitNames); + + KUrlCompletion* completer = new KUrlCompletion(KUrlCompletion::FileCompletion); + completer->setCompletionMode(KCompletion::CompletionMan); + m_ui.pathEdit->setCompletionObject(completer); + m_ui.pathEdit->setAutoDeleteCompletionObject( true ); + + m_ui.displayWidthInput->setMinimum(0); + m_ui.displayHeightInput->setMinimum(0); + m_ui.printWidthInput->setMinimum(0); + m_ui.printHeightInput->setMinimum(0); + m_ui.displayWidthInput->setSingleStep(1); + m_ui.displayHeightInput->setSingleStep(1); + m_ui.printWidthInput->setSingleStep(1); + m_ui.printHeightInput->setSingleStep(1); + + connect(m_ui.buttonBox, &QDialogButtonBox::accepted, this, &ImageSettingsDialog::sendChangesAndClose); + connect(m_ui.buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &ImageSettingsDialog::sendChanges); + connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &ImageSettingsDialog::close); + + connect(m_ui.openDialogButton, &QPushButton::clicked, this, &ImageSettingsDialog::openDialog); + //connect(m_fileDialog, SIGNAL(accepted()), this, SLOT(updatePath())); + + connect(m_ui.pathEdit, &KLineEdit::editingFinished, this, &ImageSettingsDialog::updatePreview); + + connect(m_ui.displayWidthCombo, static_cast(&KComboBox::currentIndexChanged), this, &ImageSettingsDialog::updateInputWidgets); + connect(m_ui.displayHeightCombo, static_cast(&KComboBox::currentIndexChanged), this, &ImageSettingsDialog::updateInputWidgets); + connect(m_ui.printWidthCombo, static_cast(&KComboBox::currentIndexChanged), this, &ImageSettingsDialog::updateInputWidgets); + connect(m_ui.printHeightCombo, static_cast(&KComboBox::currentIndexChanged), this, &ImageSettingsDialog::updateInputWidgets); + + connect(m_ui.useDisplaySize, &QCheckBox::stateChanged, this, &ImageSettingsDialog::updatePrintingGroup); +} + +void ImageSettingsDialog::setData(const QString& file, const ImageSize& displaySize, const ImageSize& printSize, bool useDisplaySizeForPrinting) +{ + m_ui.pathEdit->setText(file); + if (displaySize.width >= 0) + m_ui.displayWidthInput->setValue(displaySize.width); + if (displaySize.height >= 0) + m_ui.displayHeightInput->setValue(displaySize.height); + if (printSize.width >= 0) + m_ui.printWidthInput->setValue(printSize.width); + if (printSize.height >= 0) + m_ui.printHeightInput->setValue(printSize.height); + m_ui.displayWidthCombo->setCurrentIndex(displaySize.widthUnit); + m_ui.displayHeightCombo->setCurrentIndex(displaySize.heightUnit); + m_ui.printWidthCombo->setCurrentIndex(printSize.widthUnit); + m_ui.printHeightCombo->setCurrentIndex(printSize.heightUnit); + if (useDisplaySizeForPrinting) + m_ui.useDisplaySize->setCheckState(Qt::Checked); + else + m_ui.useDisplaySize->setCheckState(Qt::Unchecked); + + updatePreview(); + updatePrintingGroup(useDisplaySizeForPrinting); + //updateInputWidgets(); +} + +void ImageSettingsDialog::sendChangesAndClose() +{ + sendChanges(); + close(); +} + +void ImageSettingsDialog::sendChanges() +{ + ImageSize displaySize, printSize; + displaySize.width = m_ui.displayWidthInput->value(); + displaySize.height = m_ui.displayHeightInput->value(); + displaySize.widthUnit = m_ui.displayWidthCombo->currentIndex(); + displaySize.heightUnit = m_ui.displayHeightCombo->currentIndex(); + printSize.width = m_ui.printWidthInput->value(); + printSize.height = m_ui.printHeightInput->value(); + printSize.widthUnit = m_ui.printWidthCombo->currentIndex(); + printSize.heightUnit = m_ui.printHeightCombo->currentIndex(); + + emit dataChanged(m_ui.pathEdit->text(), displaySize, printSize, m_ui.useDisplaySize->isChecked()); +} + +void ImageSettingsDialog::openDialog() +{ + const QList formats = QImageReader::supportedImageFormats(); + QString formatString = QLatin1String("Images("); + foreach(QByteArray format, formats) + { + formatString += QLatin1String("*.") + QString::fromLatin1(format).toLower() + QLatin1String(" "); + } + formatString += QLatin1String(")"); + const QString file = QFileDialog::getOpenFileName(this, i18n("Open image file"), m_ui.pathEdit->text(), formatString); + if (!file.isEmpty()) + { + m_ui.pathEdit->setText(file); + updatePreview(); + } +} + +void ImageSettingsDialog::updatePreview() +{ + m_ui.imagePreview->showPreview(QUrl::fromLocalFile(m_ui.pathEdit->text())); +} + +void ImageSettingsDialog::updateInputWidgets() +{ + if (m_ui.displayWidthCombo->currentIndex() == 0) + m_ui.displayWidthInput->setEnabled(false); + else + m_ui.displayWidthInput->setEnabled(true); + + if (m_ui.displayHeightCombo->currentIndex() == 0) + m_ui.displayHeightInput->setEnabled(false); + else + m_ui.displayHeightInput->setEnabled(true); + + if (m_ui.printWidthCombo->currentIndex() == 0 || !m_ui.printWidthCombo->isEnabled()) + m_ui.printWidthInput->setEnabled(false); + else + m_ui.printWidthInput->setEnabled(true); + + if (m_ui.printHeightCombo->currentIndex() == 0 || !m_ui.printHeightCombo->isEnabled()) + m_ui.printHeightInput->setEnabled(false); + else + m_ui.printHeightInput->setEnabled(true); +} + +void ImageSettingsDialog::updatePrintingGroup(int b) +{ + m_ui.printWidthCombo->setEnabled(!b); + m_ui.printHeightCombo->setEnabled(!b); + + updateInputWidgets(); +} diff --git a/src/imagesettingsdialog.h b/src/imagesettingsdialog.h new file mode 100644 index 0000000..27c6c9d --- /dev/null +++ b/src/imagesettingsdialog.h @@ -0,0 +1,63 @@ +/* + 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. + + --- + Copyright (C) 2011 Martin Kuettler + */ + +#ifndef IMAGESETTINGSDIALOG_H +#define IMAGESETTINGSDIALOG_H + +#include + +#include + +struct ImageSize +{ + enum {Auto = 0, Pixel = 1, Percent = 2}; + double width; + double height; + int widthUnit; + int heightUnit; +}; + +class ImageSettingsDialog : public QDialog +{ + Q_OBJECT + public: + explicit ImageSettingsDialog(QWidget* parent); + + void setData(const QString& file, const ImageSize& displaySize, const ImageSize& printSize, bool useDisplaySizeForPrinting); + + Q_SIGNALS: + void dataChanged(const QString& file, const ImageSize& displaySize, const ImageSize& printSize, bool useDisplaySizeForPrinting); + + private Q_SLOTS: + void sendChangesAndClose(); + void sendChanges(); + + void openDialog(); + void updatePreview(); + void updateInputWidgets(); + void updatePrintingGroup(int b); + + private: + QList m_unitNames; + Ui_ImageSettingsBase m_ui; + +}; + +#endif //IMAGESETTINGSDIALOG_H diff --git a/src/latexentry.cpp b/src/latexentry.cpp new file mode 100644 index 0000000..c7a2860 --- /dev/null +++ b/src/latexentry.cpp @@ -0,0 +1,366 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + */ + +#include "latexentry.h" + +#include "worksheetentry.h" +#include "worksheet.h" +#include "epsrenderer.h" +#include "lib/defaulthighlighter.h" +#include "lib/latexrenderer.h" + +#include +#include +#include +#include +#include + +LatexEntry::LatexEntry(Worksheet* worksheet) : WorksheetEntry(worksheet), m_textItem(new WorksheetTextItem(this, Qt::TextEditorInteraction)) +{ + connect(m_textItem, &WorksheetTextItem::moveToPrevious, this, &LatexEntry::moveToPreviousEntry); + connect(m_textItem, &WorksheetTextItem::moveToNext, this, &LatexEntry::moveToNextEntry); + connect(m_textItem, SIGNAL(execute()), this, SLOT(evaluate())); + connect(m_textItem, &WorksheetTextItem::doubleClick, this, &LatexEntry::resolveImagesAtCursor); +} + +void LatexEntry::populateMenu(QMenu* menu, QPointF pos) +{ + bool imageSelected = false; + QTextCursor cursor = m_textItem->textCursor(); + const QChar repl = QChar::ObjectReplacementCharacter; + if (cursor.hasSelection()) { + QString selection = m_textItem->textCursor().selectedText(); + imageSelected = selection.contains(repl); + } else { + // we need to try both the current cursor and the one after the that + cursor = m_textItem->cursorForPosition(pos); + for (int i = 2; i; --i) { + int p = cursor.position(); + if (m_textItem->document()->characterAt(p-1) == repl && + cursor.charFormat().hasProperty(EpsRenderer::CantorFormula)) { + m_textItem->setTextCursor(cursor); + imageSelected = true; + break; + } + cursor.movePosition(QTextCursor::NextCharacter); + } + } + if (imageSelected) { + menu->addAction(i18n("Show LaTeX code"), this, SLOT(resolveImagesAtCursor())); + menu->addSeparator(); + } + WorksheetEntry::populateMenu(menu, pos); +} + +int LatexEntry::type() const +{ + return Type; +} + +bool LatexEntry::isEmpty() +{ + return m_textItem->document()->isEmpty(); +} + +bool LatexEntry::acceptRichText() +{ + return false; +} + +bool LatexEntry::focusEntry(int pos, qreal xCoord) +{ + if (aboutToBeRemoved()) + return false; + m_textItem->setFocusAt(pos, xCoord); + return true; +} + +void LatexEntry::setContent(const QString& content) +{ + m_textItem->setPlainText(content); +} + +void LatexEntry::setContent(const QDomElement& content, const KZip& file) +{ + QString latexCode = content.text(); + qDebug() << latexCode; + + m_textItem->document()->clear(); + QTextCursor cursor = m_textItem->textCursor(); + cursor.movePosition(QTextCursor::Start); + + if(content.hasAttribute(QLatin1String("filename"))) + { + const KArchiveEntry* imageEntry=file.directory()->entry(content.attribute(QLatin1String("filename"))); + if (imageEntry&&imageEntry->isFile()) + { + const KArchiveFile* imageFile=static_cast(imageEntry); + const QString& dir=QStandardPaths::writableLocation(QStandardPaths::TempLocation); + imageFile->copyTo(dir); + const QString& imagePath = dir + QDir::separator() + imageFile->name(); + + QUrl internal=QUrl::fromLocalFile(imagePath); + internal.setScheme(QLatin1String("internal")); + + QTextImageFormat format = worksheet()->epsRenderer()->render(m_textItem->document(), QUrl::fromLocalFile(imagePath)); + qDebug()<<"rendering successful? " << !format.name().isEmpty(); + + format.setProperty(EpsRenderer::CantorFormula, + EpsRenderer::LatexFormula); + format.setProperty(EpsRenderer::ImagePath, imagePath); + format.setProperty(EpsRenderer::Code, latexCode); + cursor.insertText(QString(QChar::ObjectReplacementCharacter), format); + m_textItem->denyEditing(); + } else + { + cursor.insertText(latexCode); + } + } else + { + cursor.insertText(latexCode); + } +} + +QDomElement LatexEntry::toXml(QDomDocument& doc, KZip* archive) +{ + QDomElement el = doc.createElement(QLatin1String("Latex")); + el.appendChild( doc.createTextNode( latexCode() )); + + QTextCursor cursor = m_textItem->document()->find(QString(QChar::ObjectReplacementCharacter)); + if (!cursor.isNull()) + { + QTextCharFormat format=cursor.charFormat(); + QString fileName = format.property(EpsRenderer::ImagePath).toString(); + // Check, if eps file exists, and if not true, rerender latex code + bool isEpsFileExists = QFile::exists(fileName); + if (!isEpsFileExists && renderLatexCode()) + { + cursor = m_textItem->document()->find(QString(QChar::ObjectReplacementCharacter)); + format=cursor.charFormat(); + fileName = format.property(EpsRenderer::ImagePath).toString(); + isEpsFileExists = QFile::exists(fileName); + } + + if (isEpsFileExists && archive) + { + const QUrl& url=QUrl::fromLocalFile(fileName); + archive->addLocalFile(url.toLocalFile(), url.fileName()); + el.setAttribute(QLatin1String("filename"), url.fileName()); + } + } + + return el; +} + +QString LatexEntry::toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) +{ + Q_UNUSED(commandSep); + + if (commentStartingSeq.isEmpty()) + return QString(); + + QString text = latexCode(); + if (!commentEndingSeq.isEmpty()) + return commentStartingSeq + text + commentEndingSeq + QLatin1String("\n"); + return commentStartingSeq + text.replace(QLatin1String("\n"), QLatin1String("\n") + commentStartingSeq) + QLatin1String("\n"); +} + +void LatexEntry::interruptEvaluation() +{ + +} + +bool LatexEntry::evaluate(EvaluationOption evalOp) +{ + bool success = false; + + if (isOneImageOnly()) + { + success = true; + } + else + { + success = renderLatexCode(); + } + + qDebug()<<"rendering successful? "<document()->find(QString(QChar::ObjectReplacementCharacter)); + while (!cursor.isNull()) + { + qDebug()<<"found a formula... rendering the eps..."; + QTextCharFormat format=cursor.charFormat(); + const QUrl& url=QUrl::fromLocalFile(format.property(EpsRenderer::ImagePath).toString()); + QSizeF s = worksheet()->epsRenderer()->renderToResource(m_textItem->document(), url); + qDebug()<<"rendering successful? "<< !s.isValid(); + + //HACK: reinsert this image, to make sure the layout is updated to the new size + //cursor.removeSelectedText(); + //cursor.insertText(QString(QChar::ObjectReplacementCharacter), format); + cursor.movePosition(QTextCursor::NextCharacter); + + cursor = m_textItem->document()->find(QString(QChar::ObjectReplacementCharacter), cursor); + } +} + +void LatexEntry::resolveImagesAtCursor() +{ + QTextCursor cursor = m_textItem->textCursor(); + if (!cursor.hasSelection()) + cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor); + + cursor.insertText(m_textItem->resolveImages(cursor)); + m_textItem->allowEditing(); +} + +QString LatexEntry::latexCode() +{ + QTextCursor cursor = m_textItem->textCursor(); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + + QString code = m_textItem->resolveImages(cursor); + code.replace(QChar::ParagraphSeparator, QLatin1Char('\n')); //Replace the U+2029 paragraph break by a Normal Newline + code.replace(QChar::LineSeparator, QLatin1Char('\n')); //Replace the line break by a Normal Newline + return code; +} + +bool LatexEntry::isOneImageOnly() +{ + QTextCursor cursor = m_textItem->textCursor(); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + + return (cursor.selectionEnd() == 1 && cursor.selectedText() == QString(QChar::ObjectReplacementCharacter)); +} + +int LatexEntry::searchText(const QString& text, const QString& pattern, + QTextDocument::FindFlags qt_flags) +{ + Qt::CaseSensitivity caseSensitivity; + if (qt_flags & QTextDocument::FindCaseSensitively) + caseSensitivity = Qt::CaseSensitive; + else + caseSensitivity = Qt::CaseInsensitive; + + int position; + if (qt_flags & QTextDocument::FindBackward) + position = text.lastIndexOf(pattern, -1, caseSensitivity); + else + position = text.indexOf(pattern, 0, caseSensitivity); + + return position; +} + +WorksheetCursor LatexEntry::search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos) +{ + if (!(flags & WorksheetEntry::SearchLaTeX)) + return WorksheetCursor(); + if (pos.isValid() && (pos.entry() != this || pos.textItem() != m_textItem)) + return WorksheetCursor(); + + QTextCursor textCursor = m_textItem->search(pattern, qt_flags, pos); + int position = 0; + QString latex; + const QString repl = QString(QChar::ObjectReplacementCharacter); + QTextCursor latexCursor = m_textItem->search(repl, qt_flags, pos); + + while (!latexCursor.isNull()) { + latex = m_textItem->resolveImages(latexCursor); + position = searchText(latex, pattern, qt_flags); + if (position >= 0) { + break; + } + WorksheetCursor c(this, m_textItem, latexCursor); + latexCursor = m_textItem->search(repl, qt_flags, c); + } + + if (latexCursor.isNull()) { + if (textCursor.isNull()) + return WorksheetCursor(); + else + return WorksheetCursor(this, m_textItem, textCursor); + } else { + if (textCursor.isNull() || latexCursor < textCursor) { + int start = latexCursor.selectionStart(); + latexCursor.insertText(latex); + QTextCursor c = m_textItem->textCursor(); + c.setPosition(start + position); + c.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, + pattern.length()); + return WorksheetCursor(this, m_textItem, c); + } else { + return WorksheetCursor(this, m_textItem, textCursor); + } + } +} + +void LatexEntry::layOutForWidth(qreal w, bool force) +{ + if (size().width() == w && !force) + return; + + m_textItem->setGeometry(0, 0, w); + setSize(QSizeF(m_textItem->width(), m_textItem->height() + VerticalMargin)); +} + +bool LatexEntry::wantToEvaluate() +{ + return !isOneImageOnly(); +} + +bool LatexEntry::renderLatexCode() +{ + bool success = false; + QString latex = latexCode(); + Cantor::LatexRenderer* renderer = new Cantor::LatexRenderer(this); + renderer->setLatexCode(latex); + renderer->setEquationOnly(false); + renderer->setMethod(Cantor::LatexRenderer::LatexMethod); + renderer->renderBlocking(); + + QTextImageFormat formulaFormat; + if (renderer->renderingSuccessful()) + { + EpsRenderer* epsRend = worksheet()->epsRenderer(); + formulaFormat = epsRend->render(m_textItem->document(), renderer); + success = !formulaFormat.name().isEmpty(); + } + + if(success) + { + QTextCursor cursor = m_textItem->textCursor(); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + cursor.insertText(QString(QChar::ObjectReplacementCharacter), formulaFormat); + m_textItem->denyEditing(); + } + delete renderer; + return success; +} diff --git a/src/latexentry.h b/src/latexentry.h new file mode 100644 index 0000000..14ed8c2 --- /dev/null +++ b/src/latexentry.h @@ -0,0 +1,79 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef LATEXENTRY_H +#define LATEXENTRY_H + +#include "worksheetentry.h" +#include "worksheettextitem.h" + +class LatexEntry : public WorksheetEntry +{ + Q_OBJECT + + public: + explicit LatexEntry(Worksheet* worksheet); + ~LatexEntry() override = default; + + enum {Type = UserType + 5}; + int type() const override; + + bool isEmpty() override; + + bool acceptRichText() override; + + bool focusEntry(int pos = WorksheetTextItem::TopLeft, qreal xCoord = 0) override; + + void setContent(const QString& content) override; + void setContent(const QDomElement& content, const KZip& file) override; + + QDomElement toXml(QDomDocument& doc, KZip* archive) override; + QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) override; + + void interruptEvaluation() override; + + void layOutForWidth(qreal w, bool force = false) override; + + int searchText(const QString& text, const QString& pattern, + QTextDocument::FindFlags qt_flags); + WorksheetCursor search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos = WorksheetCursor()) override; + + public Q_SLOTS: + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void resolveImagesAtCursor(); + void updateEntry() override; + void populateMenu(QMenu* menu, QPointF pos) override; + + protected: + bool wantToEvaluate() override; + + private: + QString latexCode(); + bool renderLatexCode(); + bool isOneImageOnly(); + + private: + WorksheetTextItem* m_textItem; +}; + +#endif // LATEXENTRY_H diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt new file mode 100644 index 0000000..d3cd671 --- /dev/null +++ b/src/lib/CMakeLists.txt @@ -0,0 +1,89 @@ +set( cantor_LIB_SRCS + session.cpp + expression.cpp + backend.cpp + result.cpp + textresult.cpp + imageresult.cpp + epsresult.cpp + latexresult.cpp + latexrenderer.cpp + helpresult.cpp + animationresult.cpp + extension.cpp + assistant.cpp + completionobject.cpp + syntaxhelpobject.cpp + defaulthighlighter.cpp + defaultvariablemodel.cpp + panelplugin.cpp + panelpluginhandler.cpp + worksheetaccess.cpp + directives/plotdirectives.cpp +) + +Set( cantor_LIB_HDRS + cantor_macros.h + #base classes + backend.h + session.h + expression.h + extension.h + syntaxhelpobject.h + completionobject.h + #results + animationresult.h + epsresult.h + helpresult.h + imageresult.h + latexresult.h + result.h + textresult.h + #helper classes + defaulthighlighter.h + defaultvariablemodel.h + worksheetaccess.h +) + +ki18n_wrap_ui(cantor_LIB_SRCS directives/axisrange.ui directives/plottitle.ui) + +kconfig_add_kcfg_files(cantor_LIB_SRCS settings.kcfgc) +install(FILES cantor_libs.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) + +configure_file (config-cantorlib.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-cantorlib.h ) + +add_library( cantorlibs SHARED ${cantor_LIB_SRCS} ) +generate_export_header(cantorlibs BASE_NAME cantor) + +kcoreaddons_desktop_to_json(cantorlibs cantor_assistant.desktop DEFAULT_SERVICE_TYPE) +kcoreaddons_desktop_to_json(cantorlibs cantor_backend.desktop DEFAULT_SERVICE_TYPE) +kcoreaddons_desktop_to_json(cantorlibs cantor_panelplugin.desktop DEFAULT_SERVICE_TYPE) + +target_link_libraries( cantorlibs + KF5::Completion + KF5::IconThemes + KF5::KIOCore + KF5::KIOFileWidgets + KF5::KIOWidgets + KF5::Archive + KF5::ConfigCore + KF5::ConfigGui + KF5::I18n + KF5::XmlGui + ${QT5_LIBRARIES} + Qt5::Xml +) + +set_target_properties( cantorlibs PROPERTIES VERSION ${KDE_APPLICATIONS_VERSION} SOVERSION 20) + + +install( TARGETS cantorlibs ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) + +install( FILES ${cantor_LIB_HDRS} ${CMAKE_CURRENT_BINARY_DIR}/cantor_export.h + DESTINATION ${KDE_INSTALL_INCLUDEDIR}/cantor + COMPONENT Devel +) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/src/lib/Mainpage.dox b/src/lib/Mainpage.dox new file mode 100644 index 0000000..4feab43 --- /dev/null +++ b/src/lib/Mainpage.dox @@ -0,0 +1,28 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +/** + * Namespace collecting all Classes of the Cantor Libraries + */ +namespace Cantor { +/** @mainpage Cantor + +*/ +} diff --git a/src/lib/animationresult.cpp b/src/lib/animationresult.cpp new file mode 100644 index 0000000..9a5fd37 --- /dev/null +++ b/src/lib/animationresult.cpp @@ -0,0 +1,105 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "animationresult.h" +using namespace Cantor; + +#include +#include +#include +#include +#include +#include +#include + +class Cantor::AnimationResultPrivate +{ + public: + AnimationResultPrivate() = default; + + QUrl url; + QMovie* movie; + QString alt; +}; + +AnimationResult::AnimationResult(const QUrl &url, const QString& alt ) : d(new AnimationResultPrivate) +{ + d->url=url; + d->alt=alt; + d->movie=new QMovie(); + d->movie->setFileName(url.toLocalFile()); +} + + +AnimationResult::~AnimationResult() +{ + delete d->movie; + delete d; +} + +QString AnimationResult::toHtml() +{ + return QString::fromLatin1("\"%2\"/").arg(d->url.toLocalFile(), d->alt); +} + +QVariant AnimationResult::data() +{ + return QVariant::fromValue(static_cast(d->movie)); +} + +QUrl AnimationResult::url() +{ + return d->url; +} + +int AnimationResult::type() +{ + return AnimationResult::Type; +} + +QString AnimationResult::mimeType() +{ + QMimeDatabase db; + QMimeType type = db.mimeTypeForUrl(d->url); + + return type.name(); +} + +QDomElement AnimationResult::toXml(QDomDocument& doc) +{ + qDebug()<<"saving imageresult "<url.fileName()); + qDebug()<<"done"; + + return e; +} + +void AnimationResult::saveAdditionalData(KZip* archive) +{ + archive->addLocalFile(d->url.toLocalFile(), d->url.fileName()); +} + +void AnimationResult::save(const QString& filename) +{ + //just copy over the file.. + KIO::file_copy(d->url, QUrl::fromLocalFile(filename), -1, KIO::HideProgressInfo); +} diff --git a/src/lib/animationresult.h b/src/lib/animationresult.h new file mode 100644 index 0000000..0d452f1 --- /dev/null +++ b/src/lib/animationresult.h @@ -0,0 +1,55 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _ANIMATIONRESULT_H +#define _ANIMATIONRESULT_H + +#include "result.h" + +namespace Cantor +{ +class AnimationResultPrivate; + +class CANTOR_EXPORT AnimationResult : public Result +{ + public: + enum{Type=6}; + explicit AnimationResult( const QUrl& url, const QString& alt=QString() ); + ~AnimationResult() override; + + QString toHtml() override; + QVariant data() override; + QUrl url() override; + + int type() override; + QString mimeType() override; + + QDomElement toXml(QDomDocument& doc) override; + void saveAdditionalData(KZip* archive) override; + + void save(const QString& filename) override; + private: + AnimationResultPrivate* d; + +}; + +} + +#endif /* _ANIMATIONRESULT_H */ diff --git a/src/lib/assistant.cpp b/src/lib/assistant.cpp new file mode 100644 index 0000000..ee7f387 --- /dev/null +++ b/src/lib/assistant.cpp @@ -0,0 +1,75 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "assistant.h" +using namespace Cantor; + +class Cantor::AssistantPrivate +{ + public: + QString name; + QString icon; + QStringList requiredExtensions; + Backend* backend; +}; + +Assistant::Assistant(QObject* parent) : QObject(parent), KXMLGUIClient(dynamic_cast(parent)), + d(new AssistantPrivate) +{ + +} + +Assistant::~Assistant() +{ + delete d; +} + +void Assistant::setBackend(Cantor::Backend* backend) +{ + d->backend=backend; +} + +void Assistant::setPluginInfo(KPluginMetaData info) +{ + d->name=info.name(); + d->icon=info.iconName(); + d->requiredExtensions=info.value(QLatin1String("RequiredExtensions")).split(QLatin1Char(',')); +} + + +QStringList Assistant::requiredExtensions() +{ + return d->requiredExtensions; +} + +QString Assistant::icon() +{ + return d->icon; +} + +QString Assistant::name() +{ + return d->name; +} + +Backend* Assistant::backend() +{ + return d->backend; +} diff --git a/src/lib/assistant.h b/src/lib/assistant.h new file mode 100644 index 0000000..95e0415 --- /dev/null +++ b/src/lib/assistant.h @@ -0,0 +1,115 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _ASSISTANT_H +#define _ASSISTANT_H + +#include +#include +#include + +#include "cantor_export.h" + +namespace Cantor +{ +class Backend; +class AssistantPrivate; + +/** + * An Assistant is a dialog for simplifying common tasks, like integrating, solving, or running scripts + * To perform their task, they rely on one or more Extensions, to translate to the backends specific syntax. + * @see Extension + */ +class CANTOR_EXPORT Assistant : public QObject, public KXMLGUIClient +{ + Q_OBJECT + public: + /** + * Create a new assistant + * @param parent the parent Object @see QObject + **/ + explicit Assistant( QObject* parent ); + /** + * Destructor + */ + ~Assistant() override; + + /** + * Sets the backend, this Assistant operates on + * @param backend the new backend + */ + void setBackend(Backend* backend); + + /** + * Sets the properties of this Assistant + * according to KPluginMetaData + * @param info KPluginMetaData + */ + void setPluginInfo(KPluginMetaData info); + + /** + * Returns a list of all extensions, the current backend + * must provide to make this Assistant work. If it doesn't + * this Assistant won't be shown in the Menu + * @return list of required extensions + */ + QStringList requiredExtensions(); + + /** + * shows the assistants dialog or gui it offers, and returns a list of commands + * to be run, to achieve the desired effect + * @param parent the parent widget, each created Widget should use + */ + virtual QStringList run(QWidget* parent) = 0; + + /** + * initialize the needed KActions/integrate into the menu bars + */ + virtual void initActions() = 0; + + /** + * Returns the icon, this Assistant is using + * @return icon, this Assistant is using + */ + QString icon(); + /** + * Returns the name of the assistant + * @return name of the assistant + */ + QString name(); + /** + * Returns the backend, this assistant operates on + * @return backend, this assistant operates on + */ + Backend* backend(); + + Q_SIGNALS: + /** + * signal emitted, if the user has requested this Assistant to run + * e.g. by clicking on its action in the menu + */ + void requested(); + + private: + AssistantPrivate* d; +}; + +} +#endif /* _ASSISTANT_H */ diff --git a/src/lib/backend.cpp b/src/lib/backend.cpp new file mode 100644 index 0000000..88cfbd8 --- /dev/null +++ b/src/lib/backend.cpp @@ -0,0 +1,207 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "backend.h" +using namespace Cantor; + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "extension.h" + +class Cantor::BackendPrivate +{ + public: + QString name; + QString comment; + QString icon; + QString url; + bool enabled; +}; + +Backend::Backend(QObject* parent, const QList& args) : QObject(parent), + d(new BackendPrivate) +{ + Q_UNUSED(args) + d->enabled=true; +} + +Backend::~Backend() +{ + delete d; +} + +QString Backend::name() const +{ + return d->name; +} + +QString Backend::comment() const +{ + return d->comment; +} + +QString Backend::description() const +{ + return comment(); +} + +QString Backend::icon() const +{ + return d->icon; +} + +QString Backend::version() const +{ + return QLatin1String(); +} + +QString Backend::url() const +{ + return d->url; +} + +QUrl Backend::helpUrl() const +{ + return QUrl(); +} + +bool Backend::isEnabled() const +{ + return d->enabled&&requirementsFullfilled(); +} + +void Backend::setEnabled(bool enabled) +{ + d->enabled=enabled; +} + +static QList backendCache; + +QStringList Backend::listAvailableBackends() +{ + QList backends=availableBackends(); + QStringList l; + foreach(Backend* b, backends) + { + if(b->isEnabled()) + l<name(); + } + + return l; +} + +QList Backend::availableBackends() +{ + //if we already have all backends Cached, just return the cache. + //otherwise create the available backends + if(!backendCache.isEmpty()) + { + return backendCache; + } + + QStringList pluginDirs; + foreach(const QString &dir, QCoreApplication::libraryPaths()){ + pluginDirs << dir + QDir::separator() + QLatin1String("cantor/backends"); + } + + QPluginLoader loader; + foreach(const QString &dir, pluginDirs){ + + qDebug() << "dir: " << dir; + QStringList plugins; + QDir pluginDir = QDir(dir); + + plugins = pluginDir.entryList(); + + foreach (const QString &plugin, plugins){ + if (plugin==QLatin1String(".") || plugin==QLatin1String("..")) + continue; + + loader.setFileName(dir + QDir::separator() + plugin); + + if (!loader.load()){ + qDebug() << "Error while loading plugin: " << plugin; + continue; + } + + KPluginFactory* factory = KPluginLoader(loader.fileName()).factory(); + Backend* backend = factory->create(); + + KPluginMetaData info(loader); + backend->d->name=info.name(); + backend->d->comment=info.description(); + backend->d->icon=info.iconName(); + backend->d->url=info.website(); + backendCache< backends=availableBackends(); + foreach(Backend* b, backends) + { + if(b->name().toLower()==name.toLower() || b->id().toLower()==name.toLower()) + return b; + } + + return nullptr; +} + +QWidget* Backend::settingsWidget(QWidget* parent) const +{ + Q_UNUSED(parent) + return nullptr; +} + +KConfigSkeleton* Backend::config() const +{ + return nullptr; +} + + +QStringList Backend::extensions() const +{ + QList extensions=findChildren(QRegExp(QLatin1String(".*Extension"))); + QStringList names; + foreach(Extension* e, extensions) + names<objectName(); + return names; +} + +Extension* Backend::extension(const QString& name) const +{ + return findChild(name); +} + +bool Backend::requirementsFullfilled() const +{ + return true; +} diff --git a/src/lib/backend.h b/src/lib/backend.h new file mode 100644 index 0000000..981bc59 --- /dev/null +++ b/src/lib/backend.h @@ -0,0 +1,218 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _BACKEND_H +#define _BACKEND_H + +#include +#include +#include +#include + +#include "cantor_export.h" + +class KConfigSkeleton; +class QWidget; + +/** + * Namespace collecting all Classes of the Cantor Libraries + */ +namespace Cantor +{ +class Session; +class Extension; +class BackendPrivate; + +/** + * The Backend class provides access to information about the backend. + * It provides access to what features are supported by the backend, and + * a factory method to create a new Session + * It needs to be subclassed by all Backends. + * + * @author Alexander Rieder + */ + +class CANTOR_EXPORT Backend : public QObject, public KXMLGUIClient +{ + Q_OBJECT + public: + /** + * This enum is used to specify the Features, supported by a backend. + */ + enum Capability{ + Nothing = 0x0, ///< the Backend doesn't support any of the optional features + LaTexOutput = 0x1, ///< it can output results as LaTeX code + InteractiveMode = 0x2, /**< it supports an interactive workflow. (It means a command + can ask for additional input while running + */ + SyntaxHighlighting = 0x4, ///< it offers a custom Syntax Highlighter + Completion = 0x8, ///< it offers completion of partially typed commands + SyntaxHelp = 0x10, /**< it offers help about a commands syntax, that will + be shown in a tooltip + */ + VariableManagement= 0x20 ///< it offers access to the variables (for variable management panel) + }; + Q_DECLARE_FLAGS(Capabilities, Capability) + + protected: + /** + * Create a new Backend. Normally the static createBackend factory method + * should be used. + * @param parent the Parent object + * @param args optional arguments (not used) + */ + explicit Backend( QObject* parent = nullptr,const QList& args=QList() ); + /** + * Destructor. Doesn't anything. + */ + ~Backend() override; + public: + + /** + * Creates a new Session. It is the way to go to create a Session, + * don't call new Session on your own. + * @return a new Session of this Backend, or 0 if creating failed + */ + virtual Session* createSession() = 0; + /** + * Returns list of the supported optional features + * @return a list of features, containing items of the Capability enum, ORed together + */ + virtual Capabilities capabilities() const = 0; + /** + * Returns whether all of this backends requirements are fulfilled, or if some are missing. + * @return @c true if all the requirements needed to use this Backend are fulfilled + * @return @c false some requirements are missing. e.g. the maxima executable can not be found + * @see Capability + */ + virtual bool requirementsFullfilled() const; + + /** + * Returns a unique string to identify this backend. + * In contrast to name() this string isn't translated + * @return string to identify backend + */ + virtual QString id() const = 0; + + /** + * Returns the recommended version of the backend supported by Cantor + * @return the recommended version of the backend + */ + virtual QString version() const; + + //Stuff extracted from the .desktop file + /** + * Returns the name of the backend + * @return the backends name + */ + QString name() const; + + /** + * Returns a short comment about the backend. + * @return comment about the backend + */ + QString comment() const; + /** + * Returns the icon to use with this backend + * @return name of the icon + */ + QString icon() const; + /** + * Returns the Url of the Homepage for the Backend + * @return the url + */ + QString url() const; + /** + * Returns an Url pointing to the Help of the Backend + * The method should be overwritten by all Backends(who have an online help) + * You should make the returned Url translateble, e.g. by doing something like: + * return i18nc("the url to the documentation of KAlgebra, please check if there is a translated version and use the correct url", + * "http://docs.kde.org/stable/en/kdeedu/kalgebra/"); + * @return Url of the help + */ + virtual QUrl helpUrl() const; + /** + * Returns if the backend should be enabled (shown in the Backend dialog) + * @return @c true, if the enabled flag is set to true, and the requirements are fulfilled + * @return @c false, if the backend was purposly disabled, or requirements are missing + * @see requirementsFullfilled() + */ + bool isEnabled() const; + /** + * Enables/disables this backend + * @param enabled true to enable backend false to disable + */ + void setEnabled(bool enabled); + + /** + * Returns a longer description of the Backend, e.g. purpose, strengths etc. + * It should help the user to decide between the different Backends + * @return a description of the backend. It can contain html + */ + virtual QString description() const; + /** + * Returns a Widget for configuring this backend + * @return Widget for usage in the Settings dialog + */ + virtual QWidget* settingsWidget(QWidget* parent) const; + /** + * Returns a KConfig object, containing all the settings, + * the backend might need + * @return a KConfigSkeleton object, for configuring this backend + */ + virtual KConfigSkeleton* config() const; + /** + * Returns a list of the names of all the Extensions supported by this backend + * @return a list of the names of all the Extensions supported by this backend + * @see extension(const QString& name) + */ + QStringList extensions() const; + /** + * Returns an Extension of this backend for the given name, or null + * if the Backend doesn't have an extension with this name. + * @return Pointer to the Extension object with the given name + */ + Extension * extension(const QString& name) const; + + /** + * Returns a list of the names of all the installed and enabled backends + * @return a list of the names of all the installed and enabled backends + * @see isEnabled() + */ + static QStringList listAvailableBackends(); + /** + * Returns Pointers to all the installed backends + * @return Pointers to all the installed backends + */ + static QList availableBackends(); + /** + * Returns the backend with the given name, or null if it isn't found + * @return the backend with the given name, or null if it isn't found + */ + static Backend* getBackend(const QString& name); + private: + BackendPrivate* d; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(Backend::Capabilities) + +} + +#endif /* _BACKEND_H */ diff --git a/src/lib/cantor_assistant.desktop b/src/lib/cantor_assistant.desktop new file mode 100644 index 0000000..8afcf1e --- /dev/null +++ b/src/lib/cantor_assistant.desktop @@ -0,0 +1,51 @@ +[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=Cantor/Assistant +Comment=An Assistant for Cantor +Comment[bg]=Помощник за Cantor +Comment[bs]=Asistent za Cantor +Comment[ca]=Un assistent per al Cantor +Comment[ca@valencia]=Un assistent per al Cantor +Comment[cs]=Pomocník pro Cantor +Comment[da]=En assistent til Cantor +Comment[de]=Ein Assistent für Cantor +Comment[el]=Ένας βοηθός για το Cantor +Comment[en_GB]=An Assistant for Cantor +Comment[es]=Un asistente para Cantor +Comment[et]=Cantori abiline +Comment[eu]=Cantorrentzako laguntzaile bat +Comment[fa]=یک دستیار برای کانتور +Comment[fi]=Cantorin opastettu toiminto +Comment[fr]=Un assistant pour Cantor +Comment[ga]=Cúntóir Cantor +Comment[gl]=Un asistente para Cantor +Comment[hi]=केनटोर के लिए सहायक +Comment[hr]=Pomoćnik za Cantor +Comment[hu]=Segéd a Cantorhoz +Comment[it]=Un assistente per Cantor +Comment[ja]=Cantor のウィザード +Comment[kk]=Cantor-дың көмекшісі +Comment[km]=An Assistant for Cantor +Comment[ko]=Cantor 마법사 +Comment[lv]=Cantor palÄ«gs +Comment[nb]=En assistent for Cantor +Comment[nds]=En Cantor-Hölper +Comment[nl]=Een assistent voor Cantor +Comment[nn]=Ein vegvisar til Cantor +Comment[pl]=Asystent programu Cantor +Comment[pt]=Um assistente para o Cantor +Comment[pt_BR]=Um assistente para o Cantor +Comment[ru]=Диалоговое окно для Cantor +Comment[sk]=Asistent pre Cantor +Comment[sl]=Pomočnik za Cantor +Comment[sv]=En guide för Cantor +Comment[th]=ตัวช่วยสำหรับ Cantor +Comment[tr]=Cantor için bir Yardımcı +Comment[ug]=Cantor ياردەمچىسى +Comment[uk]=Помічник Cantor +Comment[x-test]=xxAn Assistant for Cantorxx +Comment[zh_CN]=Cantor 助手 +Comment[zh_TW]=Cantor 小助手 + +[PropertyDef::RequiredExtensions] +Type=QStringList diff --git a/src/lib/cantor_backend.desktop b/src/lib/cantor_backend.desktop new file mode 100644 index 0000000..31f5309 --- /dev/null +++ b/src/lib/cantor_backend.desktop @@ -0,0 +1,48 @@ +[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=Cantor/Backend +Comment=A Backend for Cantor +Comment[bg]=Ядро за Cantor +Comment[bs]=VrÅ¡i računanje za Cantora +Comment[ca]=Un dorsal per al Cantor +Comment[ca@valencia]=Un dorsal per al Cantor +Comment[cs]=Podpůrná vrstva Cantoru +Comment[da]=En backend til Cantor +Comment[de]=Ein Modul für Cantor +Comment[el]=Ένα σύστημα υποστήριξης για το Cantor +Comment[en_GB]=A Backend for Cantor +Comment[es]=Un motor para Cantor +Comment[et]=Cantori taustaprogramm +Comment[eu]=Cantorrentzako 'backend' bat +Comment[fa]=یک پشتیبان برای کانتور +Comment[fi]=Cantorin taustajärjestelmä +Comment[fr]=Un moteur pour Cantor +Comment[ga]=Inneall Cantor +Comment[gl]=Unha infraestrutura para Cantor +Comment[hr]=Pozadinski servis za Cantor +Comment[hu]=Egy háttérprogram a Cantorhoz +Comment[it]=Un motore R per Cantor +Comment[ja]=Cantor のバックエンド +Comment[kk]=Cantor тетігі +Comment[km]=កម្មវិធី​ខាង​ក្រោយ​សម្រាប់​ Cantor +Comment[ko]=Cantor 백엔드 +Comment[lv]=Cantor aizmugure +Comment[nb]=En bakgrunnsmotor for Cantor +Comment[nds]=En Hülpprogramm för Cantor +Comment[nl]=Een backend voor Cantor +Comment[nn]=Ein Cantor-motor +Comment[pa]=ਕੇਨਟੋਰ ਲਈ ਬੈਕਐਂਡ +Comment[pl]=Silnik dla Cantor +Comment[pt]=Uma Infra-Estrutura para o Cantor +Comment[pt_BR]=Um backend para o Cantor +Comment[ru]=Модуль поддержки системы компьютерной алгебры для Cantor +Comment[sk]=Backend pre Cantor +Comment[sl]=Zaledje za Cantor +Comment[sv]=Ett bakgrundsprogram för Cantor +Comment[th]=โปรแกรมเบื้องหลังสำหรับ Cantor +Comment[tr]=Bir Cantor arka ucu +Comment[ug]=Cantor ئارقا ئۇچى +Comment[uk]=Модуль Cantor +Comment[x-test]=xxA Backend for Cantorxx +Comment[zh_CN]=Cantor 后端 +Comment[zh_TW]=Cantor 後端介面 diff --git a/src/lib/cantor_libs.kcfg b/src/lib/cantor_libs.kcfg new file mode 100644 index 0000000..2e396a9 --- /dev/null +++ b/src/lib/cantor_libs.kcfg @@ -0,0 +1,19 @@ + + + QStandardPaths + + + + + QStandardPaths::findExecutable( QLatin1String("latex") ) + + + + QStandardPaths::findExecutable( QLatin1String("dvips") ) + + + + diff --git a/src/lib/cantor_macros.h b/src/lib/cantor_macros.h new file mode 100644 index 0000000..f48bf47 --- /dev/null +++ b/src/lib/cantor_macros.h @@ -0,0 +1,37 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _CANTOR_MACROS_H +#define _CANTOR_MACROS_H + +#include +#include + +#define CANTOR_VERSION 1 + +/** + Exports Backend plugin. +*/ +#define K_EXPORT_CANTOR_PLUGIN(libname, classname) \ + K_PLUGIN_FACTORY(factory, registerPlugin();) \ + K_EXPORT_PLUGIN(factory("cantor_" #libname)) \ + K_EXPORT_PLUGIN_VERSION(CANTOR_VERSION) + +#endif /* _CANTOR_MACROS_H */ diff --git a/src/lib/cantor_panelplugin.desktop b/src/lib/cantor_panelplugin.desktop new file mode 100644 index 0000000..2031112 --- /dev/null +++ b/src/lib/cantor_panelplugin.desktop @@ -0,0 +1,50 @@ +[Desktop Entry] +Type=ServiceType +X-KDE-ServiceType=Cantor/PanelPlugin +Comment=A Plugin for Cantor's Panel +Comment[bg]=Приставка за панела на Cantor +Comment[bs]=Dodatak za Cantor Panel +Comment[ca]=Un connector per al plafó del Cantor +Comment[ca@valencia]=Un connector per al plafó del Cantor +Comment[cs]=Modul pro panel Cantoru +Comment[da]=Et plugin til Cantor's panel +Comment[de]=Ein Modul für Cantors Kontrollleiste +Comment[el]=Ένα πρόσθετο για τον πίνακα του Cantor +Comment[en_GB]=A Plugin for Cantor's Panel +Comment[es]=Un complemento para el panel de Cantor +Comment[et]=Cantori paneeli plugin +Comment[eu]=Cantorren panelarentzako plugin bat +Comment[fa]=یک افزونه برای تابلوی کانتور +Comment[fi]=Cantorin paneeliliitännäinen +Comment[fr]=Un module externe pour le tableau de bord de Cantor +Comment[gl]=Un complemento para o panel de Cantor +Comment[hi]=केन्टॉर के लिए प्लगिन +Comment[hu]=Egy bővítmény a Cantor paneléhez +Comment[it]=Un'estensione per il pannello di Cantor +Comment[ja]=Cantor のパネルのプラグイン +Comment[kk]=Cantor панелінің плагині +Comment[km]=កម្មវិធី​ជំនួយ​សម្រាប់​ផ្ទាំង​របស់​ Cantor +Comment[ko]=Cantor 패널 플러그인 +Comment[lv]=Spraudnis Cantor panelim +Comment[nb]=Et programtillegg for Cantors panel +Comment[nds]=En Moduul för't Cantor-Paneel +Comment[nl]=Een plugin voor het paneel van Cantor +Comment[nn]=Tillegg til Cantor-panel +Comment[pa]=ਕੇਨਟੋਰ ਦੇ ਪੈਨਲ ਲਈ ਪਲੱਗਇਨ +Comment[pl]=Wtyczka dla panelu Cantor +Comment[pt]=Um 'Plugin' para o Painel do Cantor +Comment[pt_BR]=Um plugin para o painel do Cantor +Comment[ru]=Модуль для панели Cantor +Comment[sk]=Plugin pre panel Cantor +Comment[sl]=Vstavek za pult Cantorja +Comment[sv]=Ett insticksprogram för Cantors panel +Comment[th]=ปลั๊กอินสำหรับพาแนลของ Cantor +Comment[tr]=Cantor Paneli için bir eklenti +Comment[ug]=Cantor كۆزنەكچىسىنىڭ قىستۇرمىسى +Comment[uk]=Додаток панелі Cantor +Comment[x-test]=xxA Plugin for Cantor's Panelxx +Comment[zh_CN]=Cantor 面板插件 +Comment[zh_TW]=Cantor 的面板外掛程式 + +[PropertyDef::RequiredExtensions] +Type=QStringList diff --git a/src/lib/completionobject.cpp b/src/lib/completionobject.cpp new file mode 100644 index 0000000..0840677 --- /dev/null +++ b/src/lib/completionobject.cpp @@ -0,0 +1,292 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "completionobject.h" +using namespace Cantor; + +#include +#include +#include + +#include "session.h" + +class Cantor::CompletionObjectPrivate +{ + public: + QStringList completions; + QString line; + QString command; + QString identifier; + QString completion; + int position; + Session* session; + bool parenCompletion; +}; + +CompletionObject::CompletionObject(Session* session) : + d(new CompletionObjectPrivate) +{ + setParent(session); + d->position = -1; + d->session=session; + + connect(this, &CompletionObject::fetchingDone, this, &CompletionObject::findCompletion); + connect(this, &CompletionObject::fetchingTypeDone, this, &CompletionObject::completeLineWithType); + + setCompletionMode(KCompletion::CompletionShell); +} + +CompletionObject::~CompletionObject() +{ + delete d; +} + +QString CompletionObject::command() const +{ + return d->command; +} + +Session* CompletionObject::session() const +{ + return d->session; +} + +QStringList CompletionObject::completions() const +{ + return d->completions; +} + +QString CompletionObject::identifier() const +{ + return d->identifier; +} + +QString CompletionObject::completion() const +{ + return d->completion; +} + +void CompletionObject::setLine(const QString& line, int index) +{ + d->parenCompletion = false; + d->line = line; + if (index < 0) + index = line.length(); + if (index > 1 && line[index-1] == QLatin1Char('(')) { + --index; // move before the parenthesis + d->parenCompletion = true; // but remember it was there + } + int cmd_index = locateIdentifier(line, index-1); + if (cmd_index < 0) + cmd_index = index; + d->position=cmd_index; + d->command=line.mid(cmd_index, index-cmd_index); + + //start a delayed fetch + QTimer::singleShot(0, this, SLOT(fetchCompletions())); +} + +void CompletionObject::updateLine(const QString& line, int index) +{ + d->line = line; + if (index < 0) + index = line.length(); + int cmd_index = locateIdentifier(line, index-1); + if (cmd_index < 0) + cmd_index = index; + d->command=line.mid(cmd_index, index-cmd_index); + + // start a delayed fetch + // For some backends this is a lot of unnecessary work... + QTimer::singleShot(0, this, SLOT(fetchCompletions())); +} + +void CompletionObject::completeLine(const QString& comp, CompletionObject::LineCompletionMode mode) +{ + d->identifier = comp; + if (comp.isEmpty()) { + int index = d->position + d->command.length(); + emit lineDone(d->line, index); + } else if (mode == PreliminaryCompletion) { + completeUnknownLine(); + } else /* mode == FinalCompletion */ { + QTimer::singleShot(0, this, SLOT(fetchIdentifierType())); + } +} + +void CompletionObject::fetchIdentifierType() +{ + emit fetchingTypeDone(UnknownType); +} + + +void CompletionObject::setCompletions(const QStringList& completions) +{ + d->completions=completions; + this->setItems(completions); +} + +void CompletionObject::setCommand(const QString& cmd) +{ + d->command=cmd; +} + +int CompletionObject::locateIdentifier(const QString& cmd, int index) const +{ + if (index < 0) + return -1; + + int i; + for (i=index; i>=0 && mayIdentifierContain(cmd[i]); --i) + {} + + if (i==index || !mayIdentifierBeginWith(cmd[i+1])) + return -1; + return i+1; +} + +bool CompletionObject::mayIdentifierContain(QChar c) const +{ + return c.isLetter() || c.isDigit() || c == QLatin1Char('_'); +} + +bool CompletionObject::mayIdentifierBeginWith(QChar c) const +{ + return c.isLetter() || c == QLatin1Char('_'); +} + +void CompletionObject::findCompletion() +{ + if (d->parenCompletion) { + disconnect(this, SIGNAL(fetchingTypeDone(IdentifierType)), nullptr, nullptr); + connect(this, &CompletionObject::fetchingTypeDone, this, &CompletionObject::handleParenCompletionWithType); + d->identifier = d->command; + fetchIdentifierType(); + return; + } + d->completion = makeCompletion(command()); + emit done(); +} + +void CompletionObject::handleParenCompletionWithType(IdentifierType type) +{ + disconnect(this, SIGNAL(fetchingTypeDone(IdentifierType)), nullptr, nullptr); + connect(this, &CompletionObject::fetchingTypeDone, this, &CompletionObject::completeLineWithType); + + if (type == FunctionWithArguments || type == FunctionWithoutArguments) { + d->completion = d->command; + emit done(); + } +} + +void CompletionObject::completeLineWithType(IdentifierType type) +{ + switch(type) { + case VariableType: + completeVariableLine(); + break; + case FunctionWithArguments: + case FunctionWithoutArguments: + completeFunctionLine(type); + break; + case KeywordType: + completeKeywordLine(); + break; + case UnknownType: + completeUnknownLine(); + break; + } +} + +void CompletionObject::completeFunctionLine(IdentifierType type) +{ + QString newline; + int newindex; + + QString func = d->identifier; + int after_command = d->position + d->command.length(); + QString part1 = d->line.left(d->position) + func; + int index = d->position + func.length() + 1; + if (after_command < d->line.length() && d->line.at(after_command) == QLatin1Char('(')) { + QString part2 = d->line.mid(after_command+1); + int i; + // search for next non-space position + for (i = after_command+1; + i < d->line.length() && d->line.at(i).isSpace(); + ++i) {} + if (type == FunctionWithArguments) { + if (i < d->line.length()) { + newline = part1+QLatin1Char('(')+part2; + newindex = index; + } else { + newline = part1+QLatin1String("()")+part2; + newindex = index; + } + } else /*type == FunctionWithoutArguments*/ { + if (i < d->line.length() && d->line.at(i) == QLatin1Char(')')) { + newline = part1+QLatin1Char('(')+part2; + newindex = index+i-after_command; + } else { + newline = part1+QLatin1String("()")+part2; + newindex = index+1; + } + } + } else { + QString part2 = d->line.mid(after_command); + if (type == FunctionWithArguments) { + newline = part1+QLatin1String("()")+part2; + newindex = index; + } else /*type == FunctionWithoutArguments*/ { + newline = part1+QLatin1String("()")+part2; + newindex = index+1; + } + } + emit lineDone(newline, newindex); +} + +void CompletionObject::completeKeywordLine() +{ + QString keyword = d->identifier; + int after_command = d->position + d->command.length(); + int newindex = d->position + keyword.length() + 1; + QString part1 = d->line.left(d->position) + keyword; + QString part2 = d->line.mid(after_command); + if (after_command < d->line.length() && d->line.at(after_command) == QLatin1Char(' ')) + emit lineDone(part1+part2, newindex); + else + emit lineDone(part1+QLatin1Char(' ')+part2, newindex); +} + +void CompletionObject::completeVariableLine() +{ + QString var = d->identifier; + int after_command = d->position + d->command.length(); + QString newline = d->line.left(d->position) + var + d->line.mid(after_command); + int newindex = d->position + var.length(); + emit lineDone(newline, newindex); +} + +void CompletionObject::completeUnknownLine() +{ + // identifiers of unknown type are completed like variables + completeVariableLine(); +} + + diff --git a/src/lib/completionobject.h b/src/lib/completionobject.h new file mode 100644 index 0000000..cda6f0c --- /dev/null +++ b/src/lib/completionobject.h @@ -0,0 +1,225 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _COMPLETIONOBJECT_H +#define _COMPLETIONOBJECT_H + +#include + +#include "cantor_export.h" + +namespace Cantor +{ +class CompletionObjectPrivate; +class Session; + +/** + * This Object is used to provide a Tab Completion, in an asynchronous way. + * Each backend, supporting tab completion, needs to provide their own + * CompletionObject, that reimplements the fetching of the completions + * and emits done() as soon as the completions are available + * + * @author Alexander Rieder + */ +class CANTOR_EXPORT CompletionObject : public KCompletion +{ + Q_OBJECT + public: + /** + * Constructor + * @param parent the session, this object belongs to + */ + explicit CompletionObject(Session* parent); + ///Destructor + ~CompletionObject() override; + + enum LineCompletionMode { + PreliminaryCompletion, ///< Only insert the completion + FinalCompletion ///< also add () for functions, etc + }; + + /** + * Returns a list of completions + * @return a list of completions + */ + QStringList completions() const; + /** + * Returns the last completion + * @return the last completion + */ + QString completion() const; + /** + * returns the command, this completion is for + * @return the command, this completion is for + */ + QString command() const; + /** + * returns the session, this object belongs to + * @return the session, this object belongs to + */ + Session* session() const; + + /** + * Sets the line and cursor index at which a completion should be found + * This triggers an asynchronous fetching of completions, + * which emits done() when done. + * @param line the line that is to be completed + * @param index the cursor position in line + */ + void setLine(const QString& line, int index); + /** + * Takes the changed line and updates the command accordingly. + * This triggers an asynchronous fetching of completions, + * which emits done() when done. + * @param line the line that is to be completed + * @param index the cursor position in line + */ + void updateLine(const QString& line, int index); + /** + * Takes a completion and a completion mode and triggers and calculates + * the new line with this completion. If the completion mode is + * FinalCompletion some postprocessing is done asynchronously. + * Emits lineDone when finished. + * @param comp the completion that's to be processed + * @param mode the mode of completion. Can be PreliminaryCompletion + * (insert only) or FinalCompletion (also add () for functions, etc.) + */ + void completeLine(const QString& comp, LineCompletionMode mode); + + protected: + + enum IdentifierType { + VariableType, ///< a variable + FunctionWithArguments, ///< a function that takes arguments + FunctionType = FunctionWithArguments, ///< an alias for function with arguments + FunctionWithoutArguments, ///< a function that takes no arguments + KeywordType, ///< a keyword + UnknownType ///< no identifier type was found + }; + /** + * returns the identifier for fetchIdentifierType + * @return the identifier for fetchIdentifierType + */ + QString identifier() const; + + /** + * Sets the completions + * @param completions list of possible completions + */ + void setCompletions(const QStringList& completions); + /** + * sets the command/command-part + * @param cmd the command/command-part + */ + void setCommand(const QString& cmd); + /** + * Find an identifier in cmd that ends at index + * @param cmd the command + * @param index the index to look at + */ + virtual int locateIdentifier(const QString& cmd, int index) const; + /** + * return true if c may be used in identifier names + * @param c the character + */ + virtual bool mayIdentifierContain(QChar c) const; + /** + * return true if identifier names can begin with c + * @param c the character + */ + virtual bool mayIdentifierBeginWith(QChar c) const; + /** + * Completes line with function identifier and emits lineDone with the + * completed line. Helper function for completeLine. + * @param type whether the function takes arguments, default: FunctionWithArguments + */ + void completeFunctionLine(IdentifierType type = FunctionWithArguments); + /** + * Completes line with keyword identifier and emits lineDone with the + * completed line. Helper function for completeLine. + */ + void completeKeywordLine(); + /** + * Completes line with variable identifier and emits lineDone with the + * completed line. Helper function for completeLine. + */ + void completeVariableLine(); + /** + * Completes line with identifier of unknown type and emits lineDone with + * the completed line. Helper function for completeLine. + */ + void completeUnknownLine(); + protected Q_SLOTS: + /** + * This function should be reimplemented to start the actual fetching + * of the completions. It can be asynchronous. + * Remember to emit fetchingDone, if the fetching is complete + */ + virtual void fetchCompletions() = 0; + /** + * Fetch the identifier type of d->identifier; reimplemented in + * the backends. Emit fetchingTypeDone when done. + */ + virtual void fetchIdentifierType(); + /** + * Find the completion. To be called when fetching is done. + * Emits done() when done. + */ + void findCompletion(); + /** + * Calls the appropriate complete*Line based on type + * @param type the identifier type found in line() + */ + void completeLineWithType(Cantor::CompletionObject::IdentifierType type); + /** + * Handle a completion request after a opening parenthesis. + * @param type the type of the identifier before the parenthesis + */ + void handleParenCompletionWithType(Cantor::CompletionObject::IdentifierType type); + Q_SIGNALS: + /** + * indicates that the fetching of completions is done + */ + void fetchingDone(); + /** + * indicates that the type of identifier() was found and passes the + * type as an argument + * @param type the identifier type + */ + void fetchingTypeDone(Cantor::CompletionObject::IdentifierType type); + /** + * indicates that the possible completions and a common completion string + * have been found + */ + void done(); + /** + * emitted when the line completion is done, passes the new line and + * the cursor index + * @param line the new line + * @param index the new cursor index + */ + void lineDone(QString line, int index); + private: + CompletionObjectPrivate* d; +}; + +} + +#endif /* _COMPLETIONOBJECT_H */ diff --git a/src/lib/config-cantorlib.h.cmake b/src/lib/config-cantorlib.h.cmake new file mode 100644 index 0000000..70dfdd8 --- /dev/null +++ b/src/lib/config-cantorlib.h.cmake @@ -0,0 +1 @@ +#cmakedefine WITH_EPS 1 diff --git a/src/lib/defaulthighlighter.cpp b/src/lib/defaulthighlighter.cpp new file mode 100644 index 0000000..ee09dab --- /dev/null +++ b/src/lib/defaulthighlighter.cpp @@ -0,0 +1,460 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2006 David Saxton +*/ + +#include "defaulthighlighter.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Cantor; + +struct HighlightingRule +{ + QRegExp regExp; + QTextCharFormat format; +}; + +bool operator==(const HighlightingRule& rule1, const HighlightingRule& rule2) +{ + return rule1.regExp == rule2.regExp; +} + +struct PairOpener { + PairOpener() : position(-1), type(-1) { } + PairOpener(int p, int t) : position(p), type(t) { } + + int position; + int type; +}; + + +class Cantor::DefaultHighlighterPrivate +{ + public: + QTextCursor cursor; + + //Character formats to use for the highlighting + QTextCharFormat functionFormat; + QTextCharFormat variableFormat; + QTextCharFormat objectFormat; + QTextCharFormat keywordFormat; + QTextCharFormat numberFormat; + QTextCharFormat operatorFormat; + QTextCharFormat errorFormat; + QTextCharFormat commentFormat; + QTextCharFormat stringFormat; + QTextCharFormat matchingPairFormat; + QTextCharFormat mismatchingPairFormat; + + int lastBlockNumber; + int lastPosition; + bool suppressRuleChangedSignal; + // each two consecutive items build a pair + QList pairs; + + QList regExpRules; + QHash wordRules; +}; + +DefaultHighlighter::DefaultHighlighter(QObject* parent) + : QSyntaxHighlighter(parent), + d(new DefaultHighlighterPrivate) +{ + d->cursor = QTextCursor(); + d->lastBlockNumber=-1; + d->lastPosition=-1; + d->suppressRuleChangedSignal = false; + + addPair(QLatin1Char('('), QLatin1Char(')')); + addPair(QLatin1Char('['), QLatin1Char(']')); + addPair(QLatin1Char('{'), QLatin1Char('}')); + + updateFormats(); + connect(qApp, SIGNAL(paletteChanged(QPalette)), + this, SLOT(updateFormats())); +} + +DefaultHighlighter::~DefaultHighlighter() +{ + delete d; +} + +void DefaultHighlighter::setTextItem(QGraphicsTextItem* item) +{ + d->cursor = item->textCursor(); + setDocument(item->document()); + // make sure every item is connected only once + item->disconnect(this, SLOT(positionChanged(QTextCursor))); + // QGraphicsTextItem has no signal cursorPositionChanged, but item really + // is a WorksheetTextItem + connect(item, SIGNAL(cursorPositionChanged(QTextCursor)), + this, SLOT(positionChanged(QTextCursor))); + + d->lastBlockNumber = -1; + d->lastPosition = -1; +} + +bool DefaultHighlighter::skipHighlighting(const QString& text) +{ + return text.isEmpty(); +} + +void DefaultHighlighter::highlightBlock(const QString& text) +{ + //qDebug() << text; + const QTextCursor& cursor = d->cursor; + d->lastBlockNumber = cursor.blockNumber(); + + if (skipHighlighting(text)) + return; + + highlightPairs(text); + highlightWords(text); + highlightRegExps(text); +} + +void DefaultHighlighter::addPair(QChar openSymbol, QChar closeSymbol) +{ + Q_ASSERT(!d->pairs.contains(openSymbol)); + Q_ASSERT(!d->pairs.contains(closeSymbol)); + d->pairs << openSymbol << closeSymbol; +} + +void DefaultHighlighter::highlightPairs(const QString& text) +{ + //qDebug() << text; + const QTextCursor& cursor = d->cursor; + int cursorPos = -1; + if (cursor.blockNumber() == currentBlock().blockNumber() ) { + cursorPos = cursor.position() - currentBlock().position(); + // when text changes, this will be called before the positionChanged signal + // gets emitted. Hence update the position so we don't highlight twice + d->lastPosition = cursor.position(); + } + + QStack opened; + + for (int i = 0; i < text.size(); ++i) { + int idx = d->pairs.indexOf(text[i]); + if (idx == -1) + continue; + if (idx % 2 == 0) { //opener of a pair + opened.push(PairOpener(i, idx)); + } else if (opened.isEmpty()) { //closer with no previous opener + setFormat(i, 1, errorFormat()); + } else if (opened.top().type == idx - 1) { //closer with matched opener + int openPos = opened.pop().position; + if (cursorPos != -1 && + (openPos == cursorPos || openPos == cursorPos - 1 || + i == cursorPos || i == cursorPos - 1)) { + setFormat(openPos, 1, matchingPairFormat()); + setFormat(i, 1, matchingPairFormat()); + } + } else { //closer with mismatching opener + int openPos = opened.pop().position; + setFormat(openPos, 1, mismatchingPairFormat()); + setFormat(i, 1, mismatchingPairFormat()); + } + } + + // handled unterminated pairs + while (!opened.isEmpty()) { + int position = opened.pop().position; + setFormat(position, 1, errorFormat()); + } + +} + +void DefaultHighlighter::highlightWords(const QString& text) +{ + //qDebug() << "DefaultHighlighter::highlightWords"; + + const QStringList& words = text.split(QRegExp(QLatin1String("\\b")), QString::SkipEmptyParts); + int count; + int pos = 0; + + const int n = words.size(); + for (int i = 0; i < n; ++i) + { + count = words[i].size(); + QString word = words[i]; + + //kind of a HACK: + //look at previous words, if they end with allowed characters, + //prepend them to the current word. This allows for example + //to highlight words that start with a "Non-word"-character + //e.g. %pi in the scilab backend. + //qDebug() << "nonSeparatingCharacters().isNull(): " << nonSeparatingCharacters().isNull(); + if(!nonSeparatingCharacters().isNull()) + { + for(int j = i - 1; j >= 0; j--) + { + //qDebug() << "j: " << j << "w: " << words[j]; + const QString& w = words[j]; + const QString exp = QString::fromLatin1("(%1)*$").arg(nonSeparatingCharacters()); + //qDebug() << "exp: " << exp; + int idx = w.indexOf(QRegExp(exp)); + const QString& s = w.mid(idx); + //qDebug() << "s: " << s; + + if(s.size() > 0) + { + pos -= s.size(); + count += s.size(); + word = s + word; + } else{ + break; + } + } + } + + word = word.trimmed(); + + //qDebug() << "highlighing: " << word; + + if (d->wordRules.contains(word)) + { + setFormat(pos, count, d->wordRules[word]); + } + + pos += count; + } +} + +void DefaultHighlighter::highlightRegExps(const QString& text) +{ + foreach (const HighlightingRule& rule, d->regExpRules) + { + int index = rule.regExp.indexIn(text); + while (index >= 0) { + int length = rule.regExp.matchedLength(); + setFormat(index, length, rule.format); + index = rule.regExp.indexIn(text, index + length); + } + } +} + +QTextCharFormat DefaultHighlighter::functionFormat() const +{ + return d->functionFormat; +} + +QTextCharFormat DefaultHighlighter::variableFormat() const +{ + return d->variableFormat; +} + +QTextCharFormat DefaultHighlighter::objectFormat() const +{ + return d->objectFormat; +} + +QTextCharFormat DefaultHighlighter::keywordFormat() const +{ + return d->keywordFormat; +} + +QTextCharFormat DefaultHighlighter::numberFormat() const +{ + return d->numberFormat; +} + +QTextCharFormat DefaultHighlighter::operatorFormat() const +{ + return d->operatorFormat; +} + +QTextCharFormat DefaultHighlighter::errorFormat() const +{ + return d->errorFormat; +} + +QTextCharFormat DefaultHighlighter::commentFormat() const +{ + return d->commentFormat; +} + +QTextCharFormat DefaultHighlighter::stringFormat() const +{ + return d->stringFormat; +} + +QTextCharFormat DefaultHighlighter::matchingPairFormat() const +{ + return d->matchingPairFormat; +} + +QTextCharFormat DefaultHighlighter::mismatchingPairFormat() const +{ + return d->mismatchingPairFormat; +} + +void DefaultHighlighter::updateFormats() +{ + //initialize char-formats + KColorScheme scheme(QPalette::Active); + + d->functionFormat.setForeground(scheme.foreground(KColorScheme::LinkText)); + d->functionFormat.setFontWeight(QFont::DemiBold); + + d->variableFormat.setForeground(scheme.foreground(KColorScheme::ActiveText)); + + d->objectFormat.setForeground(scheme.foreground(KColorScheme::NormalText)); + d->objectFormat.setFontWeight(QFont::Bold); + + d->keywordFormat.setForeground(scheme.foreground(KColorScheme::NeutralText)); + d->keywordFormat.setFontWeight(QFont::Bold); + + d->numberFormat.setForeground(scheme.foreground(KColorScheme::NeutralText)); + + d->operatorFormat.setForeground(scheme.foreground(KColorScheme::NormalText)); + d->operatorFormat.setFontWeight(QFont::Bold); + + d->errorFormat.setForeground(scheme.foreground(KColorScheme::NormalText)); + d->errorFormat.setUnderlineColor(scheme.foreground(KColorScheme::NegativeText).color()); + d->errorFormat.setUnderlineStyle(QTextCharFormat::SpellCheckUnderline); + + d->commentFormat.setForeground(scheme.foreground(KColorScheme::InactiveText)); + + d->stringFormat.setForeground(scheme.foreground(KColorScheme::PositiveText)); + + d->matchingPairFormat.setForeground(scheme.foreground(KColorScheme::NeutralText)); + d->matchingPairFormat.setBackground(scheme.background(KColorScheme::NeutralBackground)); + + d->mismatchingPairFormat.setForeground(scheme.foreground(KColorScheme::NegativeText)); + d->mismatchingPairFormat.setBackground(scheme.background(KColorScheme::NegativeBackground)); +} + + +void DefaultHighlighter::positionChanged(const QTextCursor& cursor) +{ + if (!cursor.isNull() && cursor.document() != document()) + // A new item notified us, but we did not yet change our document. + // We are waiting for that to happen. + return; + + d->cursor = cursor; + if ( (cursor.isNull() || cursor.blockNumber() != d->lastBlockNumber) && + d->lastBlockNumber >= 0 ) { + // remove highlight from last focused block + rehighlightBlock(document()->findBlockByNumber(d->lastBlockNumber)); + } + + if (cursor.isNull()) { + d->lastBlockNumber = -1; + d->lastPosition = -1; + return; + } + + d->lastBlockNumber = cursor.blockNumber(); + + if ( d->lastPosition == cursor.position() ) { + return; + } + + rehighlightBlock(cursor.block()); + d->lastPosition = cursor.position(); +} + +void DefaultHighlighter::addRule(const QString& word, const QTextCharFormat& format) +{ + d->wordRules[word] = format; + if (!d->suppressRuleChangedSignal) + emit rulesChanged(); +} + +void DefaultHighlighter::addRule(const QRegExp& regexp, const QTextCharFormat& format) +{ + HighlightingRule rule = { regexp, format }; + d->regExpRules.removeAll(rule); + d->regExpRules.append(rule); + if (!d->suppressRuleChangedSignal) + emit rulesChanged(); +} + +void DefaultHighlighter::removeRule(const QString& word) +{ + d->wordRules.remove(word); + if (!d->suppressRuleChangedSignal) + emit rulesChanged(); +} + +void DefaultHighlighter::removeRule(const QRegExp& regexp) +{ + HighlightingRule rule = { regexp, QTextCharFormat() }; + d->regExpRules.removeAll(rule); + if (!d->suppressRuleChangedSignal) + emit rulesChanged(); +} + +void DefaultHighlighter::addRules(const QStringList& conditions, const QTextCharFormat& format) +{ + typename QStringList::const_iterator i = conditions.constBegin(); + typename QStringList::const_iterator end = conditions.constEnd(); + d->suppressRuleChangedSignal = true; + for (;i != end; ++i) + { + addRule(*i, format); + } + d->suppressRuleChangedSignal = false; + emit rulesChanged(); +} + +void DefaultHighlighter::addFunctions(const QStringList& functions) +{ + addRules(functions, functionFormat()); +} + +void DefaultHighlighter::addKeywords(const QStringList& keywords) +{ + addRules(keywords, keywordFormat()); +} + +void DefaultHighlighter::addVariables(const QStringList& variables) +{ + addRules(variables, variableFormat()); +} + +void DefaultHighlighter::removeRules(const QStringList& conditions) +{ + typename QStringList::const_iterator i = conditions.constBegin(); + typename QStringList::const_iterator end = conditions.constEnd(); + d->suppressRuleChangedSignal = true; + for (;i != end; ++i) + { + removeRule(*i); + } + d->suppressRuleChangedSignal = false; + emit rulesChanged(); +} + +QString DefaultHighlighter::nonSeparatingCharacters() const +{ + return QString(); +} + + diff --git a/src/lib/defaulthighlighter.h b/src/lib/defaulthighlighter.h new file mode 100644 index 0000000..53b945c --- /dev/null +++ b/src/lib/defaulthighlighter.h @@ -0,0 +1,184 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef DEFAULTHIGHLIGHTER_H +#define DEFAULTHIGHLIGHTER_H + +#include "cantor_export.h" + +#include + +class QGraphicsTextItem; + +namespace Cantor +{ +class DefaultHighlighterPrivate; + +/** + * The DefaultHighlighter is an implementation QSyntaxHighlighter. + * It covers most common cases of syntax highlighting for Cantor's command entries. + * + * When creating a custom highlighter, for example for a new backend, you should use + * the provided functions addPairs(), addRule() and/or addRules(). + * + * If you need more specific functionality, subclass highlightBlock(). Usually it's a good idea to also call + * DefaultHighlighter's implementation from it. + * + * @author Alexander Rieder + */ + +class CANTOR_EXPORT DefaultHighlighter : public QSyntaxHighlighter +{ + Q_OBJECT + public: + explicit DefaultHighlighter(QObject* parent); + ~DefaultHighlighter() override; + + /** + * Change the item being highlighted. + */ + void setTextItem(QGraphicsTextItem* item); + + public Q_SLOTS: + /** + * Called when the cursor moved. Rehighlights accordingly. + */ + void positionChanged(const QTextCursor&); + + protected: + /** + * This method is called by Cantor's KTextEdit and is where all the highlighting must take place. + * The default implementation calls highlightPairs(), highlightWords() and highlightRegExps(). + * + */ + void highlightBlock(const QString& text) override; + + bool skipHighlighting(const QString& text); + + QTextCharFormat functionFormat() const; + QTextCharFormat variableFormat() const; + QTextCharFormat objectFormat() const; + QTextCharFormat keywordFormat() const; + QTextCharFormat numberFormat() const; + QTextCharFormat operatorFormat() const; + QTextCharFormat errorFormat() const; + QTextCharFormat commentFormat() const; + QTextCharFormat stringFormat() const; + QTextCharFormat matchingPairFormat() const; + QTextCharFormat mismatchingPairFormat() const; + + /** + * Call this to add a pair of symbols for highlighting. + * The default implementation of the class already adds (), {} and [], so no need to add those. + * For example, if you wanted to highlight angle-brackets, you would use: + * @code + * addPair('<', '>'); + * @endcode + * @param openSymbol the opening symbol of the pair + * @param closeSymbol the closing symbol of the pair + * @sa highlightPairs + */ + void addPair(QChar openSymbol, QChar closeSymbol); + /** + * Highlights all instances of the @p word in the text with the specified @p format + * @param word the word to highlight + * @param format the format to be used for displaying the word + */ + void addRule(const QString& word, const QTextCharFormat& format); + /** + * Highlights all parts of the text matched by the regular expression @p regexp in the text + * with the specified @p format + * @param regexp the regular expression used to look for matches + * @param format the format used to display the matching parts of the text + */ + void addRule(const QRegExp& regexp, const QTextCharFormat& format); + + /** + * Convenience method, highlights all items in @p conditions with the specified @p format + * @code + * QStringList greenWords; + * greenWords << "tree" << "forest" << "grass"; + * addRules(greenWords, greenWordFormat); + * @endcode + * @param conditions any Qt container of QRegExp or QString. + * @param format the format used to display the matching parts of the text + */ + void addRules(const QStringList& conditions, const QTextCharFormat& format); + /** + * Convenience method, equivalent to @code addRules(functions, functionFormat()) @endcode + */ + void addFunctions(const QStringList& functions); + /** + * Convenience method, equivalent to @code addRules(variables, variableFormat()) @endcode + */ + void addVariables(const QStringList& variables); + /** + * Convenience method, equivalent to @code addRules(keywords, keywordFormat()) @endcode + */ + void addKeywords(const QStringList& keywords); + + /** + * Removes any rules previously added for the word @p word + */ + void removeRule(const QString& word); + /** + * Removes any rules previously added for the regular expression @p regexp + */ + void removeRule(const QRegExp& regexp); + /** + * Convenience method, removes all rules with conditions from @p conditions + * @sa removeRule, addRules + */ + void removeRules(const QStringList& conditions); + + /** + * Highlight pairs added with addPair() + * @sa addPair + */ + void highlightPairs(const QString& text); + /** + * Highlights words added with addRule() + * @sa addRule, addRules + */ + void highlightWords(const QString& text); + /** + * Highlights all matches from regular expressions added with addRule() + * @sa addRule, addRules + */ + void highlightRegExps(const QString& text); + + /** + * Returns a string that contains a regular expression that matches for characters thar are allowed inside + * words for this backend. For example, maxima or scilab allow % at the beginning of variable names + */ + virtual QString nonSeparatingCharacters() const; + + private Q_SLOTS: + void updateFormats(); + + Q_SIGNALS: + void rulesChanged(); + + private: + DefaultHighlighterPrivate* d; +}; +} + +#endif diff --git a/src/lib/defaultvariablemodel.cpp b/src/lib/defaultvariablemodel.cpp new file mode 100644 index 0000000..29c55bf --- /dev/null +++ b/src/lib/defaultvariablemodel.cpp @@ -0,0 +1,193 @@ +/* + 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. + + --- + Copyright (C) 2010 Miha Čančula + */ + +#include "defaultvariablemodel.h" +#include +#include +#include "extension.h" +#include "backend.h" + +namespace Cantor +{ + +class DefaultVariableModelPrivate +{ +public: + QList variables; + + Session* session; + VariableManagementExtension* extension; +}; + +DefaultVariableModel::DefaultVariableModel(Session* session): QAbstractTableModel(session), +d_ptr(new DefaultVariableModelPrivate) +{ + Q_D(DefaultVariableModel); + d->session = session; + if (session) + { + d->extension = dynamic_cast(session->backend()->extension(QLatin1String("VariableManagementExtension"))); + } + qDebug() << d->session << d->extension; +} + +int DefaultVariableModel::columnCount(const QModelIndex& parent) const +{ + Q_UNUSED(parent); + return ColumnCount; +} + +int DefaultVariableModel::rowCount(const QModelIndex& parent) const +{ + if (parent.isValid()) + { + return 0; + } + else + { + Q_D(const DefaultVariableModel); + return d->variables.size(); + } +} + +QVariant DefaultVariableModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if(role==Qt::DisplayRole && orientation==Qt::Horizontal) { + switch(section) { + case NameColumn: + return i18nc("@title:column", "Name"); + + case ValueColumn: + return i18nc("@title:column", "Value"); + break; + } + } + return QVariant(); +} + +Qt::ItemFlags DefaultVariableModel::flags(const QModelIndex& index) const +{ + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} + +QVariant DefaultVariableModel::data(const QModelIndex& index, int role) const +{ + if (role != Qt::DisplayRole || !index.isValid()) + { + return QVariant(); + } + + Q_D(const DefaultVariableModel); + switch (index.column()) + { + case NameColumn: + return QVariant(d->variables[index.row()].name); + case ValueColumn: + return QVariant(d->variables[index.row()].value); + default: + return QVariant(); + } +} + +bool DefaultVariableModel::setData(const QModelIndex& index, const QVariant& value, int role) +{ + if(role!=Qt::EditRole || !value.isValid() || !index.isValid()) + { + return false; + } + + Q_D(const DefaultVariableModel); + if(index.column() == ValueColumn) + { + // Changing values + QString name = data(index.sibling(index.row(), NameColumn)).toString(); + d->session->evaluateExpression(d->extension->setValue(name, value.toString()), Expression::DeleteOnFinish); + return true; + } + else if(index.column() == NameColumn) + { + // Renaming => copy it, then delete the old one + QString oldName = data(index).toString(); + QString variableValue = data(index.sibling(index.row(), ValueColumn)).toString(); + d->session->evaluateExpression(d->extension->addVariable(value.toString(), variableValue), Expression::DeleteOnFinish); + d->session->evaluateExpression(d->extension->removeVariable(oldName), Expression::DeleteOnFinish); + return true; + } + return false; +} + +void DefaultVariableModel::addVariable(const QString& name, const QString& value) +{ + Variable v; + v.name = name; + v.value = value; + addVariable(v); +} + +void DefaultVariableModel::addVariable(const Cantor::DefaultVariableModel::Variable& variable) +{ + Q_D(DefaultVariableModel); + if ( d->variables.contains(variable) ) + { + removeVariable(variable); + } + beginInsertRows(QModelIndex(), d->variables.size(), d->variables.size()); + d->variables.append(variable); + endInsertRows(); +} + +void DefaultVariableModel::removeVariable(const QString& name) +{ + Variable v; + v.name = name; + removeVariable(v); +} + +void DefaultVariableModel::removeVariable(const Cantor::DefaultVariableModel::Variable& variable) +{ + Q_D(DefaultVariableModel); + int row = d->variables.indexOf(variable); + if(row==-1) + return; + beginRemoveRows(QModelIndex(), row, row); + d->variables.removeAt(row); + endRemoveRows(); +} + +void DefaultVariableModel::clearVariables() +{ + Q_D(DefaultVariableModel); + beginResetModel(); + d->variables.clear(); + endResetModel(); +} + +Session* DefaultVariableModel::session() const +{ + Q_D(const DefaultVariableModel); + return d->session; +} + +bool operator==(const Cantor::DefaultVariableModel::Variable& one, const Cantor::DefaultVariableModel::Variable& other) +{ + return one.name == other.name; +} + +} diff --git a/src/lib/defaultvariablemodel.h b/src/lib/defaultvariablemodel.h new file mode 100644 index 0000000..cdbae98 --- /dev/null +++ b/src/lib/defaultvariablemodel.h @@ -0,0 +1,143 @@ +/* + 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. + + --- + Copyright (C) 2010 Miha Čančula + */ + +#ifndef CANTOR_DEFAULTVARIABLEMODEL_H +#define CANTOR_DEFAULTVARIABLEMODEL_H + +#include +#include "session.h" +#include "expression.h" + +namespace Cantor { + +class DefaultVariableModelPrivate; + +/** + * @brief + * This DefaultVariableModel class is an implementation of QAbstractItemModel + * that can be used with the Variable Manager plugin. + * + * For most uses the addVariable(), removeVariable() and clearVariables() methods are sufficient. + * They can be used from session (directly or by connecting signals to them), or called from + * a subclass. + * + * DefaultVariableModel uses the session to run expressions for changing variables, and it + * gets the commands from the backend's VariableManagementExtension. + * If you do not want this behavior, you can subclass it and reimplement data() and/or setData(). + * + * @see Session::variableModel() + */ +class CANTOR_EXPORT DefaultVariableModel : public QAbstractTableModel +{ + Q_OBJECT + Q_PROPERTY(Session* session READ session) + +public: + + /** + * A structure representing a variable. + */ + struct Variable + { + /** + * The variable's name + */ + QString name; + /** + * The variable's value, represented as a string + */ + QString value; + }; + + /** + * Default constructor + * If you are constructing a DefaultVariableModel without subclassing, the @p session must be valid + * and its backends must support a VariableManagementExtension. + * + * This requirement can be avoided by reimplementing setData() in a subclass. + * + * @param session the session this Model belongs to, also becomes the Model's parent. + */ + explicit DefaultVariableModel(Session* session); + ~DefaultVariableModel() override = default; + + /** + * Get the session which created this Model and whose variables it contains + * @return the session + */ + Session* session() const; + +public Q_SLOTS: + /** + * Adds a variable to the model. + * If a variable with the same name already exists, it will be overwritten. + * @param name the name of the variable + * @param value the value of the variable + */ + void addVariable(const QString& name, const QString& value); + /** + * Convenience method, equivalent to addVariable(variable.name, variable.value) + * @param variable the variable to add + */ + void addVariable(const Cantor::DefaultVariableModel::Variable& variable); + /** + * Remove the variable @p name from the model. + * If a variable with the specified @p name doesn't exists, this method does nothing. + * @param name the name of the variable to remove + */ + void removeVariable(const QString& name); + /** + * Convenience method, equivalent to removeVariable(variable.name) + * @param variable the variable to remove + */ + void removeVariable(const Cantor::DefaultVariableModel::Variable& variable); + /** + * Clears all variables from the model + */ + void clearVariables(); + + +protected: + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; + + int columnCount(const QModelIndex& parent = QModelIndex()) const override; + int rowCount(const QModelIndex& parent = QModelIndex()) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; + Qt::ItemFlags flags(const QModelIndex& index) const override; + + enum Column + { + NameColumn = 0, + ValueColumn = 1, + ColumnCount = 2 + }; + +private: + + DefaultVariableModelPrivate* const d_ptr; + Q_DECLARE_PRIVATE(DefaultVariableModel) +}; + +bool operator==(const Cantor::DefaultVariableModel::Variable& one, const Cantor::DefaultVariableModel::Variable& other); + +} + +#endif // CANTOR_DEFAULTVARIABLEMODEL_H diff --git a/src/lib/directives/axisrange.ui b/src/lib/directives/axisrange.ui new file mode 100644 index 0000000..52f254a --- /dev/null +++ b/src/lib/directives/axisrange.ui @@ -0,0 +1,76 @@ + + + AxisRangeControl + + + + 0 + 0 + 400 + 300 + + + + + + + + + From: + + + + + + + -65536.000000000000000 + + + 65536.000000000000000 + + + + + + + + + + + To: + + + + + + + -65536.000000000000000 + + + 65536.000000000000000 + + + 100.000000000000000 + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/lib/directives/plotdirectives.cpp b/src/lib/directives/plotdirectives.cpp new file mode 100644 index 0000000..e7e3d3c --- /dev/null +++ b/src/lib/directives/plotdirectives.cpp @@ -0,0 +1,110 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#include "directives/plotdirectives.h" +#include "ui_axisrange.h" +#include "ui_plottitle.h" + +#include + +namespace Cantor +{ + +// FIXME maybe this belongs to headers rather +class PlotTitleControl : public AdvancedPlotExtension::DirectiveControl +{ + public: // FIXME: move window title setting upward, or maybe not + PlotTitleControl(QWidget *parent) : AbstractParent(parent) { setWindowTitle(ki18n("Main title").toString()); } + + AdvancedPlotExtension::PlotDirective* produceDirective() const override + { + return new PlotTitleDirective(titleEdit->text()); + } +}; + +class AbscissScaleControl : public AdvancedPlotExtension::DirectiveControl +{ + public: + AbscissScaleControl(QWidget *parent) : AbstractParent(parent) { setWindowTitle(ki18n("Abscissa scale").toString()); } + + AdvancedPlotExtension::PlotDirective* produceDirective() const override + { + return new AbscissScaleDirective(minEdit->value(),maxEdit->value()); + } +}; + +class OrdinateScaleControl : public AdvancedPlotExtension::DirectiveControl +{ + public: + OrdinateScaleControl(QWidget *parent) : AbstractParent(parent) { setWindowTitle(ki18n("Ordinate scale").toString()); } + + AdvancedPlotExtension::PlotDirective* produceDirective() const override + { + return new OrdinateScaleDirective(minEdit->value(),maxEdit->value()); + } +}; + + +const QString& PlotTitleDirective::title() const +{ + return m_title; +} + +PlotTitleDirective::PlotTitleDirective(const QString& str) : m_title(str) +{ +} + +AdvancedPlotExtension::DirectiveProducer* PlotTitleDirective::widget(QWidget* parent) +{ + return new PlotTitleControl(parent); +} + +double AbstractScaleDirective::min() const +{ + return m_min; +} +double AbstractScaleDirective::max() const +{ + return m_max; +} + +AbstractScaleDirective::AbstractScaleDirective(double a,double b) : m_min(a),m_max(b) +{ +} + +AbscissScaleDirective::AbscissScaleDirective(double a,double b) : AbstractScaleDirective(a,b) +{ +} + +AdvancedPlotExtension::DirectiveProducer* AbscissScaleDirective::widget(QWidget* parent) +{ + return new AbscissScaleControl(parent); +} + +OrdinateScaleDirective::OrdinateScaleDirective(double a,double b) : AbstractScaleDirective(a,b) +{ +} + +AdvancedPlotExtension::DirectiveProducer* OrdinateScaleDirective::widget(QWidget* parent) +{ + return new OrdinateScaleControl(parent); +} + +} diff --git a/src/lib/directives/plotdirectives.h b/src/lib/directives/plotdirectives.h new file mode 100644 index 0000000..f1f0e05 --- /dev/null +++ b/src/lib/directives/plotdirectives.h @@ -0,0 +1,75 @@ +/* + 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. + + --- + Copyright (C) 2010 Oleksiy Protas + */ + +#ifndef _PLOT_DIRECTIVES_H +#define _PLOT_DIRECTIVES_H + +#include "extension.h" +#include "cantor_export.h" + +//TODO: comments +namespace Cantor +{ + class CANTOR_EXPORT PlotTitleDirective : public AdvancedPlotExtension::PlotDirective + { + public: + PLOT_DIRECTIVE_DISPATCHING(PlotTitleDirective); + const QString& title() const; + explicit PlotTitleDirective(const QString& str); + static AdvancedPlotExtension::DirectiveProducer* widget(QWidget* parent); + + private: + QString m_title; + + }; + + class CANTOR_EXPORT AbstractScaleDirective : public AdvancedPlotExtension::PlotDirective + { + public: + PLOT_DIRECTIVE_DISPATCHING(AbstractScaleDirective); + double min() const; + double max() const; + + protected: + AbstractScaleDirective(double a,double b); + + private: + double m_min; + double m_max; + }; + + class CANTOR_EXPORT OrdinateScaleDirective : public AbstractScaleDirective + { + public: + PLOT_DIRECTIVE_DISPATCHING(OrdinateScaleDirective); + OrdinateScaleDirective(double a,double b); + static AdvancedPlotExtension::DirectiveProducer* widget(QWidget* parent); + }; + + class CANTOR_EXPORT AbscissScaleDirective : public AbstractScaleDirective + { + public: + PLOT_DIRECTIVE_DISPATCHING(AbscissScaleDirective); + AbscissScaleDirective(double a,double b); + static AdvancedPlotExtension::DirectiveProducer* widget(QWidget* parent); + }; +} + +#endif // _PLOT_DIRECTIVES_H diff --git a/src/lib/directives/plottitle.ui b/src/lib/directives/plottitle.ui new file mode 100644 index 0000000..dfd22fb --- /dev/null +++ b/src/lib/directives/plottitle.ui @@ -0,0 +1,45 @@ + + + PlotTitleControl + + + + 0 + 0 + 400 + 300 + + + + + + + + + Plot title: + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/lib/epsresult.cpp b/src/lib/epsresult.cpp new file mode 100644 index 0000000..cf5ae57 --- /dev/null +++ b/src/lib/epsresult.cpp @@ -0,0 +1,99 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "epsresult.h" +using namespace Cantor; + +#include + +#include +#include +#include + +class Cantor::EpsResultPrivate{ + public: + QUrl url; +}; + + +EpsResult::EpsResult(const QUrl& url) : d(new EpsResultPrivate) +{ + d->url=url; +#ifndef WITH_EPS + qDebug()<<"Creating an EpsResult in an environment compiled without EPS support!"; +#endif +} + +EpsResult::~EpsResult() +{ + delete d; +} + +QString EpsResult::toHtml() +{ + return QString::fromLatin1("").arg(d->url.url()); +} + +QString EpsResult::toLatex() +{ + return QString::fromLatin1(" \\begin{center} \n \\includegraphics[width=12cm]{%1}\n \\end{center}").arg(d->url.fileName()); +} + +QVariant EpsResult::data() +{ + return QVariant(d->url); +} + +QUrl EpsResult::url() +{ + return d->url; +} + +int EpsResult::type() +{ + return EpsResult::Type; +} + +QString EpsResult::mimeType() +{ + return QLatin1String("image/x-eps"); +} + +QDomElement EpsResult::toXml(QDomDocument& doc) +{ + qDebug()<<"saving imageresult "<url.fileName()); + qDebug()<<"done"; + + return e; +} + +void EpsResult::saveAdditionalData(KZip* archive) +{ + archive->addLocalFile(d->url.toLocalFile(), d->url.fileName()); +} + +void EpsResult::save(const QString& filename) +{ + //just copy over the eps file.. + KIO::file_copy(d->url, QUrl::fromLocalFile(filename), -1, KIO::HideProgressInfo); +} diff --git a/src/lib/epsresult.h b/src/lib/epsresult.h new file mode 100644 index 0000000..66bc4e6 --- /dev/null +++ b/src/lib/epsresult.h @@ -0,0 +1,58 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _EPSRESULT_H +#define _EPSRESULT_H + +#include "result.h" +#include "cantor_export.h" +#include + +namespace Cantor +{ +class EpsResultPrivate; + +class CANTOR_EXPORT EpsResult : public Result +{ + public: + enum {Type=5}; + explicit EpsResult( const QUrl& url); + ~EpsResult() override; + + QString toHtml() override; + QString toLatex() override; + QVariant data() override; + QUrl url() override; + + int type() override; + QString mimeType() override; + + QDomElement toXml(QDomDocument& doc) override; + void saveAdditionalData(KZip* archive) override; + + void save(const QString& filename) override; + + private: + EpsResultPrivate* d; +}; + +} + +#endif /* _EPSRESULT_H */ diff --git a/src/lib/expression.cpp b/src/lib/expression.cpp new file mode 100644 index 0000000..fe3ab9d --- /dev/null +++ b/src/lib/expression.cpp @@ -0,0 +1,294 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "expression.h" +#include "latexrenderer.h" +using namespace Cantor; + +#include + +#include "session.h" +#include "result.h" +#include "textresult.h" +#include "imageresult.h" +#include "latexresult.h" +#include "settings.h" + +#include +#include +#include +#include + +#include +#include + +class Cantor::ExpressionPrivate +{ +public: + ExpressionPrivate() : id(-1), status(Expression::Done), session(nullptr), + finishingBehavior(Expression::DoNotDelete), internal(false), fileWatcher(nullptr) + { + } + + int id; + QString command; + QString error; + QList information; + QVector results; + Expression::Status status; + Session* session; + Expression::FinishingBehavior finishingBehavior; + bool internal; + QFileSystemWatcher* fileWatcher; +}; + +static const QString tex=QLatin1String("\\documentclass[12pt,fleqn]{article} \n "\ + "\\usepackage{latexsym,amsfonts,amssymb,ulem} \n "\ + "\\usepackage[dvips]{graphicx} \n "\ + "\\setlength\\textwidth{5in} \n "\ + "\\setlength{\\parindent}{0pt} \n "\ + "%1 \n "\ + "\\pagestyle{empty} \n "\ + "\\begin{document} \n "\ + "%2 \n "\ + "\\end{document}\n"); + + +Expression::Expression( Session* session, bool internal ) : QObject( session ), + d(new ExpressionPrivate) +{ + d->session=session; + d->internal = internal; + if (!internal && session) + d->id=session->nextExpressionId(); + else + d->id = -1; +} + +Expression::Expression( Session* session, bool internal, int id ) : QObject( session ), d(new ExpressionPrivate) +{ + d->session = session; + d->internal = internal; + d->id = id; +} + +Expression::~Expression() +{ + qDeleteAll(d->results); + if (d->fileWatcher) + delete d->fileWatcher; + + delete d; +} + +void Expression::setCommand(const QString& command) +{ + d->command=command; +} + +QString Expression::command() +{ + return d->command; +} + +void Expression::setErrorMessage(const QString& error) +{ + d->error=error; +} + +QString Expression::errorMessage() +{ + return d->error; +} + +void Expression::setResult(Result* result) +{ + clearResults(); + addResult(result); +} + +void Expression::addResult(Result* result) +{ + if(result!=nullptr) + { + qDebug()<<"setting result to a type "<type()<<" result"; + #ifdef WITH_EPS + //If it's text, and latex typesetting is enabled, render it + if ( session() && + session()->isTypesettingEnabled()&& + result->type()==TextResult::Type && + dynamic_cast(result)->format()==TextResult::LatexFormat && + !result->toHtml().trimmed().isEmpty() && + finishingBehavior()!=DeleteOnFinish && + !isInternal() + ) + { + renderResultAsLatex(result); + return; + } + #endif + } + + d->results << result; + emit gotResult(); +} + +void Expression::clearResults() +{ + qDeleteAll(d->results); + d->results.clear(); + emit resultsCleared(); +} + +void Expression::removeResult(Result* result) +{ + int index = d->results.indexOf(result); + d->results.remove(index); + delete result; + emit resultRemoved(index); +} + +void Expression::replaceResult(int index, Result* result) +{ + if (result) + { + d->results.insert(index, result); + emit resultReplaced(index); + } +} + +Result* Expression::result() +{ + if (!d->results.isEmpty()) + return d->results.first(); + else + return nullptr; +} + +const QVector& Expression::results() const +{ + return d->results; +} + +void Expression::setStatus(Expression::Status status) +{ + d->status=status; + emit statusChanged(status); + + if(status==Expression::Done&&d->finishingBehavior==Expression::DeleteOnFinish) + deleteLater(); +} + +Expression::Status Expression::status() +{ + return d->status; +} + +Session* Expression::session() +{ + return d->session; +} +void Expression::renderResultAsLatex(Result* result) +{ + LatexRenderer* renderer=new LatexRenderer(this); + renderer->setLatexCode(result->data().toString().trimmed()); + renderer->addHeader(additionalLatexHeaders()); + + connect(renderer, &LatexRenderer::done, [=] { latexRendered(renderer, result); }); + connect(renderer, &LatexRenderer::error, [=] { latexRendered(renderer, result); }); + + renderer->render(); +} + +void Expression::latexRendered(LatexRenderer* renderer, Result* result) +{ + qDebug()<<"rendered a result to "<imagePath(); + //replace the textresult with the rendered latex image result + //ImageResult* latex=new ImageResult( d->latexFilename ); + if(renderer->renderingSuccessful()) + { + if (result->type() == TextResult::Type) + { + TextResult* r=dynamic_cast(result); + LatexResult* latex=new LatexResult(r->data().toString().trimmed(), QUrl::fromLocalFile(renderer->imagePath()), r->plain()); + addResult( latex ); + } + else if (result->type() == LatexResult::Type) + { + LatexResult* previousLatexResult=dynamic_cast(result); + LatexResult* latex=new LatexResult(previousLatexResult->data().toString().trimmed(), QUrl::fromLocalFile(renderer->imagePath()), previousLatexResult->plain()); + addResult( latex ); + } + }else + { + //if rendering with latex was not successful, just use the plain text version + //if available + TextResult* r=dynamic_cast(result); + addResult(new TextResult(r->plain())); + qDebug()<<"error rendering latex: "<errorMessage(); + } + + delete result; + + renderer->deleteLater(); +} + +void Expression::addInformation(const QString& information) +{ + d->information.append(information); +} + +QString Expression::additionalLatexHeaders() +{ + return QString(); +} + +QFileSystemWatcher* Expression::fileWatcher() { + if (!d->fileWatcher) + d->fileWatcher = new QFileSystemWatcher(); + + return d->fileWatcher; +} + +int Expression::id() +{ + return d->id; +} + +void Expression::setId(int id) +{ + d->id=id; + emit idChanged(); +} + +void Expression::setFinishingBehavior(Expression::FinishingBehavior behavior) +{ + d->finishingBehavior=behavior; +} + +Expression::FinishingBehavior Expression::finishingBehavior() +{ + return d->finishingBehavior; +} + +bool Expression::isInternal() +{ + return d->internal; +} diff --git a/src/lib/expression.h b/src/lib/expression.h new file mode 100644 index 0000000..f806e79 --- /dev/null +++ b/src/lib/expression.h @@ -0,0 +1,278 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _EXPRESSION_H +#define _EXPRESSION_H + +#include +#include + +#include "cantor_export.h" + +class QFileSystemWatcher; +class KZip; + +/** + * Namespace collecting all Classes of the Cantor Libraries + */ +namespace Cantor +{ +class Session; +class Result; +class LatexRenderer; +class ExpressionPrivate; + +/** + * An Expression object is used, to store the information needed when running a command of a Session + * Evaluation of Expression is an asynchronous process in most cases, so most of the members + * of this class are not useful directly after its construction. Therefore there are signals + * indicating, when the Expression goes through the different stages of the Running process. + * An Expression is never constructed directly, but by using Session::evaluateExpression() + * + * @author Alexander Rieder + */ +class CANTOR_EXPORT Expression : public QObject +{ + Q_OBJECT + public: + enum Status{ Computing, ///< The Expression is still being computed + Done, ///< The Running of the Expression is finished successfully + Error, ///< An Error occurred when running the Expression + Interrupted, ///< The Expression was interrupted by the user while running + Queued ///< The Expression is in expression queue, waited for Computing + }; + + /** + * Enum indicating how this Expression behaves on finishing + */ + enum FinishingBehavior { + DoNotDelete, ///< This Expression will not be deleted. This is the normal behaviour + DeleteOnFinish /** < The Object will delete itself when finished. This is used for fire-and-forget commands. + * All output/results will be dropped + */ + }; + /** + * Expression constructor. Should only be called from Session::evaluateExpression + * @param session the session, this Expression belongs to + * @param internal \c true if this expression is internal expression + */ + explicit Expression( Session* session, bool internal = false); + /** + * destructor + */ + ~Expression() override; + + /** + * Evaluate the Expression. before this is called, you should set the Command first + * This method can be implemented asynchronous, thus the Evaluation doesn't need to happen in the method, + * It can also only be scheduled for evaluating. + * @see setCommand() + */ + virtual void evaluate() = 0; + /** + * Interrupt the running of the Expression. + * This should set the state to Interrupted. + */ + virtual void interrupt() = 0; + + /** + * Returns the unique id of the Expression + * or -1 for internal expressions + * @return the unique id of the Expression + */ + int id(); + + /** + * set the id of the Expression. It should be unique + * @param id the new Id + */ + void setId(int id); + + /** + * set the finishing behaviour + * @param behavior the new Finishing Behaviour + */ + void setFinishingBehavior(FinishingBehavior behavior); + + /** + * get the Expressions finishing behaviour + * @return the current finishing behaviour + */ + FinishingBehavior finishingBehavior(); + + /** + * Sets the command, represented by this Expression + * @param cmd the command + */ + void setCommand( const QString& cmd ); + + /** + * Returns the command, represented by this Expression + * @return the command, represented by this Expression + */ + QString command(); + + /** + * Adds some additional information/input to this expression. + * this is needed, when the Expression has emitted the needsAdditionalInformation signal, + * and the user has answered the question. This is used for e.g. if maxima asks whether + * n+1 is zero or not when running the command "integrate(x^n,x)" + * This method is part of the InteractiveMode feature + */ + virtual void addInformation(const QString& information); + + /** + * Sets the error message + * @param cmd the error message + * @see errorMessage() + */ + void setErrorMessage( const QString& cmd); + + /** + * returns the Error message, if an error occurred during + * the evaluation of the expression. + * @return the error message + */ + QString errorMessage(); + + /** + * The result of this Expression. It can have different types, represented by various + * subclasses of Result, like text, image, etc. + * The result will be null, until the computation is completed. + * When the result changes, the gotResult() signal is emitted. + * The Result object is owned by the Expression, and will get deleted, as + * soon as the Expression dies, or newer results appear. + * @return the result of the Expression, 0 if it isn't yet set + */ + Result* result(); + + /*! + * in case the expression has multiple outputs/results, those can be obtained with this functions. + * Everything else said for \sa result() applies here too. + * @return the vector with results, or an empty vector if nor results are available yet. + */ + const QVector& results() const; + + /** + * Deletes the result of this expression. + * + */ + void removeResult(Result* result); + + /** + * Deletes the all results of this expression. + * + */ + void clearResults(); + + /** + * Returns the status of this Expression + * @return the status of this Expression + */ + Status status(); + + /** + * Set the status + * statusChanged will be emitted + * @param status the new status + */ + void setStatus(Status status); + + /** + * Returns the Session, this Expression belongs to + */ + Session* session(); + + /** + * returns whether or not this expression is internal, or + * comes from the user + */ + bool isInternal(); + + Q_SIGNALS: + /** + * the Id of this Expression changed + */ + void idChanged(); + /** + * A Result of the Expression has arrived + */ + void gotResult(); + /** + * emitted when the results of the expression were deleted. + * @see clearResults() + */ + void resultsCleared(); + /** + * emitted when the results of the expression were deleted. + * @see clearResult(Result* result) + */ + void resultRemoved(int index); + /** + * emitted when the result at the position @c index was replaced by a new result. + */ + void resultReplaced(int index); + /** + * the status of the Expression has changed. + * @param status the new status + */ + void statusChanged(Cantor::Expression::Status status); + /** + * the Expression needs more information for the evaluation + * @see addInformation() + * @param question question, the user needs to answer + */ + void needsAdditionalInformation(const QString& question); + + //These are protected, because only subclasses will handle results/status changes + protected: + // Protected constructor, useful for derived classes with own id setting strategy + Expression(Session* session, bool internal, int id); + + /** + * Set the result of the Expression. + * this will cause gotResult() to be emitted + * The old result will be deleted, and the Expression + * takes over ownership of the result object, taking + * care of deleting it. + * @param result the new result + */ + void setResult(Result* result); + + void addResult(Result*); + + void replaceResult(int index, Result* result); + + //returns a string of latex commands, that is inserted into the header. + //used for example if special packages are needed + virtual QString additionalLatexHeaders(); + + QFileSystemWatcher* fileWatcher(); + + private: + void renderResultAsLatex(Result* result); + void latexRendered(LatexRenderer* renderer, Result* result); + + private: + ExpressionPrivate* d; +}; + +} +#endif /* _EXPRESSION_H */ diff --git a/src/lib/extension.cpp b/src/lib/extension.cpp new file mode 100644 index 0000000..9059373 --- /dev/null +++ b/src/lib/extension.cpp @@ -0,0 +1,149 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "extension.h" +using namespace Cantor; + +#include + +#define EXTENSION_CONSTRUCTORS(name) name::name(QObject* parent) : Extension(QLatin1String(#name),parent) {} \ + name::~name() {} + + +Extension::Extension(const QString& name, QObject* parent) : QObject(parent) +{ + setObjectName(name); +} + +EXTENSION_CONSTRUCTORS(HistoryExtension) +EXTENSION_CONSTRUCTORS(ScriptExtension) +EXTENSION_CONSTRUCTORS(CASExtension) +EXTENSION_CONSTRUCTORS(CalculusExtension) +EXTENSION_CONSTRUCTORS(PlotExtension) +EXTENSION_CONSTRUCTORS(AdvancedPlotExtension) +EXTENSION_CONSTRUCTORS(LinearAlgebraExtension) +EXTENSION_CONSTRUCTORS(VariableManagementExtension) +EXTENSION_CONSTRUCTORS(PackagingExtension) + +//implement this here, as it's ";" most of the time +QString ScriptExtension::commandSeparator() +{ + return QLatin1String(";\n"); +} + +//implement this here, as it's "#" most of the time +QString ScriptExtension::commentStartingSequence() +{ + return QLatin1String("#"); +} + +//implement this here, as it's "" most of the time +QString ScriptExtension::commentEndingSequence() +{ + return QLatin1String(""); +} + + +//some convenience functions, but normally backends have a special command to create +//these matrices/vectors. + +QString LinearAlgebraExtension::nullVector(int size, VectorType type) +{ + QStringList values; + for (int i=0;i& directives) const +{ + QString params = QLatin1String(""); + foreach (PlotDirective* dir, directives) + { + QString param=dispatchDirective(*dir); + if (param.length()>0) + params+=separatorSymbol()+param; + } + return plotCommand() + QLatin1String("(") + expression + params + QLatin1String(")"); +} + +QString AdvancedPlotExtension::dispatchDirective(const PlotDirective& directive) const +{ + const AcceptorBase* acceptor=dynamic_cast(this); + if (acceptor==nullptr) + { + qDebug()<<"Plotting extension does not support any directives, but was asked to process one"; + return QLatin1String(""); + } + return directive.dispatch(*acceptor); +} + +QString AdvancedPlotExtension::separatorSymbol() const +{ + return QLatin1String(","); +} + +QWidget* AdvancedPlotExtension::PlotDirective::widget(QWidget* parent) +{ + return new QWidget(parent); +} + +AdvancedPlotExtension::AcceptorBase::AcceptorBase() : m_widgets() +{ +} + +const QVector& AdvancedPlotExtension::AcceptorBase::widgets() const +{ + return m_widgets; +} + +AdvancedPlotExtension::DirectiveProducer::DirectiveProducer(QWidget* parent) : QWidget(parent) +{ +} diff --git a/src/lib/extension.h b/src/lib/extension.h new file mode 100644 index 0000000..3d46a22 --- /dev/null +++ b/src/lib/extension.h @@ -0,0 +1,493 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _EXTENSION_H +#define _EXTENSION_H + +#include +#include +#include +#include +#include +#include "cantor_export.h" + +namespace Cantor +{ +/** + * This is the base class for all Extensions. + * An Extension provides a set of Methods to + * accomplish specific tasks. This is used to + * abstract away the backends syntax for common + * tasks like solving equations etc. to be able + * to provide Backend independent Dialogs + * + * @author Alexander Rieder + */ +class CANTOR_EXPORT Extension : public QObject +{ + Q_OBJECT + public: + ///Default constructor + Extension( const QString& name, QObject* parent ); + ~Extension() override = default; +}; + + +//Some basic interfaces for extensions + +/** + * An Extension providing commands for command history + */ +class CANTOR_EXPORT HistoryExtension : public Extension +{ + Q_OBJECT + public: + explicit HistoryExtension(QObject* parent); + ~HistoryExtension() override; + public Q_SLOTS: + /** + * Returns a command that retrieves the last result + * @return command that retrieves the last result + */ + virtual QString lastResult() = 0; +}; + +/** + * An Extension providing commands to interact + * with external scripts + */ +class CANTOR_EXPORT ScriptExtension : public Extension +{ + Q_OBJECT + public: + explicit ScriptExtension(QObject* parent); + ~ScriptExtension() override; + public Q_SLOTS: + /** + * returns the command for running a script + * @param path path to the script file + * @return command for running a script + */ + virtual QString runExternalScript(const QString& path) = 0; + /** + * returns the file filter used for Script Files (e.g. *.py) + * @return file filter used for Script Files (e.g. *.py) + */ + virtual QString scriptFileFilter() = 0; + /** + * returns the name of the language to use for syntax highlighting + * in the script editor (e.g. python). The value returned must match + * the name attribute from the xml language description in KTexteditor. + * @return name of the language to use for syntax highlighting (e.g. python) + */ + virtual QString highlightingMode() = 0; + /** + * returns a string used to separate commands (usually ;) + * @return a string used to separate commands (usually ;) + */ + virtual QString commandSeparator(); + /** + * returns a string used to start a comment (usually #) + * @return a string used to start a comment (usually #) + */ + virtual QString commentStartingSequence(); + /** + * returns a string used to end a comment (usually "") + * @return a string used to end a comment (usually "") + */ + virtual QString commentEndingSequence(); +}; + +/** + * An extension providing the basic computations + * in computer algebra, like solving, simplifying + * etc +**/ +class CANTOR_EXPORT CASExtension : public Extension +{ + Q_OBJECT + public: + explicit CASExtension(QObject* parent); + ~CASExtension() override; + + public Q_SLOTS: + /** + * returns the command for solving a set of equations + * @param equations a list of equations + * @param variables a list of variables that should be solved for + * @return command for solving a set of equations + */ + virtual QString solve(const QStringList& equations, const QStringList& variables) = 0; + /** + * returns the command for simplifying an expression + * @param expression the expression that should be simplified + * @return command for simplifying the expression + */ + virtual QString simplify(const QString& expression) = 0; + /** + * returns the command for expanding an expression + * @param expression the expression that should be expanded + * @return command for expanded the expression + */ + virtual QString expand(const QString& expression) = 0; +}; + +/** + * An extension providing the basic calculus + * stuff like limits, differentiate, integrate etc. + */ +class CANTOR_EXPORT CalculusExtension : public Extension +{ + Q_OBJECT + public: + explicit CalculusExtension(QObject* parent); + ~CalculusExtension() override; + + public Q_SLOTS: + /** + * returns the command for calculating a limit if an expression + * @param expression the expression + * @param variable the variable + * @param limit the value, the variable approaches + * @return the limit of the expression + */ + virtual QString limit(const QString& expression, const QString& variable, const QString& limit) = 0; + /** + * returns the command for calculating a differential + * @param function the function + * @param variable the variable, after which should be differentiated + * @param times how often should be differentiated + * @return the command to compute the differential + */ + virtual QString differentiate(const QString& function,const QString& variable, int times) = 0; + /** + * returns the command for calculating an integral + * @param function the function + * @param variable the variable, after which should be integrated + * @return the command to compute the integrate + */ + virtual QString integrate(const QString& function, const QString& variable) = 0; + /** + * returns the command for calculating a definite integral + * @param function the function + * @param variable the variable, after which should be integrated + * @param left the left border of the integral + * @param right the right border of the integral + * @return the command to compute the integrate + */ + virtual QString integrate(const QString& function,const QString& variable, const QString& left, const QString& right) = 0; +}; + +/** + * An extension providing basic plotting facilities + */ +class CANTOR_EXPORT PlotExtension : public Extension +{ + Q_OBJECT + public: + typedef QPair Interval; + typedef QPair VariableParameter; + + explicit PlotExtension(QObject* parent); + ~PlotExtension() override; + + public Q_SLOTS: + /** + * returns the command for plotting a 2 dimensional function. + * @param function the function to plot + * @param variable the variable + * @param left the left border of the plot + * @param right the right border of the plot + * @return the command for plotting + */ + virtual QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) = 0; + /** + * returns the command for plotting a 3 dimensional function. + * @param function the function to plot + * @param var1 the parameters for Variable1 (name, interval) + * @param var2 the parameters for Variable2 (name, interval) + * @return the command for plotting + */ + virtual QString plotFunction3d(const QString& function, const VariableParameter& var1, const VariableParameter& var2) = 0; +}; + +#define PLOT_DIRECTIVE_DISPATCHING(x) QString dispatch(const Cantor::AdvancedPlotExtension::AcceptorBase& acc) const \ + { \ + const Cantor::AdvancedPlotExtension::DirectiveAcceptor* adaptor= \ + dynamic_cast*>(&acc); \ + if (adaptor==NULL) { qDebug()<<"Backend incapable of processing directives of type "#x; return QLatin1String(""); } \ + else \ + return adaptor->accept(*this); \ + } + +/** + * An extension providing advanced plotting facilities. Will supersede PlotExtension + */ +class CANTOR_EXPORT AdvancedPlotExtension : public Extension +{ + Q_OBJECT + public: + explicit AdvancedPlotExtension(QObject* parent); + ~AdvancedPlotExtension() override; + + // TODO comment + + class PlotDirective; + + // TODO move the hell out of here + class CANTOR_EXPORT DirectiveProducer : public QWidget + { + public: + explicit DirectiveProducer(QWidget* parent); + virtual PlotDirective* produceDirective() const=0; + }; + + template class DirectiveControl : protected UI, public DirectiveProducer + { + public: + DirectiveControl(QWidget* parent) : DirectiveProducer(parent) { UI::setupUi(this); } + protected: + using AbstractParent = DirectiveControl; + }; + + class CANTOR_EXPORT AcceptorBase + { + public: + /** + * utilitary typename for easing the code + */ + using widgetProc = DirectiveProducer *(*)(QWidget *); + + /** + * returns a constant reference to the list of widget generating procedures + * which contains means of creating all the widgets a backend knows how to process + * @return the constant reference to a QVector of QWidget* (*)(QWidget*) pointers + */ + const QVector& widgets() const; + + protected: + /** + * constructor only allowed for derived classes + **/ + AcceptorBase(); + virtual ~AcceptorBase() = default; + + QVector m_widgets; + }; + + template class DirectiveAcceptor : virtual public AcceptorBase + { + + public: + /** + * virtual interface to acceptor function mechanics + * @param directive the directive to process + * @return the parameter corresponding the directive + */ + virtual QString accept(const Directive& directive) const=0; + + protected: + /** + * constructor only allowed for derived classes + **/ + DirectiveAcceptor(); + }; + + class CANTOR_EXPORT PlotDirective + { + public: + virtual ~PlotDirective() = default; + + /** + * creates a new widget for editing the value and returns the pointer to it + * @param parent the pointer to parent widget passed to newly created widget + * @return pointer to the newly-created widget + */ + static QWidget* widget(QWidget* parent); + + /** + * in order to make dual dispatching this should be present in any derived class + * without virtual keyword and with correct class name + **/ + virtual PLOT_DIRECTIVE_DISPATCHING(PlotDirective); + // TODO: find a workaround not to put class names manually + + protected: + /** + * only derived classes may construct + **/ + PlotDirective() = default; + }; + + public Q_SLOTS: + /** + * returns the command for plotting a 2 dimensional data set. + * @param expression the expression to plot + * @param directives the array of directives toward the generator + * @return the command for plotting + */ + QString plotFunction2d(const QString& expression, const QVector& directives) const; + + /** + * returns the parameter expression according to a directive. + * @param directive the directive toward the generator + * @return the parameter for plotting + */ + QString dispatchDirective(const Cantor::AdvancedPlotExtension::PlotDirective& directive) const; + + protected: + /** + * returns the command name for plotting a 2 dimensional data set. + * @return the command for plotting + */ + virtual QString plotCommand() const=0; + /** + * returns the separator symbol in a plotting command. + * @return the separator symbol or string + */ + virtual QString separatorSymbol() const; +}; + +template AdvancedPlotExtension::DirectiveAcceptor::DirectiveAcceptor() +{ + m_widgets.push_back(&Directive::widget); +} + +/** + * An extension for basic Linear Algebra + */ +class CANTOR_EXPORT LinearAlgebraExtension : public Extension +{ + Q_OBJECT + public: + enum VectorType { ColumnVector, RowVector }; + using Matrix = QList; + + explicit LinearAlgebraExtension(QObject* parent); + ~LinearAlgebraExtension() override; + + public Q_SLOTS: + //Commands to create Vectors/Matrices + /** + * creates a vector with the given entries + * @param entries the entries of the new vector + * @param type the type of the vector (row/column) + * @return the command for creating the vector + */ + virtual QString createVector(const QStringList& entries, Cantor::LinearAlgebraExtension::VectorType type) = 0; + /** + * creates a null vector, of the given size/type + * @param size size of the vector + * @param type type of the vector + * @return the command used for creating a nullvector + **/ + virtual QString nullVector(int size, Cantor::LinearAlgebraExtension::VectorType type); + /** + * creates a matrix with the given entries + * @param matrix the entries of the matrix + * @return the command to create this matrix + */ + virtual QString createMatrix(const Matrix& matrix) = 0; + /** + * creates an identity matrix of the given size + * @param size size of the matrix + * @return the command used to create the matrix + */ + virtual QString identityMatrix(int size); + /** + * creates a null matrix, of the given size + * @param rows number of rows + * @param columns number of columns + * @return the command to create this matrix + */ + virtual QString nullMatrix(int rows,int columns); + + //basic functions + /** + * compute the rank of a matrix + * @param matrix the name of the matrix, the rank should be computed of + * @return the command for calculating the rank + */ + virtual QString rank(const QString& matrix) = 0; + /** + * invert a given matrix + * @param matrix the name of the matrix, that should be inverted + * @return the command for inverting the matrix + */ + virtual QString invertMatrix(const QString& matrix) = 0; + /** + * calculate the characteristic polynom of a matrix + * @param matrix the name of the matrix, the charpoly should be computed of + * @return the command + */ + virtual QString charPoly(const QString& matrix) = 0; + /** + * calculate the eigen vectors of a matrix + * @param matrix the name of the matrix, the eigenvectors should be computed of + * @return the command + */ + virtual QString eigenVectors(const QString& matrix) = 0; + /** + * calculate the eigen values of a matrix + * @param matrix the name of the matrix, the eigenvalues should be computed of + * @return the command + */ + virtual QString eigenValues(const QString& matrix) = 0; + +}; + +class CANTOR_EXPORT VariableManagementExtension : public Extension +{ + Q_OBJECT + public: + explicit VariableManagementExtension( QObject* parent ); + ~VariableManagementExtension() override; + + public Q_SLOTS: + virtual QString addVariable(const QString& name, const QString& value) = 0; + virtual QString setValue(const QString& name,const QString& value) = 0; + virtual QString removeVariable(const QString& name) = 0; + + virtual QString saveVariables(const QString& fileName) = 0; + virtual QString loadVariables(const QString& fileName) = 0; + virtual QString clearVariables() = 0; +}; + +/** + * An extension for library/module import + */ +class CANTOR_EXPORT PackagingExtension : public Extension +{ + Q_OBJECT + public: + explicit PackagingExtension(QObject* parent); + ~PackagingExtension() override; + + public Q_SLOTS: + /** + * import library/module + * @param package the library/module name + * @return the command for import library/module + */ + virtual QString importPackage(const QString& package) = 0; +}; + +} +#endif /* _EXTENSION_H */ diff --git a/src/lib/helpresult.cpp b/src/lib/helpresult.cpp new file mode 100644 index 0000000..3a54b68 --- /dev/null +++ b/src/lib/helpresult.cpp @@ -0,0 +1,80 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "helpresult.h" +using namespace Cantor; + +class Cantor::HelpResultPrivate +{ +public: + HelpResultPrivate() = default; + ~HelpResultPrivate() = default; + + QString html; +}; + +HelpResult::HelpResult(const QString& text, bool isHtml) : d(new HelpResultPrivate) +{ + QString html; + if (!isHtml) + { + html = text.toHtmlEscaped(); + html.replace(QLatin1Char(' '), QLatin1String(" ")); + html.replace(QLatin1Char('\n'), QLatin1String("
      \n")); + } + else + html = text; + + d->html = html; +} + +int HelpResult::type() +{ + return HelpResult::Type; +} + +QDomElement HelpResult::toXml(QDomDocument& doc) +{ + //No need to save results of a help request + QDomElement e=doc.createElement(QLatin1String("Result")); + e.setAttribute(QLatin1String("type"), QLatin1String("help")); + return e; +} + +QString HelpResult::toHtml() +{ + return d->html; +} + +QVariant HelpResult::data() +{ + return QVariant(d->html); +} + +QString HelpResult::mimeType() +{ + return QLatin1String("text/html"); +} + +void HelpResult::save(const QString& filename) +{ + //No need to save results of a help request + Q_UNUSED(filename); +} diff --git a/src/lib/helpresult.h b/src/lib/helpresult.h new file mode 100644 index 0000000..8422c91 --- /dev/null +++ b/src/lib/helpresult.h @@ -0,0 +1,56 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _HELPRESULT_H +#define _HELPRESULT_H + +#include "textresult.h" + +namespace Cantor +{ + +/** this is basically a TextResult, just with a different Type + so that the application can show it in another way than the + normal results +**/ +class HelpResultPrivate; +class CANTOR_EXPORT HelpResult: public Result +{ + public: + enum {Type=3}; + explicit HelpResult( const QString& text, bool isHtml=false); + ~HelpResult() override = default; + + QVariant data() override; + QString toHtml() override; + + int type() override; + QString mimeType() override; + + QDomElement toXml(QDomDocument& doc) override; + void save(const QString& filename) override; + + private: + HelpResultPrivate* d; +}; + +} + +#endif /* _HELPRESULT_H */ diff --git a/src/lib/imageresult.cpp b/src/lib/imageresult.cpp new file mode 100644 index 0000000..819bbe6 --- /dev/null +++ b/src/lib/imageresult.cpp @@ -0,0 +1,115 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "imageresult.h" +using namespace Cantor; + +#include +#include +#include +#include + +class Cantor::ImageResultPrivate +{ + public: + ImageResultPrivate() = default; + + QUrl url; + QImage img; + QString alt; +}; + +ImageResult::ImageResult(const QUrl &url, const QString& alt) : d(new ImageResultPrivate) +{ + d->url=url; + d->alt=alt; +} + +ImageResult::~ImageResult() +{ + delete d; +} + +QString ImageResult::toHtml() +{ + return QString::fromLatin1("\"%2\"/").arg(d->url.toLocalFile(), d->alt); +} + +QString ImageResult::toLatex() +{ + return QString::fromLatin1(" \\begin{center} \n \\includegraphics[width=12cm]{%1} \n \\end{center}").arg(d->url.fileName()); +} + +QVariant ImageResult::data() +{ + if(d->img.isNull()) + d->img.load(d->url.toLocalFile()); + + return QVariant(d->img); +} + +QUrl ImageResult::url() +{ + return d->url; +} + +int ImageResult::type() +{ + return ImageResult::Type; +} + +QString ImageResult::mimeType() +{ + const QList formats=QImageWriter::supportedImageFormats(); + QString mimetype; + foreach(const QByteArray& format, formats) + { + mimetype+=QLatin1String("image/"+format.toLower()+' '); + } + qDebug()<<"type: "<url.fileName()); + qDebug()<<"done"; + + return e; +} + +void ImageResult::saveAdditionalData(KZip* archive) +{ + archive->addLocalFile(d->url.toLocalFile(), d->url.fileName()); +} + +void ImageResult::save(const QString& filename) +{ + //load into memory and let Qt save it, instead of just copying d->url + //to give possibility to convert file format + QImage img=data().value(); + + img.save(filename); +} + diff --git a/src/lib/imageresult.h b/src/lib/imageresult.h new file mode 100644 index 0000000..9b3dde4 --- /dev/null +++ b/src/lib/imageresult.h @@ -0,0 +1,57 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _IMAGERESULT_H +#define _IMAGERESULT_H + +#include "result.h" +#include + +namespace Cantor +{ +class ImageResultPrivate; + +class CANTOR_EXPORT ImageResult : public Result +{ + public: + enum{Type=2}; + explicit ImageResult( const QUrl& url, const QString& alt=QString()); + ~ImageResult() override; + + QString toHtml() override; + QString toLatex() override; + QVariant data() override; + QUrl url() override; + + int type() override; + QString mimeType() override; + + QDomElement toXml(QDomDocument& doc) override; + void saveAdditionalData(KZip* archive) override; + + void save(const QString& filename) override; + + private: + ImageResultPrivate* d; +}; + +} + +#endif /* _IMAGERESULT_H */ diff --git a/src/lib/latexrenderer.cpp b/src/lib/latexrenderer.cpp new file mode 100644 index 0000000..97af504 --- /dev/null +++ b/src/lib/latexrenderer.cpp @@ -0,0 +1,266 @@ +/* + 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. + + --- + Copyright (C) 2011 Alexander Rieder + */ + +#include "latexrenderer.h" +using namespace Cantor; + +#include +#include +#include +#include +#include +#include + +#include +#include "settings.h" + +class Cantor::LatexRendererPrivate +{ + public: + QString latexCode; + QString header; + LatexRenderer::Method method; + bool isEquationOnly; + LatexRenderer::EquationType equationType; + QString errorMessage; + bool success; + QString latexFilename; +}; + +static const QLatin1String tex("\\documentclass[12pt,fleqn]{article}"\ + "\\usepackage{latexsym,amsfonts,amssymb,ulem}"\ + "\\usepackage{amsmath}"\ + "\\usepackage[dvips]{graphicx}"\ + "\\usepackage[utf8]{inputenc}"\ + "\\usepackage{xcolor}"\ + "\\setlength\\textwidth{5in}"\ + "\\setlength{\\parindent}{0pt}"\ + "%1"\ + "\\pagecolor[rgb]{%2,%3,%4}"\ + "\\pagestyle{empty}"\ + "\\begin{document}"\ + "\\color[rgb]{%5,%6,%7}"\ + "%8"\ + "\\end{document}"); + +static const QLatin1String eqnHeader("\\begin{eqnarray*}%1\\end{eqnarray*}"); +static const QLatin1String inlineEqnHeader("$%1$"); + +LatexRenderer::LatexRenderer(QObject* parent) : QObject(parent), + d(new LatexRendererPrivate) +{ + d->method=LatexMethod; + d->isEquationOnly=false; + d->equationType=InlineEquation; + d->success=false; +} + +LatexRenderer::~LatexRenderer() +{ + delete d; +} + +QString LatexRenderer::latexCode() const +{ + return d->latexCode; +} + +void LatexRenderer::setLatexCode(const QString& src) +{ + d->latexCode=src; +} + +QString LatexRenderer::header() const +{ + return d->header; +} + +void LatexRenderer::addHeader(const QString& header) +{ + d->header.append(header); +} + +void LatexRenderer::setHeader(const QString& header) +{ + d->header=header; +} + +LatexRenderer::Method LatexRenderer::method() const +{ + return d->method; +} + +void LatexRenderer::setMethod(LatexRenderer::Method method) +{ + d->method=method; +} + +void LatexRenderer::setEquationType(LatexRenderer::EquationType type) +{ + d->equationType=type; +} + +LatexRenderer::EquationType LatexRenderer::equationType() const +{ + return d->equationType; +} + + +void LatexRenderer::setErrorMessage(const QString& msg) +{ + d->errorMessage=msg; +} + +QString LatexRenderer::errorMessage() const +{ + return d->errorMessage; +} + +bool LatexRenderer::renderingSuccessful() const +{ + return d->success; +} + +void LatexRenderer::setEquationOnly(bool isEquationOnly) +{ + d->isEquationOnly=isEquationOnly; +} + +bool LatexRenderer::isEquationOnly() const +{ + return d->isEquationOnly; +} + + +QString LatexRenderer::imagePath() const +{ + return d->latexFilename; +} + +void LatexRenderer::render() +{ + switch(d->method) + { + case LatexRenderer::LatexMethod: renderWithLatex(); break; + case LatexRenderer::MmlMethod: renderWithMml(); break; + }; +} + +void LatexRenderer::renderBlocking() +{ + QEventLoop event; + connect(this, SIGNAL(done()), &event, SLOT(quit())); + connect(this, SIGNAL(error()), &event, SLOT(quit())); + + render(); + event.exec(); +} + +void LatexRenderer::renderWithLatex() +{ + qDebug()<<"rendering using latex method"; + QString dir=QStandardPaths::writableLocation(QStandardPaths::TempLocation); + + //Check if the cantor subdir exists, if not, create it + QTemporaryFile *texFile=new QTemporaryFile(dir + QLatin1String("/cantor_tex-XXXXXX.tex")); + texFile->open(); + + KColorScheme scheme(QPalette::Active); + const QColor &backgroundColor=scheme.background().color(); + const QColor &foregroundColor=scheme.foreground().color(); + QString expressionTex=tex; + expressionTex=expressionTex.arg(d->header) + .arg(backgroundColor.redF()).arg(backgroundColor.greenF()).arg(backgroundColor.blueF()) + .arg(foregroundColor.redF()).arg(foregroundColor.greenF()).arg(foregroundColor.blueF()); + if(isEquationOnly()) + { + switch(equationType()) + { + case FullEquation: expressionTex=expressionTex.arg(eqnHeader); break; + case InlineEquation: expressionTex=expressionTex.arg(inlineEqnHeader); break; + } + } + expressionTex=expressionTex.arg(d->latexCode); + +// qDebug()<<"full tex:\n"<write(expressionTex.toUtf8()); + texFile->flush(); + + QString fileName = texFile->fileName(); + qDebug()<<"fileName: "<latexFilename=fileName; + d->latexFilename.replace(QLatin1String(".tex"), QLatin1String(".eps")); + KProcess *p=new KProcess( this ); + p->setWorkingDirectory(dir); + + (*p)<latexCommand()<start(); +} + +void LatexRenderer::convertToPs() +{ + qDebug()<<"converting to ps"; + QString dviFile=d->latexFilename; + dviFile.replace(QLatin1String(".eps"), QLatin1String(".dvi")); + KProcess *p=new KProcess( this ); + qDebug()<<"running: "<dvipsCommand()<<"-E"<<"-o"<latexFilename<dvipsCommand()<latexFilename<start(); +} + +void LatexRenderer::convertingDone() +{ + qDebug()<<"rendered file "<latexFilename; + //cleanup the temp directory a bit... + QString dir=QStandardPaths::writableLocation(QStandardPaths::TempLocation) + QLatin1String("/") + QLatin1String("cantor"); + QStringList unneededExtensions; + unneededExtensions<latexFilename; + s.replace(QLatin1String(".eps"), ext); + QFile f(s); + //f.remove(); + } + + if(QFileInfo(d->latexFilename).exists()) + { + d->success=true; + emit done(); + }else + { + d->success=false; + setErrorMessage(QLatin1String("something is wrong")); + emit error(); + } +} + +void LatexRenderer::renderWithMml() +{ + qDebug()<<"WARNING: MML rendering not implemented yet!"; + emit done(); +} + + diff --git a/src/lib/latexrenderer.h b/src/lib/latexrenderer.h new file mode 100644 index 0000000..5906d21 --- /dev/null +++ b/src/lib/latexrenderer.h @@ -0,0 +1,78 @@ +/* + 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. + + --- + Copyright (C) 2011 Alexander Rieder + */ + +#ifndef _LATEXRENDERER_H +#define _LATEXRENDERER_H + +#include +#include "cantor_export.h" + +namespace Cantor{ +class LatexRendererPrivate; + +class CANTOR_EXPORT LatexRenderer : public QObject +{ + Q_OBJECT + public: + enum Method{ LatexMethod = 0, MmlMethod = 1}; + enum EquationType{ InlineEquation = 0, FullEquation = 1}; + explicit LatexRenderer( QObject* parent = nullptr); + ~LatexRenderer() override; + + QString latexCode() const; + void setLatexCode(const QString& src); + QString header() const; + void addHeader(const QString& header); + void setHeader(const QString& header); + Method method() const; + void setMethod( Method method); + void setEquationOnly(bool isEquationOnly); + bool isEquationOnly() const; + void setEquationType(EquationType type); + EquationType equationType() const; + + QString errorMessage() const; + bool renderingSuccessful() const; + + QString imagePath() const; + + Q_SIGNALS: + void done(); + void error(); + + public Q_SLOTS: + void render(); + + void renderBlocking(); + + private: + void setErrorMessage(const QString& msg); + + private Q_SLOTS: + void renderWithLatex(); + void renderWithMml(); + void convertToPs(); + void convertingDone(); + + private: + LatexRendererPrivate* d; +}; +} +#endif /* _LATEXRENDERER_H */ diff --git a/src/lib/latexresult.cpp b/src/lib/latexresult.cpp new file mode 100644 index 0000000..22bfd97 --- /dev/null +++ b/src/lib/latexresult.cpp @@ -0,0 +1,149 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "latexresult.h" +using namespace Cantor; + +#include +#include +#include + +class Cantor::LatexResultPrivate +{ + public: + LatexResultPrivate() + { + showCode=false; + } + + bool showCode; + QString code; + QString plain; +}; + +LatexResult::LatexResult(const QString& code, const QUrl &url, const QString& plain) : EpsResult( url ), + d(new LatexResultPrivate) +{ + d->code=code; + d->plain=plain; +} + +LatexResult::~LatexResult() +{ + delete d; +} + +int LatexResult::type() +{ + return LatexResult::Type; +} + +QString LatexResult::mimeType() +{ + if(isCodeShown()) + return QLatin1String("text/plain"); + else + return EpsResult::mimeType(); +} + +QString LatexResult::code() +{ + return d->code; +} + +QString LatexResult::plain() +{ + return d->plain; +} + +bool LatexResult::isCodeShown() +{ + return d->showCode; +} + +void LatexResult::showCode() +{ + d->showCode=true; +} + +void LatexResult::showRendered() +{ + d->showCode=false; +} + +QVariant LatexResult::data() +{ + if(isCodeShown()) + return QVariant(code()); + else + return EpsResult::data(); +} + +QString LatexResult::toHtml() +{ + if (isCodeShown()) + { + QString s=code(); + return s.toHtmlEscaped(); + } + else + { + return EpsResult::toHtml(); + } +} + +QString LatexResult::toLatex() +{ + return code(); +} + +QDomElement LatexResult::toXml(QDomDocument& doc) +{ + qDebug()<<"saving textresult "< + */ + +#ifndef _LATEXRESULT_H +#define _LATEXRESULT_H + +#include "epsresult.h" +#include "cantor_export.h" + +namespace Cantor{ +class LatexResultPrivate; + +/**Class used for LaTeX results, it is basically an Eps result, + but it exports a different type, and additionally stores the + LaTeX code, used to generate the Eps, so it can be retrieved + later +**/ +class CANTOR_EXPORT LatexResult : public EpsResult +{ + public: + enum {Type=7}; + LatexResult( const QString& code, const QUrl& url, const QString& plain = QString()); + ~LatexResult() override; + + int type() override; + QString mimeType() override; + + bool isCodeShown(); + void showCode(); + void showRendered(); + + QString code(); + QString plain(); + + QString toHtml() override; + QString toLatex() override; + QVariant data() override; + + QDomElement toXml(QDomDocument& doc) override; + + void save(const QString& filename) override; + + private: + LatexResultPrivate* d; +}; + +} + +#endif /* _LATEXRESULT_H */ diff --git a/src/lib/panelplugin.cpp b/src/lib/panelplugin.cpp new file mode 100644 index 0000000..cfe1a79 --- /dev/null +++ b/src/lib/panelplugin.cpp @@ -0,0 +1,92 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#include "panelplugin.h" +using namespace Cantor; + +#include + +class Cantor::PanelPluginPrivate +{ + public: + QString name; + QStringList requiredExtensions; + Session* session; + QWidget* parentWidget; +}; + +PanelPlugin::PanelPlugin( QObject* parent) : QObject(parent), /* KXMLGUIClient(dynamic_cast(parent)),*/ + d(new PanelPluginPrivate) +{ + d->parentWidget=nullptr; + d->session=nullptr; +} + +PanelPlugin::~PanelPlugin() +{ + delete d; +} + +void PanelPlugin::setParentWidget(QWidget* widget) +{ + d->parentWidget=widget; +} + +QWidget* PanelPlugin::parentWidget() +{ + return d->parentWidget; +} + +void PanelPlugin::setPluginInfo(const KPluginMetaData& info) +{ + d->name=info.name(); + d->requiredExtensions=info.value(QLatin1String("RequiredExtensions")).split(QLatin1Char(',')); +} + +QStringList PanelPlugin::requiredExtensions() +{ + return d->requiredExtensions; +} + +Backend::Capabilities PanelPlugin::requiredCapabilities() +{ + return Backend::Nothing; +} + +QString PanelPlugin::name() +{ + return d->name; +} + +Session* PanelPlugin::session() +{ + return d->session; +} + +void PanelPlugin::setSession(Session* session) +{ + d->session=session; + onSessionChanged(); +} + +void PanelPlugin::onSessionChanged() +{ + +} diff --git a/src/lib/panelplugin.h b/src/lib/panelplugin.h new file mode 100644 index 0000000..1d640a2 --- /dev/null +++ b/src/lib/panelplugin.h @@ -0,0 +1,116 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#ifndef _PANEL_PLUGIN_H +#define _PANEL_PLUGIN_H + +#include +class KPluginMetaData; + +#include "backend.h" + +#include "cantor_export.h" + +namespace Cantor +{ +class Session; +class PanelPluginPrivate; + +/** + * A plugin provides some additional features for the worksheet + */ +class CANTOR_EXPORT PanelPlugin : public QObject +{ + Q_OBJECT + public: + /** + * Create a new PanelPlugin + * @param parent the parent Object @see QObject + **/ + PanelPlugin( QObject* parent ); + /** + * Destructor + */ + ~PanelPlugin() override; + + /** + * Sets the properties of this PanelPlugin + * according to KPluginMetaData + * @param info KPluginMetaData + */ + void setPluginInfo(const KPluginMetaData&); + + /** + * Returns a list of all extensions, the current backend + * must provide to make this PanelPlugin work. If it doesn't + * this PanelPlugin won't be enabled + * @return list of required extensions + */ + QStringList requiredExtensions(); + + + /** + * Returns the capabilities, the current backend + * must provide to make this PanelPlugin work. If it doesn't + * this PanelPlugin won't be enabled + * @return the required capabilities + */ + virtual Backend::Capabilities requiredCapabilities(); + + + /** + * Returns the name of the plugin + * @return name of the plugin + */ + QString name(); + + /** + * returns the widget, provided by this plugin + * @return the widget, provided by this plugin + **/ + virtual QWidget* widget() = 0; + + void setParentWidget(QWidget* widget); + QWidget* parentWidget(); + + /** + * sets the session this plugin operates on + **/ + void setSession(Session* session); + + /** + * returns the session + */ + Session* session(); + + Q_SIGNALS: + void requestRunCommand(const QString& cmd); + void visibilityRequested(); + + protected: + virtual void onSessionChanged(); + + private: + PanelPluginPrivate* d; +}; + +} + +#endif /* _PANEL_PLUGIN_H */ diff --git a/src/lib/panelpluginhandler.cpp b/src/lib/panelpluginhandler.cpp new file mode 100644 index 0000000..754207f --- /dev/null +++ b/src/lib/panelpluginhandler.cpp @@ -0,0 +1,135 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#include "panelpluginhandler.h" +using namespace Cantor; + +#include +#include +#include +#include +#include + +#include "session.h" +#include "panelplugin.h" +#include "backend.h" + +class Cantor::PanelPluginHandlerPrivate +{ + public: + QList plugins; + Cantor::Session* session; +}; + +PanelPluginHandler::PanelPluginHandler( QObject* parent ) : QObject(parent) , + d(new PanelPluginHandlerPrivate) +{ + setObjectName(QLatin1String("PanelPluginHandler")); + d->session=nullptr; +} + +PanelPluginHandler::~PanelPluginHandler() +{ + delete d; +} + +void PanelPluginHandler::loadPlugins() +{ + if(d->session==nullptr) + return; + qDebug()<<"loading panel plugins for session of type "<session->backend()->name(); + + QStringList panelDirs; + foreach(const QString &dir, QCoreApplication::libraryPaths()){ + panelDirs << dir + QDir::separator() + QLatin1String("cantor/panels"); + } + + QPluginLoader loader; + const Cantor::Backend::Capabilities capabilities = d->session->backend()->capabilities(); + const QStringList& extensions = d->session->backend()->extensions(); + foreach(const QString &dir, panelDirs){ + + qDebug() << "dir: " << dir; + QStringList panels; + QDir panelDir = QDir(dir); + + panels = panelDir.entryList(); + + foreach (const QString &panel, panels){ + if (panel==QLatin1String(".") || panel==QLatin1String("..")) + continue; + + loader.setFileName(dir + QDir::separator() + panel); + + if (!loader.load()){ + qDebug() << "Error while loading panel: " << panel; + continue; + } + + KPluginFactory* factory = KPluginLoader(loader.fileName()).factory(); + PanelPlugin* plugin = factory->create(this); + + KPluginMetaData info(loader); + plugin->setPluginInfo(info); + + bool supported=true; + foreach(const QString& req, plugin->requiredExtensions()){ + // FIXME: That req.isEmpty() is there just because Help Panel has req + // empty, returning FALSE when the comparison must to return TRUE. + supported = supported && (extensions.contains(req) || req.isEmpty()); + } + + supported = supported && ( (capabilities & plugin->requiredCapabilities()) == plugin->requiredCapabilities()); + + if(supported) + { + qDebug() << "plugin " << info.name()<<" is supported, requires extensions " << plugin->requiredExtensions(); + d->plugins.append(plugin); + plugin->setSession(d->session); + }else + { + qDebug() << "plugin " << info.name() <<" is not supported"; + plugin->deleteLater(); + } + } + } + + emit pluginsChanged(); +} + +void PanelPluginHandler::setSession(Session* session) +{ + qDeleteAll(d->plugins); + d->plugins.clear(); + d->session=session; + loadPlugins(); +} + +QList PanelPluginHandler::plugins() +{ + return d->plugins; +} + +void PanelPluginHandler::addPlugin(PanelPlugin* plugin) +{ + d->plugins.append(plugin); +} + + diff --git a/src/lib/panelpluginhandler.h b/src/lib/panelpluginhandler.h new file mode 100644 index 0000000..db66b30 --- /dev/null +++ b/src/lib/panelpluginhandler.h @@ -0,0 +1,65 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#ifndef _PANELPLUGINHANDLER_H +#define _PANELPLUGINHANDLER_H + +#include +#include "cantor_export.h" + +namespace Cantor +{ +class PanelPluginHandlerPrivate; +class PanelPlugin; +class Session; + +/** + * Simple interface that exports a list of known PanelPlugins. + * Needed as the Panel must be handled by the Shell while plugins + * belong to the Part. + */ + +class CANTOR_EXPORT PanelPluginHandler : public QObject +{ + Q_OBJECT + public: + explicit PanelPluginHandler(QObject* parent); + ~PanelPluginHandler() override; + + QList plugins(); + + void addPlugin(PanelPlugin* plugin); + + void setSession(Session* session); + + Q_SIGNALS: + void pluginsChanged(); + + private: + void loadPlugins(); + + private: + PanelPluginHandlerPrivate* d; + +}; + +} + +#endif /* _PANELPLUGINHANDLER_H */ diff --git a/src/lib/result.cpp b/src/lib/result.cpp new file mode 100644 index 0000000..0c302b1 --- /dev/null +++ b/src/lib/result.cpp @@ -0,0 +1,65 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "result.h" +using namespace Cantor; + +#include +#include + +class Cantor::ResultPrivate +{ + public: + +}; + + +Result::Result() : d(new ResultPrivate) +{ + +} + +Result::~Result() +{ + delete d; +} + +QUrl Result::url() +{ + return QUrl(); +} + +QString Result::toLatex() +{ + QString html=toHtml(); + //replace linebreaks + html.replace(QRegExp(QLatin1String("
      [\n]")), QLatin1String("\n")); + //remove all the unknown tags + html.remove( QRegExp( QLatin1String("<[a-zA-Z\\/][^>]*>") ) ); + return QString::fromLatin1("\\begin{verbatim} %1 \\end{verbatim}").arg(html); +} + +void Result::saveAdditionalData(KZip* archive) +{ + Q_UNUSED(archive) + //Do nothing +} + + diff --git a/src/lib/result.h b/src/lib/result.h new file mode 100644 index 0000000..71ff9b7 --- /dev/null +++ b/src/lib/result.h @@ -0,0 +1,113 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _RESULT_H +#define _RESULT_H + +#include +#include +#include "cantor_export.h" + +class KZip; + +namespace Cantor +{ + +class ResultPrivate; + +/** + * Base class for different results, like text, image, animation. etc. + */ +class CANTOR_EXPORT Result +{ + public: + /** + * Default constructor + */ + Result( ); + /** + * Destructor + */ + virtual ~Result(); + + /** + * returns html code, that represents this result, + * e.g. an img tag for images + * @return html code representing this result + */ + virtual QString toHtml() = 0; + + /** + * returns latex code, that represents this result + * e.g. a includegraphics command for images + * it falls back to toHtml if not implemented + * @return latex code representing this result + */ + virtual QString toLatex(); + + /** + * returns data associated with this result + * (text/images/etc) + * @return data associated with this result + */ + virtual QVariant data() = 0; + + /** + * returns an url, data for this result resides at + * @return an url, data for this result resides at + */ + virtual QUrl url(); + + /** + * returns an unique number, representing the type of this + * result. Every subclass should define their own Type. + * @return the type of this result + */ + virtual int type() = 0; + /** + * returns the mimetype, this result is + * @return the mimetype, this result is + */ + virtual QString mimeType() = 0; + + /** + * returns a DomElement, containing the information of the result + * @param doc DomDocument used for storing the information + * @return DomElement, containing the information of the result + */ + virtual QDomElement toXml(QDomDocument& doc) = 0; + /** + * saves all the data, that can't be saved in xml + * in an extra file in the archive. + */ + virtual void saveAdditionalData(KZip* archive); + + /** + * saves this to a file + * @param filename name of the file + */ + virtual void save(const QString& filename) = 0; + private: + ResultPrivate* d; +}; + +} + +#endif /* _RESULT_H */ diff --git a/src/lib/session.cpp b/src/lib/session.cpp new file mode 100644 index 0000000..1088f8a --- /dev/null +++ b/src/lib/session.cpp @@ -0,0 +1,147 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "session.h" +using namespace Cantor; + +#include "backend.h" + +#include +#include + +class Cantor::SessionPrivate +{ + public: + SessionPrivate() : backend(nullptr), status(Session::Disable), typesettingEnabled(false), expressionCount(0) + { + } + + Backend* backend; + Session::Status status; + bool typesettingEnabled; + int expressionCount; + QList expressionQueue; +}; + +Session::Session( Backend* backend ) : QObject(backend), d(new SessionPrivate) +{ + d->backend=backend; +} + +Session::~Session() +{ + delete d; +} + +QList& Cantor::Session::expressionQueue() const +{ + return d->expressionQueue; +} + +void Session::enqueueExpression(Expression* expr) +{ + d->expressionQueue.append(expr); + + //run the newly added expression immediately if it's the only one in the queue + if (d->expressionQueue.size() == 1) + { + changeStatus(Cantor::Session::Running); + runFirstExpression(); + } + else + expr->setStatus(Cantor::Expression::Queued); +} + +void Session::runFirstExpression() +{ + +} + +Backend* Session::backend() +{ + return d->backend; +} + +Cantor::Session::Status Session::status() +{ + return d->status; +} + +void Session::changeStatus(Session::Status newStatus) +{ + d->status=newStatus; + emit statusChanged(newStatus); +} + +void Session::setTypesettingEnabled(bool enable) +{ + d->typesettingEnabled=enable; +} + +bool Session::isTypesettingEnabled() +{ + return d->typesettingEnabled; +} + +void Session::setWorksheetPath(const QString& path) +{ + Q_UNUSED(path); + return; +} + +CompletionObject* Session::completionFor(const QString& cmd, int index) +{ + Q_UNUSED(cmd); + Q_UNUSED(index); + //Return 0 per default, so Backends not offering tab completions don't have + //to reimplement this. This method should only be called on backends with + //the Completion Capability flag + + return nullptr; +} + +SyntaxHelpObject* Session::syntaxHelpFor(const QString& cmd) +{ + Q_UNUSED(cmd); + + //Return 0 per default, so Backends not offering tab completions don't have + //to reimplement this. This method should only be called on backends with + //the SyntaxHelp Capability flag + return nullptr; +} + +QSyntaxHighlighter* Session::syntaxHighlighter(QObject* parent) +{ + Q_UNUSED(parent); + return nullptr; +} + +QAbstractItemModel* Session::variableModel() +{ + //Return 0 per default, so Backends not offering variable management don't + //have to reimplement this. This method should only be called on backends with + //VariableManagement Capability flag + return nullptr; +} + +int Session::nextExpressionId() +{ + return d->expressionCount++; +} diff --git a/src/lib/session.h b/src/lib/session.h new file mode 100644 index 0000000..bae20b7 --- /dev/null +++ b/src/lib/session.h @@ -0,0 +1,221 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SESSION_H +#define _SESSION_H + +#include + +#include "cantor_export.h" + +#include "expression.h" + +class QTextEdit; +class QSyntaxHighlighter; +class QAbstractItemModel; + +/** + * Namespace collecting all Classes of the Cantor Libraries + */ +namespace Cantor +{ +class Backend; +class SessionPrivate; +class CompletionObject; +class SyntaxHelpObject; + +/** + * The Session object is the main class used to interact with a Backend. + * It is used to evaluate Expressions, get completions, syntax highlighting, etc. + * + * @author Alexander Rieder + */ +class CANTOR_EXPORT Session : public QObject +{ + Q_OBJECT + public: + enum Status { + Running, ///< the session is busy, running some expression + Done, ///< the session has done all the jobs, and is now waiting for more + Disable ///< the session don't login yet, or already logout + }; + + /** + * Create a new Session. This should not yet set up the complete session, + * thats job of the login() function + * @see login() + */ + explicit Session( Backend* backend); + /** + * Destructor + */ + ~Session() override; + + /** + * Login to the Session. In this function you should do anything needed to set up + * the session, and make it ready for usage. The method should be implemented non-blocking. + * Emit loginStarted() prior to connection to the actual backend in order to notify cantor_part about it. + * If the logging in is completed, the loginDone() signal must be emitted + */ + virtual void login() = 0; + /** + * Log out of the Session. Destroy everything specific to a single session, e.g. + * stop all the running processes etc. Also logout session status must be Status::Disable + * NOTE: restarting the session consists of first logout() and then login() + */ + virtual void logout() = 0; + + /** + * Passes the given command to the backend and returns a Pointer + * to a new Expression object, which will emit the gotResult() + * signal as soon as the computation is done. The result will + * then be accessible by Expression::result() + * @param command the command that should be run by the backend. + * @param finishingBehavior the FinishingBehaviour that should be used for this command. @see Expression::FinishingBehaviour + * @param internal true, if it is an internal command @see Expression::Expression(Session*, bool) + * @return an Expression object, representing this command + */ + virtual Expression* evaluateExpression(const QString& command, Expression::FinishingBehavior finishingBehavior = Expression::FinishingBehavior::DoNotDelete, bool internal = false) = 0; + + /** + * Append the expression to queue . + * @see expressionQueue() const + */ + void enqueueExpression(Expression*); + + /** + * Interrupts all the running calculations in this session + */ + virtual void interrupt() = 0; + + /** + * Returns tab-completion, for this command/command-part. + * The return type is a CompletionObject. The fetching + * of the completions works asynchronously, you'll have to + * listen to the done() Signal of the returned object + * @param cmd The partial command that should be completed + * @param index The index (cursor position) at which completion + * was invoked. Defaults to -1, indicating the end of the string. + * @return a Completion object, representing this completion + * @see CompletionObject + */ + virtual CompletionObject* completionFor(const QString& cmd, int index = -1); + + /** + * Returns Syntax help, for this command. + * It returns a SyntaxHelpObject, that will fetch the + * needed information asynchronously. You need to listen + * to the done() Signal of the Object + * @param cmd the command, syntax help is requested for + * @return SyntaxHelpObject, representing the help request + * @see SyntaxHelpObject + */ + virtual SyntaxHelpObject* syntaxHelpFor(const QString& cmd); + + /** + * returns a syntax highlighter for this session + * @param parent QObject the Highlighter's parent + * @return QSyntaxHighlighter doing the highlighting for this Session + */ + virtual QSyntaxHighlighter* syntaxHighlighter(QObject* parent); + + /** + * returns a Model to interact with the variables + * @return QAbstractItemModel to interact with the variables + */ + virtual QAbstractItemModel* variableModel(); + + /** + * Enables/disables Typesetting for this session. + * For this setting to make effect, the Backend must support + * LaTeX typesetting (as indicated by the capabilities() flag. + * @param enable true to enable, false to disable typesetting + */ + virtual void setTypesettingEnabled(bool enable); + + /** + * Updates the worksheet path in the session. + * This can be useful to set the path of the currently opened + * Cantor project file in the backend interpreter. + * Default implementation does nothing. Derived classes have + * to implement the proper logic if this feature is supported. + * @param path the new absolute path to the worksheet. + */ + virtual void setWorksheetPath(const QString& path); + + /** + * Returns the Backend, this Session is for + * @return the Backend, this Session is for + */ + Backend* backend(); + + /** + * Returns the status this Session has + * @return the status this Session has + */ + Cantor::Session::Status status(); + /** + * Returns whether typesetting is enabled or not + * @return whether typesetting is enabled or not + */ + bool isTypesettingEnabled(); + + /** + * Returns the next available Expression id + * It is basically a counter, incremented for + * each new Expression + * @return next Expression id + */ + int nextExpressionId(); + + protected: + /** + * Change the status of the Session. This will cause the + * stausChanged signal to be emitted + * @param newStatus the new status of the session + */ + void changeStatus(Cantor::Session::Status newStatus); + + /** + * Session can process one single expression at one time. + * Any other expressions submitted by the user are queued first until they get processed. + * The expression queue implements the FIFO mechanism. + * The queud expression have the status \c Expression::Queued. + */ + QList& expressionQueue() const; + + /** + * Execute first expression in expression queue. + * Also, this function changes the status from Queued to Computing. + * @see expressionQueue() const + */ + virtual void runFirstExpression(); + +Q_SIGNALS: + void statusChanged(Cantor::Session::Status newStatus); + void loginStarted(); + void loginDone(); + void error(const QString& msg); + + private: + SessionPrivate* d; +}; +} +#endif /* _SESSION_H */ diff --git a/src/lib/settings.kcfgc b/src/lib/settings.kcfgc new file mode 100644 index 0000000..8c80163 --- /dev/null +++ b/src/lib/settings.kcfgc @@ -0,0 +1,3 @@ +File=cantor_libs.kcfg +ClassName=Settings +Singleton=true diff --git a/src/lib/syntaxhelpobject.cpp b/src/lib/syntaxhelpobject.cpp new file mode 100644 index 0000000..445ec2e --- /dev/null +++ b/src/lib/syntaxhelpobject.cpp @@ -0,0 +1,72 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "syntaxhelpobject.h" +using namespace Cantor; + +#include "session.h" + +#include + +class Cantor::SyntaxHelpObjectPrivate{ + public: + QString command; + Cantor::Session* session; + QString htmlResult; +}; + +SyntaxHelpObject::SyntaxHelpObject(const QString& command, Cantor::Session* session) : QObject(session), + d(new SyntaxHelpObjectPrivate) +{ + d->command=command; + d->session=session; +} + +SyntaxHelpObject::~SyntaxHelpObject() +{ + delete d; +} + +void SyntaxHelpObject::fetchSyntaxHelp() +{ + //Start a delayed fetch + QTimer::singleShot(0, this, SLOT(fetchInformation())); +} + + +QString SyntaxHelpObject::toHtml() +{ + return d->htmlResult; +} + +void SyntaxHelpObject::setHtml(const QString& result) +{ + d->htmlResult=result; +} + +QString SyntaxHelpObject::command() +{ + return d->command; +} + +Session* SyntaxHelpObject::session() +{ + return d->session; +} diff --git a/src/lib/syntaxhelpobject.h b/src/lib/syntaxhelpobject.h new file mode 100644 index 0000000..fe53050 --- /dev/null +++ b/src/lib/syntaxhelpobject.h @@ -0,0 +1,101 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SYNTAXHELPOBJECT_H +#define _SYNTAXHELPOBJECT_H + +#include +#include "cantor_export.h" + +namespace Cantor{ + +class SyntaxHelpObjectPrivate; +class Session; + +/** + * Object, used to display Syntax information to a given command + * It is designed for asynchronous use. The Object emits done + * as soon as fetching of the Help is finished + * + * @author Alexander Rieder + **/ +class CANTOR_EXPORT SyntaxHelpObject : public QObject +{ + Q_OBJECT + public: + /** + * Construct a HelpObject, for the given command, belonging to the Session session. + * @param command Command the help should be fetched for + * @param session Session the HelpObject belongs to + */ + SyntaxHelpObject( const QString& command, Session* session ); + /** + * Destructor + */ + ~SyntaxHelpObject() override; + + /** + * Start fetching the syntax help, emitting done() when done. + */ + void fetchSyntaxHelp(); + + /** + * Returns Html text of the Syntax Help + */ + QString toHtml(); + + /** + * Returns the command, this SyntaxHelp is for + * @return the command, this SyntaxHelp is for + */ + QString command(); + /** + * Returns the Session, this Object belongs to + * @return the Session, this Object belongs to + */ + Session* session(); + + Q_SIGNALS: + /** + * The SyntaxHelpObject is done, fetching the Information. + * The syntax help can be shown now + */ + void done(); + + protected Q_SLOTS: + /** + * This method should fetch the Syntax help information from the backend + */ + virtual void fetchInformation() = 0; + + protected: + /** + * Set the html syntax help + * @param result the html syntax help + */ + void setHtml(const QString& result); + + private: + SyntaxHelpObjectPrivate* d; + +}; + +} +#endif /* _SYNTAXHELPOBJECT_H */ diff --git a/src/lib/test/CMakeLists.txt b/src/lib/test/CMakeLists.txt new file mode 100644 index 0000000..562e086 --- /dev/null +++ b/src/lib/test/CMakeLists.txt @@ -0,0 +1,11 @@ +include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..) + +set(cantortest_SRCS + backendtest.cpp) + +add_library( cantortest SHARED ${cantortest_SRCS} ) +generate_export_header(cantortest) + +target_link_libraries( cantortest + cantorlibs + Qt5::Test) diff --git a/src/lib/test/backendtest.cpp b/src/lib/test/backendtest.cpp new file mode 100644 index 0000000..1a020b8 --- /dev/null +++ b/src/lib/test/backendtest.cpp @@ -0,0 +1,112 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "backendtest.h" + +#include "backend.h" +#include "session.h" + +#include +#include + +void BackendTest::createSession() +{ + Cantor::Backend* b=Cantor::Backend::getBackend( backendName() ); + if(!b || !b->requirementsFullfilled() ) + { + m_session = nullptr; + return; + } + + m_session=b->createSession(); + + QSignalSpy spy(m_session, SIGNAL(loginDone()) ); + m_session->login(); + if(spy.isEmpty()) + waitForSignal(m_session, SIGNAL(loginDone()) ); + + QVERIFY(!spy.isEmpty()); +} + +Cantor::Expression* BackendTest::evalExp(const QString& exp ) +{ + Cantor::Expression* e=m_session->evaluateExpression(exp); + + if(e->status()==Cantor::Expression::Queued) + { + waitForSignal( e, SIGNAL(statusChanged(Cantor::Expression::Status)) ); + } + + if (e->status()==Cantor::Expression::Computing) + { + waitForSignal( e, SIGNAL(statusChanged(Cantor::Expression::Status)) ); + } + return e; +} + +QString BackendTest::cleanOutput(const QString& out) +{ + QString cleaned=out; + cleaned.replace( QLatin1String(" "),QLatin1String(" ") ); + cleaned.remove( QLatin1String("
      ") ); + cleaned.replace( QChar::ParagraphSeparator, QLatin1Char('\n') ); + cleaned.replace( QRegExp( QLatin1String("\\n\\n") ), QLatin1String("\n") ); + cleaned.replace( QRegExp( QLatin1String("\\n\\s*") ), QLatin1String("\n") ); + + return cleaned.trimmed(); +} + +void BackendTest::initTestCase() +{ + createSession(); + if (!m_session) + { + QString reason = i18n("This test requires a functioning %1 backend", backendName() ); + QSKIP( reason.toStdString().c_str(), SkipAll ); + } +} + +void BackendTest::cleanupTestCase() +{ + if (m_session) + { + m_session->logout(); + } +} + +Cantor::Session* BackendTest::session() +{ + return m_session; +} + +void BackendTest::waitForSignal(QObject* sender, const char* signal) +{ + QTimer timeout( this ); + timeout.setSingleShot( true ); + + QEventLoop loop; + connect( sender, signal, &loop, SLOT(quit()) ); + connect(&timeout, &QTimer::timeout, &loop, &QEventLoop::quit); + timeout.start( 25000 ); + loop.exec(); +} + + + diff --git a/src/lib/test/backendtest.h b/src/lib/test/backendtest.h new file mode 100644 index 0000000..43cad26 --- /dev/null +++ b/src/lib/test/backendtest.h @@ -0,0 +1,63 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef BACKENDTEST_H +#define BACKENDTEST_H + +#include +#include +#include + +#include + +namespace Cantor +{ + class Session; + class Expression; +} + +class CANTORTEST_EXPORT BackendTest : public QObject +{ + Q_OBJECT + private Q_SLOTS: + void initTestCase(); + void cleanupTestCase(); + + protected: + Cantor::Expression* evalExp(const QString& exp); + /** + * simple method that removes whitespaces/other irrelevant stuff, + * so comparing results is easier + */ + QString cleanOutput( const QString& out ); + + Cantor::Session* session(); + + /** + * simple method that blocks and waits for a signal to be emitted + */ + void waitForSignal( QObject* sender, const char* signal); + private: + void createSession(); + Cantor::Session* m_session; + virtual QString backendName() = 0; +}; + +#endif // BACKENDTEST_H diff --git a/src/lib/textresult.cpp b/src/lib/textresult.cpp new file mode 100644 index 0000000..dde5b92 --- /dev/null +++ b/src/lib/textresult.cpp @@ -0,0 +1,124 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "textresult.h" +using namespace Cantor; + +#include + +#include +#include + +class Cantor::TextResultPrivate +{ +public: + TextResultPrivate() + { + format=TextResult::PlainTextFormat; + } + + QString data; + QString plain; + TextResult::Format format; +}; + +TextResult::TextResult(const QString& data) : d(new TextResultPrivate) +{ + d->data=data.trimmed(); + d->plain=data.trimmed(); +} + +TextResult::TextResult(const QString& data, const QString& plain) : d(new TextResultPrivate) +{ + d->data=data.trimmed(); + d->plain=plain.trimmed(); +} + + +TextResult::~TextResult() +{ + delete d; +} + +QString TextResult::toHtml() +{ + QString s=d->data.toHtmlEscaped(); + s.replace(QLatin1Char('\n'), QLatin1String("
      \n")); + return s; +} + +QVariant TextResult::data() +{ + return QVariant(d->data); +} + +QString TextResult::plain() +{ + return d->plain; +} + +int TextResult::type() +{ + return TextResult::Type; +} + +QString TextResult::mimeType() +{ + qDebug()<<"format: "<format; +} + +void TextResult::setFormat(TextResult::Format f) +{ + d->format=f; +} + +QDomElement TextResult::toXml(QDomDocument& doc) +{ + qDebug()<<"saving textresult "<data; + + file.close(); +} diff --git a/src/lib/textresult.h b/src/lib/textresult.h new file mode 100644 index 0000000..bd1856e --- /dev/null +++ b/src/lib/textresult.h @@ -0,0 +1,61 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _TEXTRESULT_H +#define _TEXTRESULT_H + +#include "result.h" + +#include "cantor_export.h" + +namespace Cantor +{ + +class TextResultPrivate; +class CANTOR_EXPORT TextResult : public Result +{ + public: + enum { Type=1 }; + enum Format { PlainTextFormat, LatexFormat}; + TextResult(const QString& text); + TextResult(const QString& text, const QString& plain); + ~TextResult() override; + + QString toHtml() override; + QVariant data() override; + + QString plain(); + + int type() override; + QString mimeType() override; + + Format format(); + void setFormat(Format f); + + QDomElement toXml(QDomDocument& doc) override; + + void save(const QString& filename) override; + + private: + TextResultPrivate* d; +}; + +} +#endif /* _TEXTRESULT_H */ diff --git a/src/lib/worksheetaccess.cpp b/src/lib/worksheetaccess.cpp new file mode 100644 index 0000000..daf0f26 --- /dev/null +++ b/src/lib/worksheetaccess.cpp @@ -0,0 +1,34 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "worksheetaccess.h" + + +using namespace Cantor; + +QLatin1String WorksheetAccessInterface::Name = QLatin1String("WorksheetAccessInterface"); + +WorksheetAccessInterface::WorksheetAccessInterface(QObject* parent) : QObject(parent) +{ + setObjectName(Name); +} + + + diff --git a/src/lib/worksheetaccess.h b/src/lib/worksheetaccess.h new file mode 100644 index 0000000..0e156c7 --- /dev/null +++ b/src/lib/worksheetaccess.h @@ -0,0 +1,59 @@ +/* + 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. + + --- + Copyright (C) 2015 Alexander Rieder + */ + +#ifndef _WORKSHEET_ACCESS_INTERFACE_H +#define _WORKSHEET_ACCESS_INTERFACE_H + +#include "cantor_export.h" + +#include + + +namespace Cantor +{ + class Session; + +class CANTOR_EXPORT WorksheetAccessInterface : public QObject +{ + Q_OBJECT + public: + static QLatin1String Name; + explicit WorksheetAccessInterface(QObject* parent); + ~WorksheetAccessInterface() override = default; + public: + virtual QByteArray saveWorksheetToByteArray() = 0; + virtual void loadWorksheetFromByteArray(QByteArray* data) = 0; + + virtual Session* session() = 0; + public Q_SLOTS: + virtual void evaluate() = 0; + virtual void interrupt() = 0; + + Q_SIGNALS: + void modified(); +}; + +} + +#endif + + + + diff --git a/src/loadedexpression.cpp b/src/loadedexpression.cpp new file mode 100644 index 0000000..539442a --- /dev/null +++ b/src/loadedexpression.cpp @@ -0,0 +1,85 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "loadedexpression.h" + +#include "lib/imageresult.h" +#include "lib/epsresult.h" +#include "lib/textresult.h" +#include "lib/latexresult.h" +#include "lib/animationresult.h" + +#include +#include + +LoadedExpression::LoadedExpression( Cantor::Session* session ) : Cantor::Expression( session, false, -1) +{ + +} + +void LoadedExpression::interrupt() +{ + //Do nothing +} + +void LoadedExpression::evaluate() +{ + //Do nothing +} + +void LoadedExpression::loadFromXml(const QDomElement& xml, const KZip& file) +{ + setCommand(xml.firstChildElement(QLatin1String("Command")).text()); + + const QDomNodeList& results = xml.elementsByTagName(QLatin1String("Result")); + for (int i = 0; i < results.size(); i++) + { + const QDomElement& resultElement = results.at(i).toElement(); + const QString& type = resultElement.attribute(QLatin1String("type")); + if ( type == QLatin1String("text")) + { + addResult(new Cantor::TextResult(resultElement.text())); + } + else if (type == QLatin1String("image") || type == QLatin1String("latex") || type == QLatin1String("animation")) + { + const KArchiveEntry* imageEntry=file.directory()->entry(resultElement.attribute(QLatin1String("filename"))); + if (imageEntry&&imageEntry->isFile()) + { + const KArchiveFile* imageFile=static_cast(imageEntry); + QString dir=QStandardPaths::writableLocation(QStandardPaths::TempLocation); + imageFile->copyTo(dir); + QUrl imageUrl = QUrl::fromLocalFile(QDir(dir).absoluteFilePath(imageFile->name())); + if(type==QLatin1String("latex")) + { + addResult(new Cantor::LatexResult(resultElement.text(), imageUrl)); + }else if(type==QLatin1String("animation")) + { + addResult(new Cantor::AnimationResult(imageUrl)); + }else if(imageFile->name().endsWith(QLatin1String(".eps"))) + { + addResult(new Cantor::EpsResult(imageUrl)); + }else + { + addResult(new Cantor::ImageResult(imageUrl)); + } + } + } + } +} diff --git a/src/loadedexpression.h b/src/loadedexpression.h new file mode 100644 index 0000000..918804e --- /dev/null +++ b/src/loadedexpression.h @@ -0,0 +1,49 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _LOADEDEXPRESSION_H +#define _LOADEDEXPRESSION_H + +#include "lib/expression.h" + +#include +#include +#include + +/** This class is used to hold expressions + loaded from a file. they can't be evaluated + and only show the result, they loaded from xml. + this is used to avoid most exceptions when + dealing with loaded Worksheets instead of newly + created ones. +**/ +class LoadedExpression : public Cantor::Expression +{ + public: + explicit LoadedExpression( Cantor::Session* session ); + ~LoadedExpression() override = default; + + void evaluate() override; + void interrupt() override; + + void loadFromXml(const QDomElement& xml, const KZip& file); +}; + +#endif /* _LOADEDEXPRESSION_H */ diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..e2a2a1f --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,158 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "cantor.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static const char description[] = + I18N_NOOP("KDE Frontend to mathematical applications"); + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + +#ifdef PATH_TO_CANTOR_PLUGINS + // Add our custom plugins path, where we install our plugins, if it isn't default path + const QString& path = QString::fromLocal8Bit(PATH_TO_CANTOR_PLUGINS); + if (!QCoreApplication::libraryPaths().contains(path)) + QCoreApplication::addLibraryPath(path); +#else + qDebug() << "PATH_TO_CANTOR_PLUGINS variable is not set (probably a bug), so use the default library paths"; +#endif + + KCrash::initialize(); + + // Migrating configuration from 4.x applications to KF5-based applications + QStringList configFiles; + QStringList rcFiles; + + configFiles << QLatin1String("cantorrc"); + rcFiles << QLatin1String("cantor_part.rc") << QLatin1String("cantor_scripteditor.rc") + << QLatin1String("cantor_shell.rc") << QLatin1String("cantor_advancedplot_assistant.rc") + << QLatin1String("cantor_differentiate_assistant.rc") << QLatin1String("cantor_import_package_assistant.rc") + << QLatin1String("cantor_integrate_assistant.rc") << QLatin1String("cantor_create_matrix_assistant.rc") + << QLatin1String("cantor_eigenvalues_assistant.rc") << QLatin1String("cantor_eigenvectors_assistant.rc") + << QLatin1String("cantor_invert_matrix_assistant.rc") << QLatin1String("cantor_plot2d_assistant.rc") + << QLatin1String("cantor_plot3d_assistant.rc") << QLatin1String("cantor_runscript_assistant.rc") + << QLatin1String("cantor_solve_assistant.rc") << QLatin1String("cantor_qalculateplotassistant.rc"); + + Kdelibs4ConfigMigrator migrator(QLatin1String("cantor")); + + migrator.setConfigFiles(configFiles); + migrator.setUiFiles(rcFiles); + migrator.migrate(); + //********************************** + + KLocalizedString::setApplicationDomain("cantor"); + app.setApplicationName(QLatin1String("cantor")); + app.setOrganizationDomain(QLatin1String("kde.org")); + app.setApplicationDisplayName(i18n("Cantor")); + app.setWindowIcon(QIcon::fromTheme(QLatin1String("cantor"))); + + KAboutData about(QLatin1String("cantor"), + QLatin1String("Cantor"), + QLatin1String(CANTOR_VERSION), + i18n(description), + KAboutLicense::GPL, + i18n("(C) 2016 Filipe Saraiva
      (C) 2009-2015 Alexander Rieder"), + QString(), + QLatin1String("http://edu.kde.org/cantor")); + + about.addAuthor( i18n("Filipe Saraiva"), i18n("Maintainer
      Qt5/KF5 port, Scilab and Python backends"), QLatin1String("filipe@kde.org"), + QLatin1String("http://filipesaraiva.info/") ); + about.addAuthor( i18n("Alexander Rieder"), i18n("Original author
      Maintainer (2009 - 2015)"), QLatin1String("alexanderrieder@gmail.com") ); + about.addAuthor( i18n("Aleix Pol Gonzalez"), i18n("KAlgebra backend"), QLatin1String("aleixpol@kde.org") ); + about.addAuthor( i18n("Miha Čančula"), i18n("Octave backend"), QLatin1String("miha.cancula@gmail.com") ); + + about.addAuthor( i18n("Martin Küttler"), i18n("Interface"), QLatin1String("martin.kuettler@gmail.com") ); + + about.addCredit(QLatin1String("Andreas Kainz"), i18n("Cantor icon"), QLatin1String("kainz.a@gmail.com")); + about.addCredit(QLatin1String("Uri Herrera"), i18n("Cantor icon"), QLatin1String("kaisergreymon99@gmail.com"), + QLatin1String("http://nitrux.in/")); + + QCommandLineParser parser; + KAboutData::setApplicationData(about); + parser.addVersionOption(); + parser.addHelpOption(); + + const QCommandLineOption backendOption(QStringList()<"), QLatin1String("backend")); + parser.addOption(backendOption); + + parser.addPositionalArgument(QStringLiteral("files"), i18n("Documents to open."), QStringLiteral("[files...]")); + + + about.setupCommandLine(&parser); + parser.process(app); + about.processCommandLine(&parser); + + // see if we are starting with session management + if (app.isSessionRestored()) + RESTORE(CantorShell) + else + { + // no session.. just start up normally + + CantorShell *widget = new CantorShell(); + if ( parser.positionalArguments().count() == 0 ) + { + if(parser.isSet(QLatin1String("backend"))) + { + widget->addWorksheet(parser.value(QLatin1String("backend"))); + } + else + { + widget->addWorksheet(); + } + } + else + { + const QStringList& args=parser.positionalArguments(); + for (const QString& filename : args) + { + const QUrl url = QUrl::fromUserInput(filename, QDir::currentPath(), QUrl::AssumeLocalFile); + if (url.isValid()) + { + if (url.isLocalFile() && !QFileInfo(url.toLocalFile()).exists()) + KMessageBox::error(widget, i18n("Couldn't open the file %1", filename), i18n("Cantor")); + else + { + widget->addWorksheet(QLatin1String("null")); + widget->load(url); + } + } + } + } + widget->show(); + } + + return app.exec(); +} + diff --git a/src/markdownentry.cpp b/src/markdownentry.cpp new file mode 100644 index 0000000..15f25ff --- /dev/null +++ b/src/markdownentry.cpp @@ -0,0 +1,245 @@ +/* + 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. + + --- + Copyright (C) 2018 Yifei Wu + */ + +#include "markdownentry.h" + +#include + +#ifdef Discount_FOUND +extern "C" { +#include +} +#endif + +#include + +MarkdownEntry::MarkdownEntry(Worksheet* worksheet) : WorksheetEntry(worksheet), m_textItem(new WorksheetTextItem(this, Qt::TextEditorInteraction)), rendered(false) +{ + m_textItem->enableRichText(false); + m_textItem->installEventFilter(this); + connect(m_textItem, &WorksheetTextItem::moveToPrevious, this, &MarkdownEntry::moveToPreviousEntry); + connect(m_textItem, &WorksheetTextItem::moveToNext, this, &MarkdownEntry::moveToNextEntry); + connect(m_textItem, SIGNAL(execute()), this, SLOT(evaluate())); +} + +bool MarkdownEntry::isEmpty() +{ + return m_textItem->document()->isEmpty(); +} + +int MarkdownEntry::type() const +{ + return Type; +} + +bool MarkdownEntry::acceptRichText() +{ + return false; +} + +bool MarkdownEntry::focusEntry(int pos, qreal xCoord) +{ + if (aboutToBeRemoved()) + return false; + m_textItem->setFocusAt(pos, xCoord); + return true; +} + +void MarkdownEntry::setContent(const QString& content) +{ + rendered = false; + plain = content; + setPlainText(plain); +} + +void MarkdownEntry::setContent(const QDomElement& content, const KZip& file) +{ + Q_UNUSED(file); + + rendered = content.attribute(QLatin1String("rendered"), QLatin1String("1")) == QLatin1String("1"); + QDomElement htmlEl = content.firstChildElement(QLatin1String("HTML")); + if(!htmlEl.isNull()) + html = htmlEl.text(); + else + { + html = QLatin1String(""); + rendered = false; // No html provided. Assume that it hasn't been rendered. + } + QDomElement plainEl = content.firstChildElement(QLatin1String("Plain")); + if(!plainEl.isNull()) + plain = plainEl.text(); + else + { + plain = QLatin1String(""); + html = QLatin1String(""); // No plain text provided. The entry shouldn't render anything, or the user can't re-edit it. + } + if(rendered) + setRenderedHtml(html); + else + setPlainText(plain); +} + +QDomElement MarkdownEntry::toXml(QDomDocument& doc, KZip* archive) +{ + Q_UNUSED(archive); + + if(!rendered) + plain = m_textItem->toPlainText(); + + QDomElement el = doc.createElement(QLatin1String("Markdown")); + el.setAttribute(QLatin1String("rendered"), (int)rendered); + + QDomElement plainEl = doc.createElement(QLatin1String("Plain")); + plainEl.appendChild(doc.createTextNode(plain)); + el.appendChild(plainEl); + if(rendered) + { + QDomElement htmlEl = doc.createElement(QLatin1String("HTML")); + htmlEl.appendChild(doc.createTextNode(html)); + el.appendChild(htmlEl); + } + return el; +} + +QString MarkdownEntry::toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) +{ + Q_UNUSED(commandSep); + + if (commentStartingSeq.isEmpty()) + return QString(); + + if(!rendered) + plain = m_textItem->toPlainText(); + + QString text = QString(plain); + + if (!commentEndingSeq.isEmpty()) + return commentStartingSeq + text + commentEndingSeq + QLatin1String("\n"); + return commentStartingSeq + text.replace(QLatin1String("\n"), QLatin1String("\n") + commentStartingSeq) + QLatin1String("\n"); +} + +void MarkdownEntry::interruptEvaluation() +{ +} + +bool MarkdownEntry::evaluate(EvaluationOption evalOp) +{ + if(!rendered) + { + plain = m_textItem->toPlainText(); + rendered = renderMarkdown(plain); + } + + evaluateNext(evalOp); + return true; +} + +bool MarkdownEntry::renderMarkdown(QString& plain) +{ +#ifdef Discount_FOUND + QByteArray mdCharArray = plain.toUtf8(); + MMIOT* mdHandle = mkd_string(mdCharArray.data(), mdCharArray.size()+1, 0); + if(!mkd_compile(mdHandle, MKD_FENCEDCODE | MKD_GITHUBTAGS)) + { + qDebug()<<"Failed to compile the markdown document"; + mkd_cleanup(mdHandle); + return false; + } + char *htmlDocument; + int htmlSize = mkd_document(mdHandle, &htmlDocument); + html = QString::fromUtf8(htmlDocument, htmlSize); + mkd_cleanup(mdHandle); + + setRenderedHtml(html); + return true; +#else + Q_UNUSED(plain); + + return false; +#endif +} + +void MarkdownEntry::updateEntry() +{ +} + +WorksheetCursor MarkdownEntry::search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos) +{ + if (!(flags & WorksheetEntry::SearchText) || + (pos.isValid() && pos.entry() != this)) + return WorksheetCursor(); + + QTextCursor textCursor = m_textItem->search(pattern, qt_flags, pos); + if (textCursor.isNull()) + return WorksheetCursor(); + else + return WorksheetCursor(this, m_textItem, textCursor); +} + +void MarkdownEntry::layOutForWidth(qreal w, bool force) +{ + if (size().width() == w && !force) + return; + + m_textItem->setGeometry(0, 0, w); + setSize(QSizeF(m_textItem->width(), m_textItem->height() + VerticalMargin)); +} + +bool MarkdownEntry::eventFilter(QObject* object, QEvent* event) +{ + if(object == m_textItem) + { + if(event->type() == QEvent::GraphicsSceneMouseDoubleClick) + { + QGraphicsSceneMouseEvent* mouseEvent = dynamic_cast(event); + if(!mouseEvent) return false; + if(mouseEvent->button() == Qt::LeftButton && rendered) + { + setPlainText(plain); + m_textItem->setCursorPosition(mouseEvent->pos()); + m_textItem->textCursor().clearSelection(); + rendered = false; + return true; + } + } + } + return false; +} + +bool MarkdownEntry::wantToEvaluate() +{ + return !rendered; +} + +void MarkdownEntry::setRenderedHtml(const QString& html) +{ + m_textItem->setHtml(html); + m_textItem->denyEditing(); +} + +void MarkdownEntry::setPlainText(const QString& plain) +{ + QTextDocument* doc = m_textItem->document(); + doc->setPlainText(plain); + m_textItem->setDocument(doc); + m_textItem->allowEditing(); +} diff --git a/src/markdownentry.h b/src/markdownentry.h new file mode 100644 index 0000000..cf40ae1 --- /dev/null +++ b/src/markdownentry.h @@ -0,0 +1,75 @@ +/* + 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. + + --- + Copyright (C) 2018 Yifei Wu + */ + +#ifndef MARKDOWNENTRY_H +#define MARKDOWNENTRY_H + +#include "worksheetentry.h" +#include "worksheettextitem.h" + +class MarkdownEntry : public WorksheetEntry +{ + Q_OBJECT + public: + explicit MarkdownEntry(Worksheet* worksheet); + ~MarkdownEntry() override = default; + + enum {Type = UserType + 7}; + int type() const override; + + bool isEmpty() override; + + bool acceptRichText() override; + + bool focusEntry(int pos = WorksheetTextItem::TopLeft, qreal xCoord=0) override; + + void setContent(const QString& content) override; + void setContent(const QDomElement& content, const KZip& file) override; + + QDomElement toXml(QDomDocument& doc, KZip* archive) override; + QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) override; + + void interruptEvaluation() override; + + void layOutForWidth(qreal w, bool force = false) override; + + WorksheetCursor search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos = WorksheetCursor()) override; + + public Q_SLOTS: + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void updateEntry() override; + + protected: + bool renderMarkdown(QString& plain); + bool eventFilter(QObject* object, QEvent* event) override; + bool wantToEvaluate() override; + void setRenderedHtml(const QString& html); + void setPlainText(const QString& plain); + + protected: + WorksheetTextItem* m_textItem; + QString plain; + QString html; + bool rendered; +}; + +#endif //MARKDOWNENTRY_H diff --git a/src/org.kde.cantor.desktop b/src/org.kde.cantor.desktop new file mode 100644 index 0000000..ca2b4dd --- /dev/null +++ b/src/org.kde.cantor.desktop @@ -0,0 +1,115 @@ +[Desktop Entry] +Name=Cantor +Name[bg]=Cantor +Name[bs]=Cantor +Name[ca]=Cantor +Name[ca@valencia]=Cantor +Name[cs]=Cantor +Name[da]=Cantor +Name[de]=Cantor +Name[el]=Cantor +Name[en_GB]=Cantor +Name[eo]=Cantor +Name[es]=Cantor +Name[et]=Cantor +Name[eu]=Cantor +Name[fa]=کانتور +Name[fi]=Cantor +Name[fr]=Cantor +Name[ga]=Cantor +Name[gl]=Cantor +Name[hi]=केन्टॉर +Name[hr]=Cantor +Name[hu]=Cantor +Name[it]=Cantor +Name[ja]=Cantor +Name[kk]=Cantor +Name[km]=Cantor +Name[ko]=Cantor +Name[lv]=Cantor +Name[nb]=Cantor +Name[nds]=Cantor +Name[nl]=Cantor +Name[nn]=Cantor +Name[pa]=ਕਨਟੁਰ +Name[pl]=Cantor +Name[pt]=Cantor +Name[pt_BR]=Cantor +Name[ru]=Cantor +Name[sk]=Cantor +Name[sl]=Cantor +Name[sv]=Cantor +Name[te]=కన్టొర్ +Name[tr]=Cantor +Name[ug]=Cantor +Name[uk]=Cantor +Name[x-test]=xxCantorxx +Name[zh_CN]=Cantor +Name[zh_TW]=Cantor +Exec=cantor -qwindowicon cantor -qwindowtitle %c %U +Icon=cantor +Type=Application +X-DocPath=cantor/index.html +GenericName=Frontend to Mathematical Software +GenericName[ca]=Frontal per a programari matemàtic +GenericName[ca@valencia]=Frontal per a programari matemàtic +GenericName[cs]=Uživatelské rozhraní matematického softwaru +GenericName[de]=Oberfläche für mathematische Software +GenericName[el]=Περιβάλλον για μαθηματικό λογισμικό +GenericName[en_GB]=Frontend to Mathematical Software +GenericName[es]=Interfaz para software matemático +GenericName[et]=Matemaatikatarkvara kasutajaliides +GenericName[fa]=ظاهر برای نرم افزار ریاضی +GenericName[fi]=Käyttöliittymä matemaattisille ohjelmistoille +GenericName[fr]=Interface pour des logiciels de mathématiques +GenericName[gl]=Interface de software matemático +GenericName[hu]=Előtétprogram matematikai alkalmazásokhoz +GenericName[it]=Interfaccia per software matematico +GenericName[nl]=Frontend tot wiskundige software +GenericName[nn]=Grafisk grensesnitt til matematikkprogram +GenericName[pl]=Nakładka dla oprogramowania matematycznego +GenericName[pt]=Interface de Aplicações Matemáticas +GenericName[pt_BR]=Interface para software de matemática +GenericName[ru]=Оболочка к системам компьютерной алгебры +GenericName[sk]=Frontend pre matematický softvér +GenericName[sl]=Začelje za matematično programsko opremo +GenericName[sv]=Gränssnitt till matematisk programvara +GenericName[tr]=Matematiksel Yazılım için Önyüz +GenericName[uk]=Графічна оболонка до математичного програмного забезпечення +GenericName[x-test]=xxFrontend to Mathematical Softwarexx +GenericName[zh_CN]=数学软件前端 +GenericName[zh_TW]=數學軟體的前端介面 +Comment=KDE Frontend to Mathematical Software +Comment[ca]=Frontal del KDE per a programari matemàtic +Comment[ca@valencia]=Frontal del KDE per a programari matemàtic +Comment[cs]=Uživatelské rozhraní matematického softwaru pro KDE +Comment[da]=KDE-brugerflade til matematisk software +Comment[de]=KDE-Oberfläche für mathematische Software +Comment[el]=Περιβάλλον για μαθηματικό λογισμικό +Comment[en_GB]=KDE Frontend to Mathematical Software +Comment[es]=Interfaz de KDE para software matemático +Comment[et]=KDE matemaatikatarkvara kasutajaliides +Comment[fa]=ظاهر KDE برای نرم افزار ریاضی +Comment[fi]=KDE:n käyttöliittymä matemaattisille ohjelmistoille +Comment[fr]=Interface KDE pour des logiciels de mathématiques +Comment[gl]=Interface de KDE de software matemático +Comment[hu]=KDE előtétprogram matematikai alkalmazásokhoz +Comment[it]=Interfaccia KDE per software matematico +Comment[nl]=KDE-frontend tot wiskundige software +Comment[nn]=KDE-grensesnitt til matematikkprogram +Comment[pl]=Nakładka KDE dla oprogramowania matematycznego +Comment[pt]=Interface para o KDE de Aplicações Matemáticas +Comment[pt_BR]=Interface do KDE para software de matemática +Comment[ru]=Оболочка к системам компьютерной алгебры для KDE +Comment[sk]=KDE Frontend pre matematický softvér +Comment[sl]=KDE-jevo začelje za matematično programsko opremo +Comment[sv]=KDE-gränssnitt till matematisk programvara +Comment[tr]=Matematiksel Yazılım için bir KDE Ön ucu +Comment[uk]=Графічна оболонка KDE до математичного програмного забезпечення +Comment[x-test]=xxKDE Frontend to Mathematical Softwarexx +Comment[zh_CN]=数学软件的 KDE 前端 +Comment[zh_TW]=KDE 數學軟體的前端介面 +Terminal=false +Categories=Qt;KDE;Education;Math;Science; +MimeType=application/x-cantor; +X-DBUS-ServiceName=org.kde.cantor diff --git a/src/pagebreakentry.cpp b/src/pagebreakentry.cpp new file mode 100644 index 0000000..10a6dd4 --- /dev/null +++ b/src/pagebreakentry.cpp @@ -0,0 +1,152 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "pagebreakentry.h" + +#include +#include +#include +#include +#include + +PageBreakEntry::PageBreakEntry(Worksheet* worksheet) + : WorksheetEntry(worksheet) +{ + m_msgItem = new WorksheetTextItem(this); + + QTextCursor cursor = m_msgItem->textCursor(); + KColorScheme color = KColorScheme(QPalette::Normal, KColorScheme::View); + QTextCharFormat cformat(cursor.charFormat()); + cformat.setForeground(color.foreground(KColorScheme::InactiveText)); + + cursor.insertText(i18n("--- Page Break ---"), cformat); + + setFlag(QGraphicsItem::ItemIsFocusable); +} + +bool PageBreakEntry::isEmpty() +{ + return false; +} + +int PageBreakEntry::type() const +{ + return Type; +} + +void PageBreakEntry::populateMenu(QMenu* menu, QPointF pos) +{ + WorksheetEntry::populateMenu(menu, pos); +} + +bool PageBreakEntry::acceptRichText() +{ + return false; +} + +void PageBreakEntry::setContent(const QString& content) +{ + Q_UNUSED(content); + return; +} + +void PageBreakEntry::setContent(const QDomElement& content, const KZip& file) +{ + Q_UNUSED(content); + Q_UNUSED(file); + return; +} + +QDomElement PageBreakEntry::toXml(QDomDocument& doc, KZip* archive) +{ + Q_UNUSED(archive); + + QDomElement pgbrk = doc.createElement(QLatin1String("PageBreak")); + return pgbrk; +} + +QString PageBreakEntry::toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) +{ + Q_UNUSED(commandSep); + + return commentStartingSeq + QLatin1String("page break") + commentEndingSeq; +} + +void PageBreakEntry::interruptEvaluation() +{ + return; +} + +void PageBreakEntry::layOutForWidth(qreal w, bool force) +{ + if (size().width() == w && !force) + return; + + if (m_msgItem->isVisible()) { + m_msgItem->setGeometry(0, 0, w, true); + + setSize(QSizeF(m_msgItem->width(), m_msgItem->height() + VerticalMargin)); + } else { + setSize(QSizeF(w, 0)); + } +} + +bool PageBreakEntry::evaluate(EvaluationOption evalOp) +{ + evaluateNext(evalOp); + return true; +} + +void PageBreakEntry::updateEntry() +{ + if (worksheet()->isPrinting()) { + m_msgItem->setVisible(false); + recalculateSize(); + } else if (!m_msgItem->isVisible()) { + m_msgItem->setVisible(true); + recalculateSize(); + } + return; +} + +/* +void PageBreakEntry::paint(QPainter* painter, const QStyleOptionGraphicsItem*, + QWidget*) +{ + if (worksheet()->isPrinting()) { + QPaintDevice* device = painter->paintEngine()->paintDevice(); + QPrinter* printer = qobject_cast(device); + if (printer) + printer->newPage(); + } +} +*/ + +bool PageBreakEntry::wantToEvaluate() +{ + return false; +} + +bool PageBreakEntry::wantFocus() +{ + return false; +} + + diff --git a/src/pagebreakentry.h b/src/pagebreakentry.h new file mode 100644 index 0000000..952532c --- /dev/null +++ b/src/pagebreakentry.h @@ -0,0 +1,67 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef PAGEBREAKENTRY_H +#define PAGEBREAKENTRY_H + +#include "worksheetentry.h" + +class WorksheetTextItem; + +class PageBreakEntry : public WorksheetEntry +{ + Q_OBJECT + + public: + explicit PageBreakEntry(Worksheet* worksheet); + ~PageBreakEntry() override = default; + + enum {Type = UserType + 3}; + int type() const override; + + bool isEmpty() override; + bool acceptRichText() override; + void setContent(const QString& content) override; + void setContent(const QDomElement& content, const KZip& file) override; + QDomElement toXml(QDomDocument& doc, KZip* archive) override; + QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) override; + + void interruptEvaluation() override; + + void layOutForWidth(qreal w, bool force = false) override; + + //void paint(QPainter* painter, const QStyleOptionGraphicsItem * option, + // QWidget * widget = 0); + + public Q_SLOTS: + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void updateEntry() override; + void populateMenu(QMenu* menu, QPointF pos) override; + + protected: + bool wantToEvaluate() override; + bool wantFocus() override; + + private: + WorksheetTextItem* m_msgItem; +}; + +#endif /* PAGEBREAKENTRY_H */ + diff --git a/src/panelplugins/CMakeLists.txt b/src/panelplugins/CMakeLists.txt new file mode 100644 index 0000000..cd73461 --- /dev/null +++ b/src/panelplugins/CMakeLists.txt @@ -0,0 +1,14 @@ +function(add_panel name) + + kcoreaddons_add_plugin("cantor_${name}" + SOURCES ${ARGN} + JSON "${name}.json" + INSTALL_NAMESPACE "cantor/panels") + + target_link_libraries("cantor_${name}" + cantorlibs) + +endfunction() + +add_subdirectory(helppanel) +add_subdirectory(variablemgr) diff --git a/src/panelplugins/helppanel/CMakeLists.txt b/src/panelplugins/helppanel/CMakeLists.txt new file mode 100644 index 0000000..85d75a7 --- /dev/null +++ b/src/panelplugins/helppanel/CMakeLists.txt @@ -0,0 +1,8 @@ +set( HelpPanelPlugin_SRCS + helppanelplugin.cpp +) + +add_panel(helppanelplugin ${HelpPanelPlugin_SRCS}) + +target_link_libraries(cantor_helppanelplugin + KF5::TextWidgets) diff --git a/src/panelplugins/helppanel/helppanelplugin.cpp b/src/panelplugins/helppanel/helppanelplugin.cpp new file mode 100644 index 0000000..831e268 --- /dev/null +++ b/src/panelplugins/helppanel/helppanelplugin.cpp @@ -0,0 +1,74 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#include "helppanelplugin.h" + +#include + +#include +#include "cantor_macros.h" + +HelpPanelPlugin::HelpPanelPlugin(QObject* parent, QList args) : Cantor::PanelPlugin(parent) +{ + Q_UNUSED(args); + m_edit=nullptr; +} + +HelpPanelPlugin::~HelpPanelPlugin() +{ + delete m_edit; +} + +QWidget* HelpPanelPlugin::widget() +{ + if(m_edit==nullptr) + { + m_edit=new KTextEdit(parentWidget()); + setHelpHtml(i18n("

      Cantor

      The KDE way to do Mathematics")); + m_edit->setTextInteractionFlags(Qt::TextBrowserInteraction); + + connect(parent()->parent(), SIGNAL(showHelp(QString)), this, SLOT(setHelpHtml(QString))); + connect(parent()->parent(), SIGNAL(showHelp(QString)), this, SIGNAL(visibilityRequested())); + } + + return m_edit; +} + +void HelpPanelPlugin::setHelpHtml(const QString& help) +{ + if(!m_edit) + return; + + m_edit->setHtml(help); + m_edit->selectAll(); + m_edit->setFontFamily(QLatin1String("Monospace")); + m_edit->moveCursor(QTextCursor::Start); +} + +void HelpPanelPlugin::showHelp(const QString& help) +{ + if(m_edit) + m_edit->setHtml(help); +} + + + +K_PLUGIN_FACTORY_WITH_JSON(helppanelplugin, "helppanelplugin.json", registerPlugin();) +#include "helppanelplugin.moc" diff --git a/src/panelplugins/helppanel/helppanelplugin.h b/src/panelplugins/helppanel/helppanelplugin.h new file mode 100644 index 0000000..a7c6db9 --- /dev/null +++ b/src/panelplugins/helppanel/helppanelplugin.h @@ -0,0 +1,47 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#ifndef _HELPPANELPLUGIN_H +#define _HELPPANELPLUGIN_H + +#include "panelplugin.h" + + +class KTextEdit; + +class HelpPanelPlugin : public Cantor::PanelPlugin +{ + Q_OBJECT + public: + HelpPanelPlugin( QObject* parent, QList args); + ~HelpPanelPlugin() override; + + QWidget* widget() override; + + public Q_SLOTS: + void setHelpHtml(const QString& help); + void showHelp(const QString& help); + + private: + QPointer m_edit; + +}; + +#endif /* _HELPPANELPLUGIN_H */ diff --git a/src/panelplugins/helppanel/helppanelplugin.json b/src/panelplugins/helppanel/helppanelplugin.json new file mode 100644 index 0000000..bc6fe8d --- /dev/null +++ b/src/panelplugins/helppanel/helppanelplugin.json @@ -0,0 +1,67 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "A panel to display help", + "Description[ca@valencia]": "Un plafó per mostrar les pàgines d'ajuda", + "Description[ca]": "Un plafó per mostrar les pàgines d'ajuda", + "Description[cs]": "Panel pro zobrazení nápovědy", + "Description[de]": "Eine Kontrollleiste zur Anzeige der Hilfe", + "Description[el]": "Πίνακας για εμφάνιση βοήθειας", + "Description[en_GB]": "A panel to display help", + "Description[es]": "Un panel para mostrar ayuda", + "Description[et]": "Abi näitav paneel", + "Description[fi]": "Paneeli ohjeiden näyttämiseen", + "Description[fr]": "Un panneau pour afficher l'aide", + "Description[gl]": "Un panel que mostra axuda", + "Description[it]": "Un pannello per visualizzare aiuto", + "Description[nl]": "Een paneel om help te tonen", + "Description[nn]": "Eit panel som viser hjelp", + "Description[pl]": "Panel do wyświetlania pomocy", + "Description[pt]": "Um painel para mostrar alguma ajuda", + "Description[pt_BR]": "Um painel para apresentar ajuda", + "Description[ru]": "Панель для просмотра справки", + "Description[sk]": "Panel na zobrazenie pomoci", + "Description[sl]": "Pult za prikaz pomoči", + "Description[sv]": "En panel för att visa hjälp", + "Description[tr]": "Yardımı görüntülemek üzere bir panel", + "Description[uk]": "Панель для показу довідки", + "Description[x-test]": "xxA panel to display helpxx", + "Description[zh_CN]": "显示帮助的面板", + "Description[zh_TW]": "顯示說明的面板", + "Icon": "", + "Id": "HelpPanel", + "License": "GPL", + "Name": "Help", + "Name[ca@valencia]": "Ajuda", + "Name[ca]": "Ajuda", + "Name[cs]": "Nápověda", + "Name[da]": "Help", + "Name[de]": "Hilfe", + "Name[el]": "Βοήθεια", + "Name[en_GB]": "Help", + "Name[es]": "Ayuda", + "Name[et]": "Abi", + "Name[fi]": "Ohjeet", + "Name[fr]": "Aide", + "Name[gl]": "Axuda", + "Name[it]": "Aiuto", + "Name[nl]": "Help", + "Name[nn]": "Hjelp", + "Name[pl]": "Pomoc", + "Name[pt]": "Ajuda", + "Name[pt_BR]": "Ajuda", + "Name[ru]": "Справка", + "Name[sk]": "Pomocník", + "Name[sl]": "Pomoč", + "Name[sv]": "Hjälp", + "Name[tr]": "Yardım", + "Name[uk]": "Довідка", + "Name[x-test]": "xxHelpxx", + "Name[zh_CN]": "帮助", + "Name[zh_TW]": "求助", + "ServiceTypes": [ + "Cantor/PanelPlugin" + ] + }, + "RequiredExtensions": "" +} diff --git a/src/panelplugins/variablemgr/CMakeLists.txt b/src/panelplugins/variablemgr/CMakeLists.txt new file mode 100644 index 0000000..d2134a1 --- /dev/null +++ b/src/panelplugins/variablemgr/CMakeLists.txt @@ -0,0 +1,10 @@ +set( VariableManagerPlugin_SRCS + variablemanagerplugin.cpp + variablemanagerwidget.cpp +) + +ki18n_wrap_ui(VariableManagerPlugin_SRCS newvardlg.ui) + +add_panel(variablemanagerplugin ${VariableManagerPlugin_SRCS}) + +target_link_libraries(cantor_variablemanagerplugin ${KDE4_KDEUI_LIBS} KF5::KIOWidgets) diff --git a/src/panelplugins/variablemgr/newvardlg.ui b/src/panelplugins/variablemgr/newvardlg.ui new file mode 100644 index 0000000..09cfc80 --- /dev/null +++ b/src/panelplugins/variablemgr/newvardlg.ui @@ -0,0 +1,52 @@ + + + NewVariableDialogBase + + + + 0 + 0 + 428 + 96 + + + + + + + Name: + + + + + + + + + + Value: + + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KLineEdit + QLineEdit +
      klineedit.h
      +
      +
      + + +
      diff --git a/src/panelplugins/variablemgr/variablemanagerplugin.cpp b/src/panelplugins/variablemgr/variablemanagerplugin.cpp new file mode 100644 index 0000000..ea32ee0 --- /dev/null +++ b/src/panelplugins/variablemgr/variablemanagerplugin.cpp @@ -0,0 +1,59 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#include "variablemanagerplugin.h" + +#include "session.h" +#include "variablemanagerwidget.h" + +VariableManagerPlugin::VariableManagerPlugin(QObject* parent, QList args) : Cantor::PanelPlugin(parent), m_widget(nullptr) +{ + Q_UNUSED(args); +} + +VariableManagerPlugin::~VariableManagerPlugin() +{ + delete m_widget; +} + +void VariableManagerPlugin::onSessionChanged() +{ + if(m_widget) + m_widget->setSession(session()); +} + +QWidget* VariableManagerPlugin::widget() +{ + if(m_widget==nullptr) + { + m_widget=new VariableManagerWidget(session(), parentWidget()); + connect(m_widget.data(), &VariableManagerWidget::runCommand, this, &VariableManagerPlugin::requestRunCommand); + } + + return m_widget; +} + +Cantor::Backend::Capabilities VariableManagerPlugin::requiredCapabilities() +{ + return Cantor::Backend::VariableManagement; +} + +K_PLUGIN_FACTORY_WITH_JSON(variablemanagerplugin, "variablemanagerplugin.json", registerPlugin();) +#include "variablemanagerplugin.moc" diff --git a/src/panelplugins/variablemgr/variablemanagerplugin.h b/src/panelplugins/variablemgr/variablemanagerplugin.h new file mode 100644 index 0000000..20fc25e --- /dev/null +++ b/src/panelplugins/variablemgr/variablemanagerplugin.h @@ -0,0 +1,48 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#ifndef _VARIABLEMANAGERPLUGIN_H +#define _VARIABLEMANAGERPLUGIN_H + +#include "panelplugin.h" + +class VariableManagerWidget; + +class VariableManagerPlugin : public Cantor::PanelPlugin +{ + Q_OBJECT + public: + VariableManagerPlugin( QObject* parent, QList args); + ~VariableManagerPlugin() override; + + QWidget* widget() override; + + Cantor::Backend::Capabilities requiredCapabilities() override; + + protected: + void onSessionChanged() override; + + + private: + QPointer m_widget; + +}; + +#endif /* _VARIABLEMANAGERPLUGIN_H */ diff --git a/src/panelplugins/variablemgr/variablemanagerplugin.json b/src/panelplugins/variablemgr/variablemanagerplugin.json new file mode 100644 index 0000000..6c71836 --- /dev/null +++ b/src/panelplugins/variablemgr/variablemanagerplugin.json @@ -0,0 +1,66 @@ +{ + "KPlugin": { + "Dependencies": [], + "Description": "A panel to manage the variables of a session", + "Description[ca@valencia]": "Un plafó per gestionar les variables d'una sessió", + "Description[ca]": "Un plafó per gestionar les variables d'una sessió", + "Description[cs]": "Panel pro správu proměnných sezení", + "Description[de]": "Eine Leiste, um Sitzungsvariablen zu verwalten", + "Description[el]": "Πίνακας για διαχείριση των μεταβλητών μιας συνεδρίας", + "Description[en_GB]": "A panel to manage the variables of a session", + "Description[es]": "Un panel para la gestión de variables de una sesión", + "Description[et]": "Paneel seansi muutujate haldamiseks", + "Description[fi]": "Paneeli istunnon muuttujien hallitsemiseen", + "Description[fr]": "Un panneau de gestion des variables d'une session", + "Description[gl]": "Un panel para xestionar as variábeis dunha sesión", + "Description[it]": "Un pannello per gestire le variabili di una sessione", + "Description[nl]": "Een paneel om de variabelen van een sessie te beheren", + "Description[nn]": "Eit panel for handsaming av variablar i ei økt", + "Description[pl]": "Panel do obsługi zmiennych sesji", + "Description[pt]": "Um painel para gerir as variáveis de uma sessão", + "Description[pt_BR]": "Um painel para gerenciar as variáveis de uma sessão", + "Description[ru]": "Панель для управления переменными сеанса", + "Description[sk]": "Panel na správu premenných sedenia", + "Description[sl]": "Pult za upravljanje spremenljivk v seji", + "Description[sv]": "En panel för att hantera variablerna i en session", + "Description[tr]": "Bir oturumun değişkenleri yönetmek için bir panel", + "Description[uk]": "Панель керування змінними сеансу", + "Description[x-test]": "xxA panel to manage the variables of a sessionxx", + "Description[zh_CN]": "管理会话中变量的面板", + "Description[zh_TW]": "管理工作階段內的變數的面板", + "Icon": "", + "Id": "VariableManager", + "License": "GPL", + "Name": "Variable Manager", + "Name[ca@valencia]": "Gestor de variables", + "Name[ca]": "Gestor de variables", + "Name[cs]": "Správce proměnných", + "Name[de]": "Variablen-Verwaltung", + "Name[el]": "Διαχειριστής μεταβλητών", + "Name[en_GB]": "Variable Manager", + "Name[es]": "Gestor de variables", + "Name[et]": "Muutujate haldur", + "Name[fi]": "Muuttujien hallinta", + "Name[fr]": "Gestionnaire de variables", + "Name[gl]": "Xestor de variábeis", + "Name[it]": "Gestore variabili", + "Name[nl]": "Beheerder van variabelen", + "Name[nn]": "Variabelhandsamar", + "Name[pl]": "Zarządzanie zmiennymi", + "Name[pt]": "Gestor de Variáveis", + "Name[pt_BR]": "Gerenciador de variáveis", + "Name[ru]": "Переменные", + "Name[sk]": "Správca premenných", + "Name[sl]": "Upravljalnik spremenljivk", + "Name[sv]": "Variabelhantering", + "Name[tr]": "Değişken Yöneticisi", + "Name[uk]": "Керування змінними", + "Name[x-test]": "xxVariable Managerxx", + "Name[zh_CN]": "变量管理器", + "Name[zh_TW]": "變數管理員", + "ServiceTypes": [ + "Cantor/PanelPlugin" + ] + }, + "RequiredExtensions": "VariableManagementExtension" +} diff --git a/src/panelplugins/variablemgr/variablemanagerwidget.cpp b/src/panelplugins/variablemgr/variablemanagerwidget.cpp new file mode 100644 index 0000000..0d31fec --- /dev/null +++ b/src/panelplugins/variablemgr/variablemanagerwidget.cpp @@ -0,0 +1,186 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#include "variablemanagerwidget.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include "session.h" +#include "extension.h" +#include "backend.h" + +#include "ui_newvardlg.h" + +VariableManagerWidget::VariableManagerWidget(Cantor::Session* session, QWidget* parent) : QWidget(parent), +m_session(nullptr), +m_model(nullptr), +m_table(new QTreeView(this)) +{ + QVBoxLayout* layout=new QVBoxLayout(this); + layout->addWidget(m_table, 1); + + m_table->setRootIsDecorated(false); + + QHBoxLayout* btnLayout=new QHBoxLayout(); + int size=KIconLoader::global()->currentSize(KIconLoader::MainToolbar); + + QToolButton* m_newBtn=new QToolButton(this); + m_newBtn->setIcon(QIcon::fromTheme(QLatin1String("document-new"))); + m_newBtn->setToolTip(i18n("Add new variable")); + m_newBtn->setIconSize(QSize(size, size)); + connect(m_newBtn, &QToolButton::clicked, this, &VariableManagerWidget::newVariable); + btnLayout->addWidget(m_newBtn); + + QToolButton* m_loadBtn=new QToolButton(this); + m_loadBtn->setIcon(QIcon::fromTheme(QLatin1String("document-open"))); + m_loadBtn->setToolTip(i18n("Load Variables")); + m_loadBtn->setIconSize(QSize(size, size)); + connect(m_loadBtn, &QToolButton::clicked, this, &VariableManagerWidget::load); + btnLayout->addWidget(m_loadBtn); + + QToolButton* m_saveBtn=new QToolButton(this); + m_saveBtn->setIcon(QIcon::fromTheme(QLatin1String("document-save"))); + m_saveBtn->setToolTip(i18n("Store Variables")); + m_saveBtn->setIconSize(QSize(size, size)); + connect(m_saveBtn, &QToolButton::clicked, this, &VariableManagerWidget::save); + btnLayout->addWidget(m_saveBtn); + + QToolButton* m_clearBtn=new QToolButton(this); + m_clearBtn->setIcon(QIcon::fromTheme(QLatin1String("edit-clear"))); + m_clearBtn->setToolTip(i18n("Clear Variables")); + m_clearBtn->setIconSize(QSize(size, size)); + connect(m_clearBtn, &QToolButton::clicked, this, &VariableManagerWidget::clearVariables); + btnLayout->addWidget(m_clearBtn); + + layout->addLayout(btnLayout); + + setSession(session); + + //check for the methods the backend actually supports, and disable the buttons accordingly + Cantor::VariableManagementExtension* ext= + dynamic_cast(m_session->backend()->extension(QLatin1String("VariableManagementExtension"))); + if(ext->loadVariables(QString()).isNull()) + m_loadBtn->setDisabled(true); + if(ext->saveVariables(QString()).isNull()) + m_saveBtn->setDisabled(true); + if(ext->addVariable(QString(), QString()).isNull()) + m_newBtn->setDisabled(true); + if(ext->clearVariables().isNull()) + m_clearBtn->setDisabled(true); +} + +void VariableManagerWidget::setSession(Cantor::Session* session) +{ + m_session=session; + if(session) + { + m_model=session->variableModel(); + if(m_table) + m_table->setModel(m_model); + } +} + +void VariableManagerWidget::clearVariables() +{ + int btn=KMessageBox::questionYesNo(this, i18n("Are you sure you want to remove all variables?"), i18n("Confirmation - Cantor")); + if(btn==KMessageBox::Yes) + { + m_model->removeRows(0, m_model->rowCount()); + + //evaluate the "clear" command + Cantor::VariableManagementExtension* ext= + dynamic_cast(m_session->backend()->extension(QLatin1String("VariableManagementExtension"))); + const QString& cmd=ext->clearVariables(); + emit runCommand(cmd); + + //HACK? should the model detect that this happened on its own? + //inform the model that all variables have been removed. + //Do so by trying to evaluate the clearVariables slot of + //DefaultVariableModel. If our model isn't one of those, + //this call will just do nothing. + QMetaObject::invokeMethod(m_model, "clearVariables", Qt::QueuedConnection); + } +} + +void VariableManagerWidget::save() +{ + const QString file=QFileDialog::getSaveFileName(this, i18n("Save"), QString(), QString()); + if (file.trimmed().isEmpty()) + return; + + Cantor::VariableManagementExtension* ext= + dynamic_cast(m_session->backend()->extension(QLatin1String("VariableManagementExtension"))); + + const QString& cmd=ext->saveVariables(file); + emit runCommand(cmd); +} + +void VariableManagerWidget::load() +{ + const QString file=QFileDialog::getOpenFileName(this, i18n("Load file"), QString(), QString()); + if (file.trimmed().isEmpty()) + return; + + Cantor::VariableManagementExtension* ext= + dynamic_cast(m_session->backend()->extension(QLatin1String("VariableManagementExtension"))); + + const QString& cmd=ext->loadVariables(file); + emit runCommand(cmd); +} + +void VariableManagerWidget::newVariable() +{ + QPointer dlg=new QDialog(this); + QWidget *widget=new QWidget(dlg); + Ui::NewVariableDialogBase base; + base.setupUi(widget); + QVBoxLayout *mainLayout = new QVBoxLayout; + dlg->setLayout(mainLayout); + + base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); + base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); + + connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept()) ); + connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject()) ); + + mainLayout->addWidget(widget); + + if( dlg->exec()) + { + const QString& name=base.name->text(); + const QString& val=base.value->text(); + + Cantor::VariableManagementExtension* ext= + dynamic_cast(m_session->backend()->extension(QLatin1String("VariableManagementExtension"))); + + const QString& cmd=ext->addVariable(name, val); + + emit runCommand(cmd); + } + + delete dlg; +} diff --git a/src/panelplugins/variablemgr/variablemanagerwidget.h b/src/panelplugins/variablemgr/variablemanagerwidget.h new file mode 100644 index 0000000..45fe27e --- /dev/null +++ b/src/panelplugins/variablemgr/variablemanagerwidget.h @@ -0,0 +1,58 @@ +/* + 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. + + --- + Copyright (C) 2010 Alexander Rieder + */ + +#ifndef _VARIABLEMANAGERWIDGET_H +#define _VARIABLEMANAGERWIDGET_H + +#include + +namespace Cantor{ +class Session; +} + +class QTreeView; +class QAbstractItemModel; + +class VariableManagerWidget : public QWidget +{ + Q_OBJECT + public: + VariableManagerWidget( Cantor::Session* session,QWidget* parent ); + ~VariableManagerWidget() override = default; + + void setSession(Cantor::Session* session); + + public Q_SLOTS: + void clearVariables(); + + void save(); + void load(); + void newVariable(); + + Q_SIGNALS: + void runCommand(const QString& cmd); + + private: + Cantor::Session* m_session; + QAbstractItemModel* m_model; + QTreeView* m_table; +}; + +#endif /* _VARIABLEMANAGERWIDGET_H */ diff --git a/src/placeholderentry.cpp b/src/placeholderentry.cpp new file mode 100644 index 0000000..3086613 --- /dev/null +++ b/src/placeholderentry.cpp @@ -0,0 +1,113 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "placeholderentry.h" + +#include + +PlaceHolderEntry::PlaceHolderEntry(Worksheet* worksheet, QSizeF s) + : WorksheetEntry(worksheet) +{ + setSize(s); +} + +int PlaceHolderEntry::type() const +{ + return Type; +} + +bool PlaceHolderEntry::isEmpty() +{ + /* + // This is counter-intuitive. isEmpty() is used to find out whether a new + // CommandEntry needs to be appended, and a PlaceHolderEntry should never + // prevent that. + return false; + */ + return true; +} + +bool PlaceHolderEntry::acceptRichText() +{ + return false; +} + +void PlaceHolderEntry::setContent(const QString&) +{ +} + +void PlaceHolderEntry::setContent(const QDomElement&, const KZip&) +{ +} + +QDomElement PlaceHolderEntry::toXml(QDomDocument&, KZip*) +{ + return QDomElement(); +} + +QString PlaceHolderEntry::toPlain(const QString&, const QString&, const QString&){ + return QString(); +} + +void PlaceHolderEntry::interruptEvaluation() +{ + return; +} + +void PlaceHolderEntry::layOutForWidth(qreal w, bool force) +{ + Q_UNUSED(w); + Q_UNUSED(force); +} + +bool PlaceHolderEntry::evaluate(EvaluationOption evalOp) +{ + evaluateNext(evalOp); + return true; +} + +void PlaceHolderEntry::updateEntry() +{ +} + +bool PlaceHolderEntry::wantToEvaluate() +{ + return false; +} + +void PlaceHolderEntry::changeSize(QSizeF s) +{ + if (!worksheet()->animationsEnabled()) { + setSize(s); + worksheet()->updateEntrySize(this); + return; + } + if (aboutToBeRemoved()) + return; + + if (animationActive()) + endAnimation(); + + QPropertyAnimation* sizeAn = sizeChangeAnimation(s); + + sizeAn->setEasingCurve(QEasingCurve::InOutQuad); + sizeAn->start(QAbstractAnimation::DeleteWhenStopped); +} + diff --git a/src/placeholderentry.h b/src/placeholderentry.h new file mode 100644 index 0000000..7bb466e --- /dev/null +++ b/src/placeholderentry.h @@ -0,0 +1,55 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef PLACEHOLDERENTRY_H +#define PLACEHOLDERENTRY_H + +#include "worksheetentry.h" + +class PlaceHolderEntry : public WorksheetEntry +{ + public: + PlaceHolderEntry(Worksheet* worksheet, QSizeF s); + ~PlaceHolderEntry() override = default; + + enum {Type = UserType + 6}; + int type() const override; + + bool isEmpty() override; + bool acceptRichText() override; + void setContent(const QString&) override; + void setContent(const QDomElement&, const KZip&) override; + QDomElement toXml(QDomDocument&, KZip*) override; + QString toPlain(const QString&, const QString&, const QString&) override; + void interruptEvaluation() override; + + void layOutForWidth(qreal w, bool force = false) override; + + public Q_SLOTS: + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void updateEntry() override; + + void changeSize(QSizeF s); + + protected: + bool wantToEvaluate() override; +}; + +#endif //PLACEHOLDERENTRY_H diff --git a/src/resultitem.cpp b/src/resultitem.cpp new file mode 100644 index 0000000..394e2ab --- /dev/null +++ b/src/resultitem.cpp @@ -0,0 +1,94 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "resultitem.h" +#include "textresultitem.h" +#include "imageresultitem.h" +#include "animationresultitem.h" +#include "commandentry.h" +#include "worksheetentry.h" + +#include "lib/result.h" +#include "lib/textresult.h" +#include "lib/latexresult.h" +#include "lib/imageresult.h" +#include "lib/epsresult.h" +#include "lib/animationresult.h" + +#include + +#include +#include +#include + +ResultItem::ResultItem(Cantor::Result* result): + m_result(result) +{ +} + +ResultItem* ResultItem::create(WorksheetEntry* parent, Cantor::Result* result) +{ + switch(result->type()) { + case Cantor::TextResult::Type: + case Cantor::LatexResult::Type: + { + return new TextResultItem(parent, result); + } + case Cantor::ImageResult::Type: + case Cantor::EpsResult::Type: + { + return new ImageResultItem(parent, result); + } + case Cantor::AnimationResult::Type: + { + return new AnimationResultItem(parent, result); + } + default: + return nullptr; + } +} + +void ResultItem::addCommonActions(QObject* self, QMenu* menu) +{ + menu->addAction(i18n("Save result"), self, SLOT(saveResult())); + menu->addAction(QIcon::fromTheme(QLatin1String("edit-delete")), i18n("Remove result"), self, [this](){ + this->needRemove(); + }); +} + +QGraphicsObject* ResultItem::graphicsObject() +{ + return dynamic_cast(this); +} + +CommandEntry* ResultItem::parentEntry() +{ + return qobject_cast(graphicsObject()->parentObject()); +} + +Cantor::Result* ResultItem::result() +{ + return m_result; +} + +void ResultItem::needRemove() +{ + parentEntry()->removeResult(m_result); +} diff --git a/src/resultitem.h b/src/resultitem.h new file mode 100644 index 0000000..d906a39 --- /dev/null +++ b/src/resultitem.h @@ -0,0 +1,75 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef RESULTITEM_H +#define RESULTITEM_H + +/* + * This is a common superclass of all result items. Unfortunately this class + * cannot inherit QGraphicsItem or QObject, because the subclasses inherit + * these from an other source (TextResultItem inherits WorksheetTextItem, for + * example). Therefore this class mainly offers the interface, and the + * implementations are done in each subclasses, even when the code is literally + * the same for them. + */ + +namespace Cantor { + class Result; +} + +class CommandEntry; +class WorksheetEntry; + +class QMenu; +class QObject; +class QPointF; +class QGraphicsObject; + +class ResultItem +{ + public: + ResultItem(Cantor::Result* result); + virtual ~ResultItem() = default; + + static ResultItem* create(WorksheetEntry* parent, Cantor::Result* result); + + virtual double setGeometry(double x, double y, double w) = 0; + virtual void populateMenu(QMenu* menu, QPointF pos) = 0; + + virtual void update() = 0; + + virtual void deleteLater() = 0; + + virtual double width() const = 0; + virtual double height() const = 0; + + QGraphicsObject* graphicsObject(); + Cantor::Result* result(); + CommandEntry* parentEntry(); + + protected: + void addCommonActions(QObject* self, QMenu* menu); + void needRemove(); + + protected: + Cantor::Result* m_result; +}; + +#endif // RESULTITEM_H diff --git a/src/scripteditor/CMakeLists.txt b/src/scripteditor/CMakeLists.txt new file mode 100644 index 0000000..ae969a4 --- /dev/null +++ b/src/scripteditor/CMakeLists.txt @@ -0,0 +1,10 @@ +set( scripteditor_SRCS + main.cpp + scripteditorwidget.cpp +) + +add_executable( cantor_scripteditor ${scripteditor_SRCS} ) + +target_link_libraries(cantor_scripteditor KF5::TextEditor) + +install(TARGETS cantor_scripteditor ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) diff --git a/src/scripteditor/main.cpp b/src/scripteditor/main.cpp new file mode 100644 index 0000000..11ff021 --- /dev/null +++ b/src/scripteditor/main.cpp @@ -0,0 +1,44 @@ +/* + 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. + + --- + Copyright (C) 2018 Sirgienko Nikita + */ + +#include +#include +#include +#include "scripteditorwidget.h" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + ScriptEditorWidget* editor = new ScriptEditorWidget(QLatin1String(""),QLatin1String("")); + + if (argc == 2) + { + // Open file, passed in arguments + QString filename = QLatin1String(argv[1]); + QUrl path = QUrl::fromLocalFile(filename); + qDebug() << "open " << path; + editor->open(path); + } + + editor->show(); + + return app.exec(); +} diff --git a/src/scripteditor/scripteditorwidget.cpp b/src/scripteditor/scripteditorwidget.cpp new file mode 100644 index 0000000..f4d7b71 --- /dev/null +++ b/src/scripteditor/scripteditorwidget.cpp @@ -0,0 +1,153 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#include "scripteditorwidget.h" + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ScriptEditorWidget::ScriptEditorWidget(const QString& filter, const QString& highlightingMode, QWidget* parent) : KXmlGuiWindow(parent), +m_filter(filter), +m_editor(nullptr), +m_script(nullptr), +m_tmpFile(nullptr) +{ + setObjectName(QLatin1String("ScriptEditor")); + + KStandardAction::openNew(this, SLOT(newScript()), actionCollection()); + KStandardAction::open(this, SLOT(open()), actionCollection()); + KStandardAction::close(this, SLOT(close()), actionCollection()); + QAction * runAction = actionCollection()->addAction(QLatin1String("file_execute"), this, SLOT(run())); + runAction->setIcon(QIcon::fromTheme(QLatin1String("system-run"))); + runAction->setText(i18n("Run Script")); + + KTextEditor::Editor* editor = KTextEditor::Editor::instance(); + if (!editor) + { + KMessageBox::error(this, i18n("A KDE text-editor component could not be found;\n" + "please check your KDE installation.")); + } + else + { + m_script=editor->createDocument(nullptr); + m_editor=qobject_cast(m_script->createView(this)); + + m_script->setHighlightingMode(highlightingMode); + + KConfigGroup cg(KSharedConfig::openConfig(), "ScriptEditor"); + setAutoSaveSettings(cg, true); + + setCentralWidget(m_editor); + setupGUI(QSize(500,600), Default, QLatin1String("cantor_scripteditor.rc")); + guiFactory()->addClient(m_editor); + + KWindowConfig::restoreWindowSize(this->windowHandle(), cg); + + connect(m_script, &KTextEditor::Document::modifiedChanged, this, &ScriptEditorWidget::updateCaption); + connect(m_script, &KTextEditor::Document::documentUrlChanged, this, &ScriptEditorWidget::updateCaption); + updateCaption(); + } +} + +void ScriptEditorWidget::newScript() +{ + QString highlightingMode = m_script->highlightingMode(); + m_script->closeUrl(); + m_script->setHighlightingMode(highlightingMode); +} + +void ScriptEditorWidget::open() +{ + QUrl url = QFileDialog::getOpenFileUrl(this, QString(), QUrl(), m_filter); + m_script->openUrl(url); +} + +void ScriptEditorWidget::open(QUrl url) +{ + m_script->openUrl(url); +} + +void ScriptEditorWidget::run() +{ + QString filename; + if(!m_script->url().isLocalFile()) + { + // If the script is not in a local file, write it to a temporary file + if(m_tmpFile==nullptr) + { + m_tmpFile=new QTemporaryFile(); + } + else + { + m_tmpFile->resize(0); + } + m_tmpFile->open(); + QString text=m_script->text(); + m_tmpFile->write(text.toUtf8()); + m_tmpFile->close(); + + filename=m_tmpFile->fileName(); + }else + { + m_script->save(); + filename=m_script->url().toLocalFile(); + } + + qDebug()<<"running "<queryClose(); + else + return true; +} + +void ScriptEditorWidget::updateCaption() +{ + QString fileName = m_script->url().toLocalFile(); + bool modified = m_script->isModified(); + if (fileName.isEmpty()) + { + setCaption(i18n("Script Editor"), modified); + }else + { + setCaption(i18n("Script Editor - %1", fileName), modified); + } +} + + diff --git a/src/scripteditor/scripteditorwidget.h b/src/scripteditor/scripteditorwidget.h new file mode 100644 index 0000000..b13d0b9 --- /dev/null +++ b/src/scripteditor/scripteditorwidget.h @@ -0,0 +1,62 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + */ + +#ifndef _SCRIPTEDITORWIDGET_H +#define _SCRIPTEDITORWIDGET_H + +#include + +class QTemporaryFile; +class QGridLayout; +namespace KTextEditor +{ + class View; + class Document; +} + + +class ScriptEditorWidget : public KXmlGuiWindow +{ + Q_OBJECT + public: + explicit ScriptEditorWidget( const QString& filter, const QString& highlightingMode, QWidget* parent = nullptr ); + ~ScriptEditorWidget() override = default; + void open(QUrl url); + + Q_SIGNALS: + void runScript(const QString& filename); + + private Q_SLOTS: + void newScript(); + void open(); + void run(); + void updateCaption(); + + protected: + bool queryClose() override; + + private: + QString m_filter; + KTextEditor::View* m_editor; + KTextEditor::Document* m_script; + QTemporaryFile* m_tmpFile; +}; + +#endif /* _SCRIPTEDITORWIDGET_H */ diff --git a/src/searchbar.cpp b/src/searchbar.cpp new file mode 100644 index 0000000..34b4c24 --- /dev/null +++ b/src/searchbar.cpp @@ -0,0 +1,502 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "searchbar.h" + +#include "worksheet.h" +#include "worksheetentry.h" +#include "worksheettextitem.h" + +#include +#include +#include +#include + +SearchBar::SearchBar(QWidget* parent, Worksheet* worksheet) : QWidget(parent) +{ + m_worksheet = worksheet; + m_stdUi = new Ui::StandardSearchBar(); + m_extUi = nullptr; + setupStdUi(); + m_qtFlags = nullptr; + setStartCursor(worksheet->worksheetCursor()); + setCurrentCursor(m_startCursor); + m_atBeginning = false; + m_atEnd = false; + m_notFound = false; + m_searchFlags = WorksheetEntry::SearchAll; +} + +SearchBar::~SearchBar() +{ + if (m_stdUi) + delete m_stdUi; + else + delete m_extUi; + if (m_currentCursor.isValid()) { + worksheet()->worksheetView()->setFocus(); + m_currentCursor.entry()->focusEntry(); + } else if (m_startCursor.isValid()) { + worksheet()->worksheetView()->setFocus(); + m_startCursor.entry()->focusEntry(); + } +} + +void SearchBar::showStandard() +{ + if (m_stdUi) + return; + + delete m_extUi; + m_extUi = nullptr; + foreach(QObject* child, children()) { + delete child; + } + delete layout(); + m_stdUi = new Ui::StandardSearchBar(); + setupStdUi(); +} + +void SearchBar::showExtended() +{ + if (m_extUi) + return; + + delete m_stdUi; + m_stdUi = nullptr; + foreach(QObject* child, children()) { + delete child; + } + delete layout(); + m_extUi = new Ui::ExtendedSearchBar(); + setupExtUi(); + +} + +void SearchBar::next() +{ + if (!m_currentCursor.isValid() && !m_currentCursor.entry() && !m_atEnd) + return; + searchForward(true); +} + +void SearchBar::prev() +{ + if (!m_currentCursor.isValid() && !m_currentCursor.entry() && + !m_atBeginning) + return; + searchBackward(true); +} + +void SearchBar::searchBackward(bool skipFirstChar) +{ + WorksheetCursor result; + WorksheetEntry* entry; + worksheet()->setWorksheetCursor(WorksheetCursor()); + QTextDocument::FindFlags f = m_qtFlags | QTextDocument::FindBackward; + if (m_currentCursor.isValid()) { + bool atBeginningOfEntry = false; + if (skipFirstChar) { + QTextCursor c = m_currentCursor.textCursor(); + c.movePosition(QTextCursor::PreviousCharacter); + atBeginningOfEntry = (c == m_currentCursor.textCursor()); + setCurrentCursor(WorksheetCursor(m_currentCursor.entry(), + m_currentCursor.textItem(), c)); + } + if (!atBeginningOfEntry) + result = m_currentCursor.entry()->search(m_pattern, m_searchFlags, + f, m_currentCursor); + entry = m_currentCursor.entry()->previous(); + } else if (m_currentCursor.entry() && m_currentCursor.entry()->previous()) { + entry = m_currentCursor.entry()->previous(); + } else { + entry = worksheet()->lastEntry(); + } + setCurrentCursor(WorksheetCursor()); + + while (!result.isValid() && entry) { + result = entry->search(m_pattern, m_searchFlags, f); + entry = entry->previous(); + } + if (result.isValid()) { + m_atBeginning = false; + QTextCursor c = result.textCursor(); + if (result.textCursor().hasSelection()) + c.setPosition(result.textCursor().selectionStart()); + setCurrentCursor(WorksheetCursor(result.entry(), result.textItem(), c)); + worksheet()->makeVisible(m_currentCursor); + clearStatus(); + worksheet()->setWorksheetCursor(result); + } else { + if (m_atBeginning) { + m_notFound = true; + setStatus(i18n("Not found")); + } else { + m_atBeginning = true; + setStatus(i18n("Reached beginning")); + } + worksheet()->setWorksheetCursor(m_startCursor); + } +} + +void SearchBar::searchForward(bool skipFirstChar) +{ + WorksheetCursor result; + WorksheetEntry* entry; + worksheet()->setWorksheetCursor(WorksheetCursor()); + if (m_currentCursor.isValid()) { + if (skipFirstChar) { + QTextCursor c = m_currentCursor.textCursor(); + c.movePosition(QTextCursor::NextCharacter); + qDebug() << c.position(); + setCurrentCursor(WorksheetCursor(m_currentCursor.entry(), + m_currentCursor.textItem(), c)); + } + result = m_currentCursor.entry()->search(m_pattern, m_searchFlags, + m_qtFlags, m_currentCursor); + entry = m_currentCursor.entry()->next(); + } else if (m_currentCursor.entry()) { + entry = m_currentCursor.entry(); + } else { + entry = worksheet()->firstEntry(); + } + setCurrentCursor(WorksheetCursor()); + + while (!result.isValid() && entry) { + result = entry->search(m_pattern, m_searchFlags, m_qtFlags); + entry = entry->next(); + } + + if (result.isValid()) { + m_atEnd = false; + QTextCursor c = result.textCursor(); + if (result.textCursor().hasSelection()) + c.setPosition(result.textCursor().selectionStart()); + setCurrentCursor(WorksheetCursor(result.entry(), result.textItem(), c)); + worksheet()->makeVisible(m_currentCursor); + clearStatus(); + worksheet()->setWorksheetCursor(result); + } else { + if (m_atEnd) { + m_notFound = true; + setStatus(i18n("Not found")); + } else { + m_atEnd = true; + setStatus(i18n("Reached end")); + } + worksheet()->setWorksheetCursor(m_startCursor); + } +} + +void SearchBar::on_close_clicked() +{ + deleteLater(); +} + +void SearchBar::on_openExtended_clicked() +{ + showExtended(); +} + +void SearchBar::on_openStandard_clicked() +{ + showStandard(); +} + +void SearchBar::on_next_clicked() +{ + next(); +} + +void SearchBar::on_previous_clicked() +{ + prev(); +} + +void SearchBar::on_replace_clicked() +{ + if (!m_currentCursor.isValid()) + return; + + QTextCursor cursor = m_currentCursor.textCursor(); + cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, + m_pattern.length()); + cursor.insertText(m_replacement); + next(); +} + +void SearchBar::on_replaceAll_clicked() +{ + int count = 0; + WorksheetEntry* entry = worksheet()->firstEntry(); + WorksheetCursor cursor; + for (; entry; entry = entry->next()) { + cursor = entry->search(m_pattern, m_searchFlags, m_qtFlags); + while (cursor.isValid()) { + cursor.textCursor().insertText(m_replacement); + cursor = entry->search(m_pattern, m_searchFlags, m_qtFlags, + cursor); + ++count; + } + } + setStatus(i18np("Replaced %1 instance", "Replaced %1 instances", count)); +} + +void SearchBar::on_pattern_textChanged(const QString& p) +{ + worksheet()->setWorksheetCursor(WorksheetCursor()); + m_atBeginning = m_atEnd = m_notFound = false; + if (!p.startsWith(m_pattern)) + setCurrentCursor(m_startCursor); + m_pattern = p; + if (!m_pattern.isEmpty()) { + searchForward(); + nextButton()->setEnabled(true); + previousButton()->setEnabled(true); + if (m_extUi) { + m_extUi->replace->setEnabled(true); + m_extUi->replaceAll->setEnabled(true); + } + } else { + worksheet()->setWorksheetCursor(m_startCursor); + nextButton()->setEnabled(false); + previousButton()->setEnabled(false); + if (m_extUi) { + m_extUi->replace->setEnabled(false); + m_extUi->replaceAll->setEnabled(false); + } + } +} + +void SearchBar::on_replacement_textChanged(const QString& r) +{ + m_replacement = r; +} + +void SearchBar::on_removeFlag_clicked() +{ + QMenu* menu = new QMenu(this); + fillLocationsMenu(menu, m_searchFlags); + connect(menu, SIGNAL("aboutToHide()"), menu, SLOT("deleteLater()")); + menu->exec(mapToGlobal(m_extUi->removeFlag->geometry().topLeft())); +} + +void SearchBar::on_addFlag_clicked() +{ + QMenu* menu = new QMenu(this); + fillLocationsMenu(menu, WorksheetEntry::SearchAll ^ m_searchFlags); + connect(menu, SIGNAL("aboutToHide()"), menu, SLOT("deleteLater()")); + menu->exec(mapToGlobal(m_extUi->addFlag->geometry().topLeft())); +} + +void SearchBar::invalidateStartCursor() +{ + if (!m_startCursor.isValid()) + return; + + WorksheetEntry* entry = m_startCursor.entry()->next(); + if (!entry && worksheet()->firstEntry() != m_startCursor.entry()) + entry = worksheet()->firstEntry(); + + setStartCursor(WorksheetCursor(entry, nullptr, QTextCursor())); +} + +void SearchBar::invalidateCurrentCursor() +{ + if (!m_currentCursor.isValid()) + return; + + WorksheetEntry* entry = m_currentCursor.entry()->next(); + if (!entry) + entry = worksheet()->firstEntry(); + + setCurrentCursor(WorksheetCursor(entry, nullptr, QTextCursor())); +} + +void SearchBar::toggleFlag() +{ + if (!sender()) + return; + int flag = sender()->property("searchFlag").toInt(); + m_searchFlags ^= flag; + updateSearchLocations(); +} + +void SearchBar::on_matchCase_toggled(bool b) +{ + m_qtFlags &= ~QTextDocument::FindCaseSensitively; + if (b) + m_qtFlags |= QTextDocument::FindCaseSensitively; + searchForward(); +} + +void SearchBar::updateSearchLocations() +{ + static QList names; + if (names.empty()) + names << i18n("Commands") << i18n("Results") << i18n("Errors") + << i18n("Text") << i18n("LaTeX Code"); + + QString text = QLatin1String(""); + int flag = 1; + for (int i = 0; flag < WorksheetEntry::SearchAll; flag = (1<<(++i))) { + if (m_searchFlags & flag) { + if (!text.isEmpty()) + text += QLatin1String(", "); + text += names.at(i); + } + } + m_extUi->searchFlagsList->setText(text); + if (m_searchFlags == 0) { + m_extUi->removeFlag->setEnabled(false); + m_extUi->addFlag->setEnabled(true); + } else if (m_searchFlags == WorksheetEntry::SearchAll) { + m_extUi->removeFlag->setEnabled(true); + m_extUi->addFlag->setEnabled(false); + } else { + m_extUi->addFlag->setEnabled(true); + m_extUi->removeFlag->setEnabled(true); + } +} + +void SearchBar::fillLocationsMenu(QMenu* menu, int flags) +{ + static QList names; + if (names.empty()) + names << i18n("Commands") << i18n("Results") << i18n("Errors") + << i18n("Text") << i18n("LaTeX Code"); + int flag = 1; + for (int i = 0; flag < WorksheetEntry::SearchAll; flag = (1<<(++i))) { + if (flags & flag) { + QAction* a = menu->addAction(names.at(i), this, SLOT(toggleFlag())); + a->setProperty("searchFlag", flag); + } + } +} + +void SearchBar::setStartCursor(WorksheetCursor cursor) +{ + if (m_startCursor.entry()) + disconnect(m_startCursor.entry(), SIGNAL(aboutToBeDeleted()), this, + SLOT(invalidateStartCursor())); + if (cursor.entry()) + connect(cursor.entry(), SIGNAL(aboutToBeDeleted()), this, + SLOT(invalidateStartCursor()), Qt::DirectConnection); + m_startCursor = cursor; +} + +void SearchBar::setCurrentCursor(WorksheetCursor cursor) +{ + if (m_currentCursor.entry()) + disconnect(m_currentCursor.entry(), SIGNAL(aboutToBeDeleted()), this, + SLOT(invalidateCurrentCursor())); + if (cursor.entry()) + connect(cursor.entry(), SIGNAL(aboutToBeDeleted()), this, + SLOT(invalidateCurrentCursor()), Qt::DirectConnection); + m_currentCursor = cursor; +} + +void SearchBar::setStatus(QString message) +{ + KSqueezedTextLabel* status; + if (m_stdUi) + status = m_stdUi->status; + else + status = m_extUi->status; + + status->setText(message); +} + +void SearchBar::clearStatus() +{ + setStatus(QLatin1String("")); +} + +void SearchBar::setupStdUi() +{ + if (!m_stdUi) + return; + + m_stdUi->setupUi(this); + m_stdUi->close->setIcon(QIcon::fromTheme(QLatin1String("dialog-close"))); + m_stdUi->openExtended->setIcon(QIcon::fromTheme(QLatin1String("arrow-up-double"))); + m_stdUi->pattern->setText(m_pattern); + m_stdUi->matchCase->setChecked(m_qtFlags & QTextDocument::FindCaseSensitively); + m_stdUi->next->setIcon(QIcon::fromTheme(QLatin1String("go-down-search"))); + m_stdUi->previous->setIcon(QIcon::fromTheme(QLatin1String("go-up-search"))); + if (m_pattern.isEmpty()) { + m_stdUi->next->setEnabled(false); + m_stdUi->previous->setEnabled(false); + } + + m_stdUi->close->setShortcut(Qt::Key_Escape); + setFocusProxy(m_stdUi->pattern); +} + +void SearchBar::setupExtUi() +{ + if (!m_extUi) + return; + + m_extUi->setupUi(this); + m_extUi->close->setIcon(QIcon::fromTheme(QLatin1String("dialog-close"))); + m_extUi->openStandard->setIcon(QIcon::fromTheme(QLatin1String("arrow-down-double"))); + m_extUi->pattern->setText(m_pattern); + m_extUi->replacement->setText(m_replacement); + m_extUi->matchCase->setChecked(m_qtFlags & QTextDocument::FindCaseSensitively); + m_extUi->next->setIcon(QIcon::fromTheme(QLatin1String("go-down-search"))); + m_extUi->previous->setIcon(QIcon::fromTheme(QLatin1String("go-up-search"))); + if (m_pattern.isEmpty()) { + m_extUi->next->setEnabled(false); + m_extUi->previous->setEnabled(false); + m_extUi->replace->setEnabled(false); + m_extUi->replaceAll->setEnabled(false); + } + + m_extUi->addFlag->setIcon(QIcon::fromTheme(QLatin1String("list-add"))); + m_extUi->removeFlag->setIcon(QIcon::fromTheme(QLatin1String("list-remove"))); + + m_extUi->close->setShortcut(Qt::Key_Escape); + setFocusProxy(m_extUi->pattern); + updateSearchLocations(); +} + +QPushButton* SearchBar::previousButton() +{ + if (m_stdUi) + return m_stdUi->previous; + else + return m_extUi->previous; +} + +QPushButton* SearchBar::nextButton() +{ + if (m_stdUi) + return m_stdUi->next; + else + return m_extUi->next; +} + +Worksheet* SearchBar::worksheet() +{ + return m_worksheet; +} + + diff --git a/src/searchbar.h b/src/searchbar.h new file mode 100644 index 0000000..c6e2e9d --- /dev/null +++ b/src/searchbar.h @@ -0,0 +1,113 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef SEARCHBAR_H +#define SEARCHBAR_H + +#include +#include +#include + +#include "ui_standardsearchbar.h" +#include "ui_extendedsearchbar.h" + +#include "worksheetcursor.h" + +class Worksheet; +class WorksheetEntry; +class WorksheetTextItem; + +class QMenu; + +class SearchBar : public QWidget +{ + Q_OBJECT + public: + SearchBar(QWidget* parent, Worksheet* worksheet); + ~SearchBar() override; + + void showStandard(); + void showExtended(); + + void next(); + void prev(); + + void searchForward(bool skipFirstChar = false); + void searchBackward(bool skipFirstChar = false); + + public Q_SLOTS: + void on_close_clicked(); + void on_openExtended_clicked(); + void on_openStandard_clicked(); + void on_next_clicked(); + void on_previous_clicked(); + void on_replace_clicked(); + void on_replaceAll_clicked(); + void on_pattern_textChanged(const QString& p); + void on_replacement_textChanged(const QString& r); + void on_addFlag_clicked(); + void on_removeFlag_clicked(); + void on_matchCase_toggled(bool b); + + void invalidateStartCursor(); + void invalidateCurrentCursor(); + + protected Q_SLOTS: + void toggleFlag(); + + private: + + void updateSearchLocations(); + void fillLocationsMenu(QMenu* menu, int flags); + + void setupStdUi(); + void setupExtUi(); + + void setStatus(QString); + void clearStatus(); + + void setStartCursor(WorksheetCursor cursor); + void setCurrentCursor(WorksheetCursor cursor); + + Worksheet* worksheet(); + + QPushButton* nextButton(); + QPushButton* previousButton(); + + private: + Ui::StandardSearchBar* m_stdUi; + Ui::ExtendedSearchBar* m_extUi; + + WorksheetCursor m_startCursor; + WorksheetCursor m_currentCursor; + + Worksheet* m_worksheet; + QString m_pattern; + QString m_replacement; + QTextDocument::FindFlags m_qtFlags; + unsigned int m_searchFlags; + + bool m_atBeginning; + bool m_atEnd; + bool m_notFound; +}; + +#endif // SEARCHBAR_H + diff --git a/src/settings.kcfgc b/src/settings.kcfgc new file mode 100644 index 0000000..cc51742 --- /dev/null +++ b/src/settings.kcfgc @@ -0,0 +1,5 @@ +File=cantor.kcfg +ClassName=Settings +Singleton=true +Visibility=Q_DECL_EXPORT +Mutators=true diff --git a/src/settings.ui b/src/settings.ui new file mode 100644 index 0000000..d494c11 --- /dev/null +++ b/src/settings.ui @@ -0,0 +1,121 @@ + + + SettingsBase + + + + 0 + 0 + 398 + 400 + + + + + + + + + Default Backend: + + + + + + + true + + + + + + + + + When enabled, Cantor will automatically evaluate every entry below the current one. + + + Reevaluate Entries automatically + + + + + + + + + Defaults + + + + + + Enable LaTeX Typesetting + + + + + + + Enable Syntax Highlighting + + + + + + + Enable Completion + + + + + + + Enable Line Numbers + + + + + + + Enable Worksheet Animations + + + + + + + Ask for confirmation when restarting the backend + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + KComboBox + QComboBox +
      kcombobox.h
      +
      +
      + + +
      diff --git a/src/standardsearchbar.ui b/src/standardsearchbar.ui new file mode 100644 index 0000000..bbb1a00 --- /dev/null +++ b/src/standardsearchbar.ui @@ -0,0 +1,119 @@ + + + StandardSearchBar + + + + 0 + 0 + 736 + 34 + + + + SearchBar + + + + + + + + ... + + + true + + + + + + + Find: + + + + + + + + + + &Next + + + + + + + &Previous + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 13 + 13 + + + + + + + + &Match case + + + + + + + Qt::AlignCenter + + + + + + + ... + + + true + + + + + + + + + + KLineEdit + QLineEdit +
      klineedit.h
      +
      + + KSqueezedTextLabel + QLabel +
      ksqueezedtextlabel.h
      +
      +
      + + pattern + next + previous + matchCase + openExtended + close + + + +
      diff --git a/src/textentry.cpp b/src/textentry.cpp new file mode 100644 index 0000000..b7685c7 --- /dev/null +++ b/src/textentry.cpp @@ -0,0 +1,357 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + */ + +#include "textentry.h" +#include "worksheettextitem.h" +#include "epsrenderer.h" +#include "latexrenderer.h" + +#include + +#include +#include + +TextEntry::TextEntry(Worksheet* worksheet) : WorksheetEntry(worksheet), m_textItem(new WorksheetTextItem(this, Qt::TextEditorInteraction)) +{ + m_textItem->enableRichText(true); + connect(m_textItem, &WorksheetTextItem::moveToPrevious, this, &TextEntry::moveToPreviousEntry); + connect(m_textItem, &WorksheetTextItem::moveToNext, this, &TextEntry::moveToNextEntry); + connect(m_textItem, SIGNAL(execute()), this, SLOT(evaluate())); + connect(m_textItem, &WorksheetTextItem::doubleClick, this, &TextEntry::resolveImagesAtCursor); +} + +void TextEntry::populateMenu(QMenu* menu, QPointF pos) +{ + bool imageSelected = false; + QTextCursor cursor = m_textItem->textCursor(); + const QChar repl = QChar::ObjectReplacementCharacter; + if (cursor.hasSelection()) { + QString selection = m_textItem->textCursor().selectedText(); + imageSelected = selection.contains(repl); + } else { + // we need to try both the current cursor and the one after the that + cursor = m_textItem->cursorForPosition(pos); + qDebug() << cursor.position(); + for (int i = 2; i; --i) { + int p = cursor.position(); + if (m_textItem->document()->characterAt(p-1) == repl && + cursor.charFormat().hasProperty(EpsRenderer::CantorFormula)) { + m_textItem->setTextCursor(cursor); + imageSelected = true; + break; + } + cursor.movePosition(QTextCursor::NextCharacter); + } + } + if (imageSelected) { + menu->addAction(i18n("Show LaTeX code"), this, SLOT(resolveImagesAtCursor())); + menu->addSeparator(); + } + WorksheetEntry::populateMenu(menu, pos); +} + +bool TextEntry::isEmpty() +{ + return m_textItem->document()->isEmpty(); +} + +int TextEntry::type() const +{ + return Type; +} + +bool TextEntry::acceptRichText() +{ + return true; +} + +bool TextEntry::focusEntry(int pos, qreal xCoord) +{ + if (aboutToBeRemoved()) + return false; + m_textItem->setFocusAt(pos, xCoord); + return true; +} + + +void TextEntry::setContent(const QString& content) +{ + m_textItem->setPlainText(content); +} + +void TextEntry::setContent(const QDomElement& content, const KZip& file) +{ + Q_UNUSED(file); + if(content.firstChildElement(QLatin1String("body")).isNull()) + return; + + QDomDocument doc = QDomDocument(); + QDomNode n = doc.importNode(content.firstChildElement(QLatin1String("body")), true); + doc.appendChild(n); + QString html = doc.toString(); + qDebug() << html; + m_textItem->setHtml(html); +} + +QDomElement TextEntry::toXml(QDomDocument& doc, KZip* archive) +{ + Q_UNUSED(archive); + + bool needsEval=false; + //make sure that the latex code is shown instead of the rendered formulas + QTextCursor cursor = m_textItem->document()->find(QString(QChar::ObjectReplacementCharacter)); + while(!cursor.isNull()) + { + QTextCharFormat format = cursor.charFormat(); + if (format.hasProperty(EpsRenderer::CantorFormula)) + { + showLatexCode(cursor); + needsEval=true; + } + + cursor = m_textItem->document()->find(QString(QChar::ObjectReplacementCharacter), cursor); + } + + const QString& html = m_textItem->toHtml(); + qDebug() << html; + QDomElement el = doc.createElement(QLatin1String("Text")); + QDomDocument myDoc = QDomDocument(); + myDoc.setContent(html); + el.appendChild(myDoc.documentElement().firstChildElement(QLatin1String("body"))); + + if (needsEval) + evaluate(); + return el; +} + +QString TextEntry::toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) +{ + Q_UNUSED(commandSep); + + if (commentStartingSeq.isEmpty()) + return QString(); + /* + // would this be plain enough? + QTextCursor cursor = m_textItem->textCursor(); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + + QString text = m_textItem->resolveImages(cursor); + text.replace(QChar::ParagraphSeparator, '\n'); + text.replace(QChar::LineSeparator, '\n'); + */ + QString text = m_textItem->toPlainText(); + if (!commentEndingSeq.isEmpty()) + return commentStartingSeq + text + commentEndingSeq + QLatin1String("\n"); + return commentStartingSeq + text.replace(QLatin1String("\n"), QLatin1String("\n") + commentStartingSeq) + QLatin1String("\n"); + +} + +void TextEntry::interruptEvaluation() +{ +} + +bool TextEntry::evaluate(EvaluationOption evalOp) +{ + QTextCursor cursor = findLatexCode(); + while (!cursor.isNull()) + { + QString latexCode = cursor.selectedText(); + qDebug()<<"found latex: "<setLatexCode(latexCode); + renderer->setEquationOnly(true); + renderer->setEquationType(Cantor::LatexRenderer::InlineEquation); + renderer->setMethod(Cantor::LatexRenderer::LatexMethod); + + renderer->renderBlocking(); + + bool success; + QTextImageFormat formulaFormat; + if (renderer->renderingSuccessful()) { + EpsRenderer* epsRend = worksheet()->epsRenderer(); + formulaFormat = epsRend->render(m_textItem->document(), renderer); + success = !formulaFormat.name().isEmpty(); + } else { + success = false; + } + + qDebug()<<"rendering successful? "<document()->find(QString(QChar::ObjectReplacementCharacter)); + while(!cursor.isNull()) + { + QTextCharFormat format = cursor.charFormat(); + if (format.hasProperty(EpsRenderer::CantorFormula)) + { + qDebug() << "found a formula... rendering the eps..."; + QUrl url = format.property(EpsRenderer::ImagePath).toUrl(); + QSizeF s = worksheet()->epsRenderer()->renderToResource(m_textItem->document(), url); + qDebug() << "rendering successful? " << s.isValid(); + + //cursor.deletePreviousChar(); + //cursor.insertText(QString(QChar::ObjectReplacementCharacter), format); + } + + cursor = m_textItem->document()->find(QString(QChar::ObjectReplacementCharacter), cursor); + } +} + +void TextEntry::resolveImagesAtCursor() +{ + QTextCursor cursor = m_textItem->textCursor(); + if (!cursor.hasSelection()) + cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor); + cursor.insertText(m_textItem->resolveImages(cursor)); +} + +QTextCursor TextEntry::findLatexCode(const QTextCursor& cursor) const +{ + QTextDocument *doc = m_textItem->document(); + QTextCursor startCursor; + if (cursor.isNull()) + startCursor = doc->find(QLatin1String("$$")); + else + startCursor = doc->find(QLatin1String("$$"), cursor); + if (startCursor.isNull()) + return startCursor; + const QTextCursor endCursor = doc->find(QLatin1String("$$"), startCursor); + if (endCursor.isNull()) + return endCursor; + startCursor.setPosition(startCursor.selectionStart()); + startCursor.setPosition(endCursor.position(), QTextCursor::KeepAnchor); + return startCursor; +} + +QString TextEntry::showLatexCode(QTextCursor& cursor) +{ + QString latexCode = cursor.charFormat().property(EpsRenderer::Code).toString(); + cursor.deletePreviousChar(); + latexCode = QLatin1String("$$") + latexCode + QLatin1String("$$"); + cursor.insertText(latexCode); + return latexCode; +} + +int TextEntry::searchText(const QString& text, const QString& pattern, + QTextDocument::FindFlags qt_flags) +{ + Qt::CaseSensitivity caseSensitivity; + if (qt_flags & QTextDocument::FindCaseSensitively) + caseSensitivity = Qt::CaseSensitive; + else + caseSensitivity = Qt::CaseInsensitive; + + int position; + if (qt_flags & QTextDocument::FindBackward) + position = text.lastIndexOf(pattern, -1, caseSensitivity); + else + position = text.indexOf(pattern, 0, caseSensitivity); + + return position; +} + +WorksheetCursor TextEntry::search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos) +{ + if (!(flags & WorksheetEntry::SearchText) || + (pos.isValid() && pos.entry() != this)) + return WorksheetCursor(); + + QTextCursor textCursor = m_textItem->search(pattern, qt_flags, pos); + int position = 0; + QTextCursor latexCursor; + QString latex; + if (flags & WorksheetEntry::SearchLaTeX) { + const QString repl = QString(QChar::ObjectReplacementCharacter); + latexCursor = m_textItem->search(repl, qt_flags, pos); + while (!latexCursor.isNull()) { + latex = m_textItem->resolveImages(latexCursor); + position = searchText(latex, pattern, qt_flags); + if (position >= 0) { + break; + } + WorksheetCursor c(this, m_textItem, latexCursor); + latexCursor = m_textItem->search(repl, qt_flags, c); + } + } + + if (latexCursor.isNull()) { + if (textCursor.isNull()) + return WorksheetCursor(); + else + return WorksheetCursor(this, m_textItem, textCursor); + } else { + if (textCursor.isNull() || latexCursor < textCursor) { + int start = latexCursor.selectionStart(); + latexCursor.insertText(latex); + QTextCursor c = m_textItem->textCursor(); + c.setPosition(start + position); + c.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, + pattern.length()); + return WorksheetCursor(this, m_textItem, c); + } else { + return WorksheetCursor(this, m_textItem, textCursor); + } + } +} + + +void TextEntry::layOutForWidth(qreal w, bool force) +{ + if (size().width() == w && !force) + return; + + m_textItem->setGeometry(0, 0, w); + setSize(QSizeF(m_textItem->width(), m_textItem->height() + VerticalMargin)); +} + +bool TextEntry::wantToEvaluate() +{ + return !findLatexCode().isNull(); +} diff --git a/src/textentry.h b/src/textentry.h new file mode 100644 index 0000000..8b31a07 --- /dev/null +++ b/src/textentry.h @@ -0,0 +1,90 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef TEXTENTRY_H +#define TEXTENTRY_H + +#include +#include +#include +#include +#include +#include +#include + + +#include "worksheetentry.h" +#include "worksheettextitem.h" + +class TextEntry : public WorksheetEntry +{ + Q_OBJECT + public: + explicit TextEntry(Worksheet* worksheet); + ~TextEntry() override = default; + + enum {Type = UserType + 1}; + int type() const override; + + bool isEmpty() override; + + bool acceptRichText() override; + + bool focusEntry(int pos = WorksheetTextItem::TopLeft, qreal xCoord=0) override; + + // do we need/get this? + //bool worksheetContextMenuEvent(...); + //void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + + void setContent(const QString& content) override; + void setContent(const QDomElement& content, const KZip& file) override; + + QDomElement toXml(QDomDocument& doc, KZip* archive) override; + QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq) override; + + void interruptEvaluation() override; + + void layOutForWidth(qreal w, bool force = false) override; + + int searchText(const QString& text, const QString& pattern, + QTextDocument::FindFlags qt_flags); + WorksheetCursor search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos = WorksheetCursor()) override; + + public Q_SLOTS: + bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) override; + void resolveImagesAtCursor(); + void updateEntry() override; + void populateMenu(QMenu* menu, QPointF pos) override; + + protected: + bool wantToEvaluate() override; + + private: + QTextCursor findLatexCode(const QTextCursor& cursor = QTextCursor()) const; + QString showLatexCode(QTextCursor& cursor); + + private: + WorksheetTextItem* m_textItem; +}; + +#endif //TEXTENTRY_H diff --git a/src/textresultitem.cpp b/src/textresultitem.cpp new file mode 100644 index 0000000..763fc71 --- /dev/null +++ b/src/textresultitem.cpp @@ -0,0 +1,163 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "textresultitem.h" +#include "commandentry.h" +#include "lib/result.h" +#include "lib/textresult.h" +#include "lib/latexresult.h" + +#include +#include +#include + +#include +#include + +TextResultItem::TextResultItem(QGraphicsObject* parent, Cantor::Result* result) + : WorksheetTextItem(parent), ResultItem(result) +{ + setTextInteractionFlags(Qt::TextSelectableByMouse); + update(); +} + +double TextResultItem::setGeometry(double x, double y, double w) +{ + return WorksheetTextItem::setGeometry(x, y, w); +} + +void TextResultItem::populateMenu(QMenu* menu, QPointF pos) +{ + QAction * copy = KStandardAction::copy(this, SLOT(copy()), menu); + if (!textCursor().hasSelection()) + copy->setEnabled(false); + menu->addAction(copy); + ResultItem::addCommonActions(this, menu); + + Cantor::Result* res = result(); + if (res->type() == Cantor::LatexResult::Type) { + QAction* showCodeAction = nullptr; + Cantor::LatexResult* lres = dynamic_cast(res); + if (lres->isCodeShown()) + showCodeAction = menu->addAction(i18n("Show Rendered")); + else + showCodeAction = menu->addAction(i18n("Show Code")); + + connect(showCodeAction, &QAction::triggered, this, &TextResultItem::toggleLatexCode); + } + + menu->addSeparator(); + qDebug() << "populate Menu"; + emit menuCreated(menu, mapToParent(pos)); +} + +void TextResultItem::update() +{ + Q_ASSERT(m_result->type() == Cantor::TextResult::Type || m_result->type() == Cantor::LatexResult::Type); + switch(m_result->type()) { + case Cantor::TextResult::Type: + { + QTextCursor cursor = textCursor(); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + QString html = m_result->toHtml(); + if (html.isEmpty()) + cursor.removeSelectedText(); + else + cursor.insertHtml(html); + } + break; + case Cantor::LatexResult::Type: + setLatex(dynamic_cast(m_result)); + break; + default: + break; + } +} + +void TextResultItem::setLatex(Cantor::LatexResult* result) +{ + QTextCursor cursor = textCursor(); + cursor.movePosition(QTextCursor::Start); + cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); + QString latex = result->toLatex().trimmed(); + if (latex.startsWith(QLatin1String("\\begin{eqnarray*}")) && + latex.endsWith(QLatin1String("\\end{eqnarray*}"))) { + latex = latex.mid(17); + latex = latex.left(latex.size() - 15); + } + if (result->isCodeShown()) { + if (latex.isEmpty()) + cursor.removeSelectedText(); + else + cursor.insertText(latex); + } else { + QTextImageFormat format; + format = epsRenderer()->render(cursor.document(), + result->data().toUrl()); + format.setProperty(EpsRenderer::CantorFormula, + EpsRenderer::LatexFormula); + format.setProperty(EpsRenderer::Code, latex); + format.setProperty(EpsRenderer::Delimiter, QLatin1String("$$")); + if(format.isValid()) + cursor.insertText(QString(QChar::ObjectReplacementCharacter), format); + else + cursor.insertText(i18n("Cannot render Eps file. You may need additional packages")); + } +} + +double TextResultItem::width() const +{ + return WorksheetTextItem::width(); +} + +double TextResultItem::height() const +{ + return WorksheetTextItem::height(); +} + +void TextResultItem::toggleLatexCode() +{ + Cantor::LatexResult* lr = dynamic_cast(result()); + if(lr->isCodeShown()) + lr->showRendered(); + else + lr->showCode(); + + parentEntry()->updateEntry(); +} + +void TextResultItem::saveResult() +{ + Cantor::Result* res = result(); + const QString& filename = QFileDialog::getSaveFileName(worksheet()->worksheetView(), i18n("Save result"), QString(), res->mimeType()); + qDebug() << "saving result to " << filename; + res->save(filename); +} + +void TextResultItem::deleteLater() +{ + WorksheetTextItem::deleteLater(); +} + +EpsRenderer* TextResultItem::epsRenderer() const +{ + return qobject_cast(scene())->epsRenderer(); +} diff --git a/src/textresultitem.h b/src/textresultitem.h new file mode 100644 index 0000000..39d3a22 --- /dev/null +++ b/src/textresultitem.h @@ -0,0 +1,57 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef TEXTRESULTITEM_H +#define TEXTRESULTITEM_H + +#include "resultitem.h" +#include "worksheettextitem.h" +#include "worksheetentry.h" +#include "epsrenderer.h" + +#include "lib/latexresult.h" + +class TextResultItem : public WorksheetTextItem, public ResultItem +{ + Q_OBJECT + public: + explicit TextResultItem(QGraphicsObject* parent, Cantor::Result* result); + ~TextResultItem() override = default; + + using WorksheetTextItem::setGeometry; + double setGeometry(double x, double y, double w) override; + void populateMenu(QMenu* menu, QPointF pos) override; + + void update() override; + + void setLatex(Cantor::LatexResult* result); + + double width() const override; + double height() const override; + + void deleteLater() override; + EpsRenderer* epsRenderer() const; + + protected Q_SLOTS: + void toggleLatexCode(); + void saveResult(); +}; + +#endif //TEXTRESULTITEM_H diff --git a/src/worksheet.cpp b/src/worksheet.cpp new file mode 100644 index 0000000..1b134ea --- /dev/null +++ b/src/worksheet.cpp @@ -0,0 +1,1942 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheet.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "settings.h" +#include "commandentry.h" +#include "textentry.h" +#include "markdownentry.h" +#include "latexentry.h" +#include "imageentry.h" +#include "pagebreakentry.h" +#include "placeholderentry.h" +#include "lib/backend.h" +#include "lib/extension.h" +#include "lib/helpresult.h" +#include "lib/session.h" +#include "lib/defaulthighlighter.h" + +#include + +const double Worksheet::LeftMargin = 4; +const double Worksheet::RightMargin = 4; +const double Worksheet::TopMargin = 12; +const double Worksheet::EntryCursorLength = 30; +const double Worksheet::EntryCursorWidth = 2; + +Worksheet::Worksheet(Cantor::Backend* backend, QWidget* parent) + : QGraphicsScene(parent) +{ + m_session = backend->createSession(); + m_highlighter = nullptr; + + m_firstEntry = nullptr; + m_lastEntry = nullptr; + m_lastFocusedTextItem = nullptr; + m_dragEntry = nullptr; + m_placeholderEntry = nullptr; + m_viewWidth = 0; + m_protrusion = 0; + m_dragScrollTimer = nullptr; + + m_choosenCursorEntry = nullptr; + m_isCursorEntryAfterLastEntry = false; + + m_entryCursorItem = addLine(0,0,0,0); + const QColor& color = (palette().color(QPalette::Base).lightness() < 128) ? Qt::white : Qt::black; + QPen pen(color); + pen.setWidth(EntryCursorWidth); + m_entryCursorItem->setPen(pen); + m_entryCursorItem->hide(); + + m_cursorItemTimer = new QTimer(this); + connect(m_cursorItemTimer, &QTimer::timeout, this, &Worksheet::animateEntryCursor); + m_cursorItemTimer->start(500); + + m_isPrinting = false; + m_loginDone = false; + m_readOnly = false; + m_isLoadingFromFile = false; + + enableHighlighting(Settings::self()->highlightDefault()); + enableCompletion(Settings::self()->completionDefault()); + enableExpressionNumbering(Settings::self()->expressionNumberingDefault()); + enableAnimations(Settings::self()->animationDefault()); +} + +Worksheet::~Worksheet() +{ + // This is necessary, because a SeachBar might access firstEntry() + // while the scene is deleted. Maybe there is a better solution to + // this problem, but I can't seem to find it. + m_firstEntry = nullptr; + if (m_loginDone) + m_session->logout(); +} + +void Worksheet::loginToSession() +{ + m_session->login(); +#ifdef WITH_EPS + session()->setTypesettingEnabled(Settings::self()->typesetDefault()); +#else + session()->setTypesettingEnabled(false); +#endif + m_loginDone = true; +} + +void Worksheet::print(QPrinter* printer) +{ + m_epsRenderer.useHighResolution(true); + m_isPrinting = true; + QRect pageRect = printer->pageRect(); + qreal scale = 1; // todo: find good scale for page size + // todo: use epsRenderer()->scale() for printing ? + const qreal width = pageRect.width()/scale; + const qreal height = pageRect.height()/scale; + setViewSize(width, height, scale, true); + + QPainter painter(printer); + painter.scale(scale, scale); + painter.setRenderHint(QPainter::Antialiasing); + WorksheetEntry* entry = firstEntry(); + qreal y = TopMargin; + + while (entry) { + qreal h = 0; + do { + if (entry->type() == PageBreakEntry::Type) { + entry = entry->next(); + break; + } + h += entry->size().height(); + entry = entry->next(); + } while (entry && h + entry->size().height() <= height); + + render(&painter, QRectF(0, 0, width, height), + QRectF(0, y, width, h)); + y += h; + if (entry) + printer->newPage(); + } + + //render(&painter); + + painter.end(); + m_isPrinting = false; + m_epsRenderer.useHighResolution(false); + m_epsRenderer.setScale(-1); // force update in next call to setViewSize, + worksheetView()->updateSceneSize(); // ... which happens in here +} + +bool Worksheet::isPrinting() +{ + return m_isPrinting; +} + +void Worksheet::setViewSize(qreal w, qreal h, qreal s, bool forceUpdate) +{ + Q_UNUSED(h); + + m_viewWidth = w; + if (s != m_epsRenderer.scale() || forceUpdate) { + m_epsRenderer.setScale(s); + for (WorksheetEntry *entry = firstEntry(); entry; entry = entry->next()) + entry->updateEntry(); + } + updateLayout(); +} + +void Worksheet::updateLayout() +{ + bool cursorRectVisible = false; + bool atEnd = worksheetView()->isAtEnd(); + if (currentTextItem()) { + QRectF cursorRect = currentTextItem()->sceneCursorRect(); + cursorRectVisible = worksheetView()->isVisible(cursorRect); + } + + const qreal w = m_viewWidth - LeftMargin - RightMargin; + qreal y = TopMargin; + const qreal x = LeftMargin; + for (WorksheetEntry *entry = firstEntry(); entry; entry = entry->next()) + y += entry->setGeometry(x, y, w); + setSceneRect(QRectF(0, 0, m_viewWidth + m_protrusion, y)); + if (cursorRectVisible) + makeVisible(worksheetCursor()); + else if (atEnd) + worksheetView()->scrollToEnd(); + drawEntryCursor(); +} + +void Worksheet::updateEntrySize(WorksheetEntry* entry) +{ + bool cursorRectVisible = false; + bool atEnd = worksheetView()->isAtEnd(); + if (currentTextItem()) { + QRectF cursorRect = currentTextItem()->sceneCursorRect(); + cursorRectVisible = worksheetView()->isVisible(cursorRect); + } + + qreal y = entry->y() + entry->size().height(); + for (entry = entry->next(); entry; entry = entry->next()) { + entry->setY(y); + y += entry->size().height(); + } + setSceneRect(QRectF(0, 0, m_viewWidth + m_protrusion, y)); + if (cursorRectVisible) + makeVisible(worksheetCursor()); + else if (atEnd) + worksheetView()->scrollToEnd(); + drawEntryCursor(); +} + +void Worksheet::addProtrusion(qreal width) +{ + if (m_itemProtrusions.contains(width)) + ++m_itemProtrusions[width]; + else + m_itemProtrusions.insert(width, 1); + if (width > m_protrusion) { + m_protrusion = width; + qreal y = lastEntry()->size().height() + lastEntry()->y(); + setSceneRect(QRectF(0, 0, m_viewWidth + m_protrusion, y)); + } +} + +void Worksheet::updateProtrusion(qreal oldWidth, qreal newWidth) +{ + removeProtrusion(oldWidth); + addProtrusion(newWidth); +} + +void Worksheet::removeProtrusion(qreal width) +{ + if (--m_itemProtrusions[width] == 0) { + m_itemProtrusions.remove(width); + if (width == m_protrusion) { + qreal max = -1; + for (qreal p : m_itemProtrusions.keys()) { + if (p > max) + max = p; + } + m_protrusion = max; + qreal y = lastEntry()->size().height() + lastEntry()->y(); + setSceneRect(QRectF(0, 0, m_viewWidth + m_protrusion, y)); + } + } +} + +bool Worksheet::isEmpty() +{ + return !m_firstEntry; +} + +bool Worksheet::isLoadingFromFile() +{ + return m_isLoadingFromFile; +} + +void Worksheet::makeVisible(WorksheetEntry* entry) +{ + QRectF r = entry->boundingRect(); + r = entry->mapRectToScene(r); + r.adjust(0, -10, 0, 10); + worksheetView()->makeVisible(r); +} + +void Worksheet::makeVisible(const WorksheetCursor& cursor) +{ + if (cursor.textCursor().isNull()) { + if (cursor.entry()) + makeVisible(cursor.entry()); + return; + } + QRectF r = cursor.textItem()->sceneCursorRect(cursor.textCursor()); + QRectF er = cursor.entry()->boundingRect(); + er = cursor.entry()->mapRectToScene(er); + er.adjust(0, -10, 0, 10); + r.adjust(0, qMax(qreal(-100.0), er.top() - r.top()), + 0, qMin(qreal(100.0), er.bottom() - r.bottom())); + worksheetView()->makeVisible(r); +} + +WorksheetView* Worksheet::worksheetView() +{ + return qobject_cast(views()[0]); +} + +void Worksheet::setModified() +{ + emit modified(); +} + +WorksheetCursor Worksheet::worksheetCursor() +{ + WorksheetEntry* entry = currentEntry(); + WorksheetTextItem* item = currentTextItem(); + + if (!entry || !item) + return WorksheetCursor(); + return WorksheetCursor(entry, item, item->textCursor()); +} + +void Worksheet::setWorksheetCursor(const WorksheetCursor& cursor) +{ + if (!cursor.isValid()) + return; + + if (m_lastFocusedTextItem) + m_lastFocusedTextItem->clearSelection(); + + m_lastFocusedTextItem = cursor.textItem(); + + cursor.textItem()->setTextCursor(cursor.textCursor()); +} + +WorksheetEntry* Worksheet::currentEntry() +{ + QGraphicsItem* item = focusItem(); + // Entry cursor activate + if (m_choosenCursorEntry || m_isCursorEntryAfterLastEntry) + return nullptr; + + if (!item /*&& !hasFocus()*/) + item = m_lastFocusedTextItem; + /*else + m_focusItem = item;*/ + while (item && (item->type() < QGraphicsItem::UserType || + item->type() >= QGraphicsItem::UserType + 100)) + item = item->parentItem(); + if (item) { + WorksheetEntry* entry = qobject_cast(item->toGraphicsObject()); + if (entry && entry->aboutToBeRemoved()) { + if (entry->isAncestorOf(m_lastFocusedTextItem)) + m_lastFocusedTextItem = nullptr; + return nullptr; + } + return entry; + } + return nullptr; +} + +WorksheetEntry* Worksheet::firstEntry() +{ + return m_firstEntry; +} + +WorksheetEntry* Worksheet::lastEntry() +{ + return m_lastEntry; +} + +void Worksheet::setFirstEntry(WorksheetEntry* entry) +{ + if (m_firstEntry) + disconnect(m_firstEntry, SIGNAL(aboutToBeDeleted()), + this, SLOT(invalidateFirstEntry())); + m_firstEntry = entry; + if (m_firstEntry) + connect(m_firstEntry, SIGNAL(aboutToBeDeleted()), + this, SLOT(invalidateFirstEntry()), Qt::DirectConnection); +} + +void Worksheet::setLastEntry(WorksheetEntry* entry) +{ + if (m_lastEntry) + disconnect(m_lastEntry, SIGNAL(aboutToBeDeleted()), + this, SLOT(invalidateLastEntry())); + m_lastEntry = entry; + if (m_lastEntry) + connect(m_lastEntry, SIGNAL(aboutToBeDeleted()), + this, SLOT(invalidateLastEntry()), Qt::DirectConnection); +} + +void Worksheet::invalidateFirstEntry() +{ + if (m_firstEntry) + setFirstEntry(m_firstEntry->next()); +} + +void Worksheet::invalidateLastEntry() +{ + if (m_lastEntry) + setLastEntry(m_lastEntry->previous()); +} + +WorksheetEntry* Worksheet::entryAt(qreal x, qreal y) +{ + QGraphicsItem* item = itemAt(x, y, QTransform()); + while (item && (item->type() <= QGraphicsItem::UserType || + item->type() >= QGraphicsItem::UserType + 100)) + item = item->parentItem(); + if (item) + return qobject_cast(item->toGraphicsObject()); + return nullptr; +} + +WorksheetEntry* Worksheet::entryAt(QPointF p) +{ + return entryAt(p.x(), p.y()); +} + +void Worksheet::focusEntry(WorksheetEntry *entry) +{ + if (!entry) + return; + entry->focusEntry(); + //bool rt = entry->acceptRichText(); + //setActionsEnabled(rt); + //setAcceptRichText(rt); + //ensureCursorVisible(); +} + +void Worksheet::startDrag(WorksheetEntry* entry, QDrag* drag) +{ + if (m_readOnly) + return; + + resetEntryCursor(); + m_dragEntry = entry; + WorksheetEntry* prev = entry->previous(); + WorksheetEntry* next = entry->next(); + m_placeholderEntry = new PlaceHolderEntry(this, entry->size()); + m_placeholderEntry->setPrevious(prev); + m_placeholderEntry->setNext(next); + if (prev) + prev->setNext(m_placeholderEntry); + else + setFirstEntry(m_placeholderEntry); + if (next) + next->setPrevious(m_placeholderEntry); + else + setLastEntry(m_placeholderEntry); + m_dragEntry->hide(); + Qt::DropAction action = drag->exec(); + + qDebug() << action; + if (action == Qt::MoveAction && m_placeholderEntry) { + qDebug() << "insert in new position"; + prev = m_placeholderEntry->previous(); + next = m_placeholderEntry->next(); + } + m_dragEntry->setPrevious(prev); + m_dragEntry->setNext(next); + if (prev) + prev->setNext(m_dragEntry); + else + setFirstEntry(m_dragEntry); + if (next) + next->setPrevious(m_dragEntry); + else + setLastEntry(m_dragEntry); + m_dragEntry->show(); + m_dragEntry->focusEntry(); + const QPointF scenePos = worksheetView()->sceneCursorPos(); + if (entryAt(scenePos) != m_dragEntry) + m_dragEntry->hideActionBar(); + updateLayout(); + if (m_placeholderEntry) { + m_placeholderEntry->setPrevious(nullptr); + m_placeholderEntry->setNext(nullptr); + m_placeholderEntry->hide(); + m_placeholderEntry->deleteLater(); + m_placeholderEntry = nullptr; + } + m_dragEntry = nullptr; +} + +void Worksheet::evaluate() +{ + qDebug()<<"evaluate worksheet"; + if (!m_loginDone && !m_readOnly) + loginToSession(); + + firstEntry()->evaluate(WorksheetEntry::EvaluateNext); + + emit modified(); +} + +void Worksheet::evaluateCurrentEntry() +{ + if (!m_loginDone && !m_readOnly) + loginToSession(); + + WorksheetEntry* entry = currentEntry(); + if(!entry) + return; + entry->evaluateCurrentItem(); +} + +bool Worksheet::completionEnabled() +{ + return m_completionEnabled; +} + +void Worksheet::showCompletion() +{ + WorksheetEntry* current = currentEntry(); + current->showCompletion(); +} + +WorksheetEntry* Worksheet::appendEntry(const int type) +{ + WorksheetEntry* entry = WorksheetEntry::create(type, this); + + if (entry) + { + qDebug() << "Entry Appended"; + entry->setPrevious(lastEntry()); + if (lastEntry()) + lastEntry()->setNext(entry); + if (!firstEntry()) + setFirstEntry(entry); + setLastEntry(entry); + updateLayout(); + makeVisible(entry); + focusEntry(entry); + emit modified(); + } + return entry; +} + +WorksheetEntry* Worksheet::appendCommandEntry() +{ + return appendEntry(CommandEntry::Type); +} + +WorksheetEntry* Worksheet::appendTextEntry() +{ + return appendEntry(TextEntry::Type); +} + +WorksheetEntry* Worksheet::appendMarkdownEntry() +{ + return appendEntry(MarkdownEntry::Type); +} + +WorksheetEntry* Worksheet::appendPageBreakEntry() +{ + return appendEntry(PageBreakEntry::Type); +} + +WorksheetEntry* Worksheet::appendImageEntry() +{ + return appendEntry(ImageEntry::Type); +} + +WorksheetEntry* Worksheet::appendLatexEntry() +{ + return appendEntry(LatexEntry::Type); +} + +void Worksheet::appendCommandEntry(const QString& text) +{ + WorksheetEntry* entry = lastEntry(); + if(!entry->isEmpty()) + { + entry = appendCommandEntry(); + } + + if (entry) + { + focusEntry(entry); + entry->setContent(text); + evaluateCurrentEntry(); + } +} + +WorksheetEntry* Worksheet::insertEntry(const int type, WorksheetEntry* current) +{ + if (!current) + current = currentEntry(); + + if (!current) + return appendEntry(type); + + WorksheetEntry *next = current->next(); + WorksheetEntry *entry = nullptr; + + if (!next || next->type() != type || !next->isEmpty()) + { + entry = WorksheetEntry::create(type, this); + entry->setPrevious(current); + entry->setNext(next); + current->setNext(entry); + if (next) + next->setPrevious(entry); + else + setLastEntry(entry); + updateLayout(); + emit modified(); + } else { + entry = next; + } + + focusEntry(entry); + makeVisible(entry); + return entry; +} + +WorksheetEntry* Worksheet::insertTextEntry(WorksheetEntry* current) +{ + return insertEntry(TextEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertMarkdownEntry(WorksheetEntry* current) +{ + return insertEntry(MarkdownEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertCommandEntry(WorksheetEntry* current) +{ + return insertEntry(CommandEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertImageEntry(WorksheetEntry* current) +{ + return insertEntry(ImageEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertPageBreakEntry(WorksheetEntry* current) +{ + return insertEntry(PageBreakEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertLatexEntry(WorksheetEntry* current) +{ + return insertEntry(LatexEntry::Type, current); +} + +void Worksheet::insertCommandEntry(const QString& text) +{ + WorksheetEntry* entry = insertCommandEntry(); + if(entry&&!text.isNull()) + { + entry->setContent(text); + evaluateCurrentEntry(); + } +} + +WorksheetEntry* Worksheet::insertEntryBefore(int type, WorksheetEntry* current) +{ + if (!current) + current = currentEntry(); + + if (!current) + return nullptr; + + WorksheetEntry *prev = current->previous(); + WorksheetEntry *entry = nullptr; + + if(!prev || prev->type() != type || !prev->isEmpty()) + { + entry = WorksheetEntry::create(type, this); + entry->setNext(current); + entry->setPrevious(prev); + current->setPrevious(entry); + if (prev) + prev->setNext(entry); + else + setFirstEntry(entry); + updateLayout(); + emit modified(); + } + + focusEntry(entry); + return entry; +} + +WorksheetEntry* Worksheet::insertTextEntryBefore(WorksheetEntry* current) +{ + return insertEntryBefore(TextEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertMarkdownEntryBefore(WorksheetEntry* current) +{ + return insertEntryBefore(MarkdownEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertCommandEntryBefore(WorksheetEntry* current) +{ + return insertEntryBefore(CommandEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertPageBreakEntryBefore(WorksheetEntry* current) +{ + return insertEntryBefore(PageBreakEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertImageEntryBefore(WorksheetEntry* current) +{ + return insertEntryBefore(ImageEntry::Type, current); +} + +WorksheetEntry* Worksheet::insertLatexEntryBefore(WorksheetEntry* current) +{ + return insertEntryBefore(LatexEntry::Type, current); +} + +void Worksheet::interrupt() +{ + if (m_session->status() == Cantor::Session::Running) + { + m_session->interrupt(); + emit updatePrompt(); + } +} + +void Worksheet::interruptCurrentEntryEvaluation() +{ + currentEntry()->interruptEvaluation(); +} + +void Worksheet::highlightItem(WorksheetTextItem* item) +{ + if (!m_highlighter) + return; + + QTextDocument *oldDocument = m_highlighter->document(); + QList > formats; + + if (oldDocument) + { + for (QTextBlock b = oldDocument->firstBlock(); + b.isValid(); b = b.next()) + { + formats.append(b.layout()->additionalFormats()); + } + } + + // Not every highlighter is a Cantor::DefaultHighligther (e.g. the + // highlighter for KAlgebra) + Cantor::DefaultHighlighter* hl = qobject_cast(m_highlighter); + if (hl) { + hl->setTextItem(item); + } else { + m_highlighter->setDocument(item->document()); + } + + if (oldDocument) + { + QTextCursor cursor(oldDocument); + cursor.beginEditBlock(); + for (QTextBlock b = oldDocument->firstBlock(); + b.isValid(); b = b.next()) + { + b.layout()->setAdditionalFormats(formats.first()); + formats.pop_front(); + } + cursor.endEditBlock(); + } + +} + +void Worksheet::rehighlight() +{ + if(m_highlighter) + { + // highlight every entry + WorksheetEntry* entry; + for (entry = firstEntry(); entry; entry = entry->next()) { + WorksheetTextItem* item = entry->highlightItem(); + if (!item) + continue; + highlightItem(item); + m_highlighter->rehighlight(); + } + entry = currentEntry(); + WorksheetTextItem* textitem = entry ? entry->highlightItem() : nullptr; + if (textitem && textitem->hasFocus()) + highlightItem(textitem); + } else + { + // remove highlighting from entries + WorksheetEntry* entry; + for (entry = firstEntry(); entry; entry = entry->next()) { + WorksheetTextItem* item = entry->highlightItem(); + if (!item) + continue; + QTextCursor cursor(item->document()); + cursor.beginEditBlock(); + for (QTextBlock b = item->document()->firstBlock(); + b.isValid(); b = b.next()) + { + b.layout()->clearAdditionalFormats(); + } + cursor.endEditBlock(); + } + update(); + } +} + +void Worksheet::enableHighlighting(bool highlight) +{ + if(highlight) + { + if(m_highlighter) + m_highlighter->deleteLater(); + + if (!m_readOnly) + m_highlighter=session()->syntaxHighlighter(this); + else + m_highlighter=nullptr; + + if(!m_highlighter) + m_highlighter=new Cantor::DefaultHighlighter(this); + + connect(m_highlighter, SIGNAL(rulesChanged()), this, SLOT(rehighlight())); + + }else + { + if(m_highlighter) + m_highlighter->deleteLater(); + m_highlighter=nullptr; + } + + rehighlight(); +} + +void Worksheet::enableCompletion(bool enable) +{ + m_completionEnabled=enable; +} + +Cantor::Session* Worksheet::session() +{ + return m_session; +} + +bool Worksheet::isRunning() +{ + return m_session && m_session->status()==Cantor::Session::Running; +} + +bool Worksheet::isReadOnly() +{ + return m_readOnly; +} + +bool Worksheet::showExpressionIds() +{ + return m_showExpressionIds; +} + +bool Worksheet::animationsEnabled() +{ + return m_animationsEnabled; +} + +void Worksheet::enableAnimations(bool enable) +{ + m_animationsEnabled = enable; +} + +void Worksheet::enableExpressionNumbering(bool enable) +{ + m_showExpressionIds=enable; + emit updatePrompt(); +} + +QDomDocument Worksheet::toXML(KZip* archive) +{ + QDomDocument doc( QLatin1String("CantorWorksheet") ); + QDomElement root=doc.createElement( QLatin1String("Worksheet") ); + root.setAttribute(QLatin1String("backend"), (m_session ? m_session->backend()->name(): m_backendName)); + doc.appendChild(root); + + for( WorksheetEntry* entry = firstEntry(); entry; entry = entry->next()) + { + QDomElement el = entry->toXml(doc, archive); + root.appendChild( el ); + } + return doc; +} + +void Worksheet::save( const QString& filename ) +{ + QFile file(filename); + if ( !file.open(QIODevice::WriteOnly) ) + { + KMessageBox::error( worksheetView(), + i18n( "Cannot write file %1." , filename ), + i18n( "Error - Cantor" )); + return; + } + + save(&file); +} + +QByteArray Worksheet::saveToByteArray() +{ + QBuffer buffer; + save(&buffer); + + return buffer.buffer(); +} + +void Worksheet::save( QIODevice* device) +{ + qDebug()<<"saving to filename"; + KZip zipFile( device ); + + + if ( !zipFile.open(QIODevice::WriteOnly) ) + { + KMessageBox::error( worksheetView(), + i18n( "Cannot write file." ), + i18n( "Error - Cantor" )); + return; + } + + QByteArray content = toXML(&zipFile).toByteArray(); + qDebug()<<"content: "<backend(); + if (backend->extensions().contains(QLatin1String("ScriptExtension"))) + { + Cantor::ScriptExtension* e=dynamic_cast(backend->extension(QLatin1String(("ScriptExtension")))); + cmdSep=e->commandSeparator(); + commentStartingSeq = e->commentStartingSequence(); + commentEndingSeq = e->commentEndingSequence(); + } + } + else + KMessageBox::information(worksheetView(), i18n("In read-only mode Cantor couldn't guarantee, that the export will be valid for %1", m_backendName), i18n("Cantor")); + + QTextStream stream(&file); + + for(WorksheetEntry * entry = firstEntry(); entry; entry = entry->next()) + { + const QString& str=entry->toPlain(cmdSep, commentStartingSeq, commentEndingSeq); + if(!str.isEmpty()) + stream << str + QLatin1Char('\n'); + } + + file.close(); +} + +void Worksheet::saveLatex(const QString& filename) +{ + qDebug()<<"exporting to Latex: " <) + stream << out.replace(QLatin1String("&"), QLatin1String("&")) + .replace(QLatin1String(">"), QLatin1String(">")) + .replace(QLatin1String("<"), QLatin1String("<")); + file.close(); +} + +bool Worksheet::load(const QString& filename ) +{ + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + KMessageBox::error(worksheetView(), i18n("Couldn't open the file %1", filename), i18n("Cantor")); + return false; + } + + bool rc = load(&file); + if (rc && !m_readOnly) + m_session->setWorksheetPath(filename); + + return rc; +} + +void Worksheet::load(QByteArray* data) +{ + QBuffer buf(data); + load(&buf); +} + +bool Worksheet::load(QIODevice* device) +{ + KZip file(device); + if (!file.open(QIODevice::ReadOnly)) { + qDebug()<<"not a zip file"; + QApplication::restoreOverrideCursor(); + KMessageBox::error(worksheetView(), i18n("The selected file is not a valid Cantor project file."), i18n("Cantor")); + return false; + } + + const KArchiveEntry* contentEntry=file.directory()->entry(QLatin1String("content.xml")); + if (!contentEntry->isFile()) + { + qDebug()<<"content.xml file not found in the zip archive"; + QApplication::restoreOverrideCursor(); + KMessageBox::error(worksheetView(), i18n("The selected file is not a valid Cantor project file."), i18n("Cantor")); + return false; + } + + const KArchiveFile* content = static_cast(contentEntry); + QByteArray data = content->data(); + +// qDebug()<<"read: "<isEnabled()) + { + QApplication::restoreOverrideCursor(); + KMessageBox::information(worksheetView(), i18n("There are some problems with the %1 backend,\n"\ + "please check your configuration or install the needed packages.\n" + "You will only be able to view this worksheet.", m_backendName), i18n("Cantor")); + m_readOnly = true; + } + + if (m_readOnly) + { + // TODO: Handle this here? + for (QAction* action : m_richTextActionList) + action->setEnabled(false); + } + + m_isLoadingFromFile = true; + + //cleanup the worksheet and all it contains + delete m_session; + m_session=nullptr; + m_loginDone = false; + + //file can only be loaded in a worksheet that was not eidted/modified yet (s.a. CantorShell::load()) + //in this case on the default "first entry" is available -> delete it. + if (m_firstEntry) { + delete m_firstEntry; + m_firstEntry = nullptr; + } + + resetEntryCursor(); + + if (!m_readOnly) + m_session=b->createSession(); + + qDebug()<<"loading entries"; + QDomElement expressionChild = root.firstChildElement(); + WorksheetEntry* entry = nullptr; + while (!expressionChild.isNull()) { + QString tag = expressionChild.tagName(); + if (tag == QLatin1String("Expression")) + { + entry = appendCommandEntry(); + entry->setContent(expressionChild, file); + } else if (tag == QLatin1String("Text")) + { + entry = appendTextEntry(); + entry->setContent(expressionChild, file); + } else if (tag == QLatin1String("Markdown")) + { + entry = appendMarkdownEntry(); + entry->setContent(expressionChild, file); + } else if (tag == QLatin1String("Latex")) + { + entry = appendLatexEntry(); + entry->setContent(expressionChild, file); + } else if (tag == QLatin1String("PageBreak")) + { + entry = appendPageBreakEntry(); + entry->setContent(expressionChild, file); + } + else if (tag == QLatin1String("Image")) + { + entry = appendImageEntry(); + entry->setContent(expressionChild, file); + } + + if (m_readOnly && entry) + { + entry->setAcceptHoverEvents(false); + entry = nullptr; + } + + expressionChild = expressionChild.nextSiblingElement(); + } + + if (m_readOnly) + clearFocus(); + + m_isLoadingFromFile = false; + + //Set the Highlighting, depending on the current state + //If the session isn't logged in, use the default + enableHighlighting( m_highlighter!=nullptr || Settings::highlightDefault() ); + + emit loaded(); + return true; +} + +void Worksheet::gotResult(Cantor::Expression* expr) +{ + if(expr==nullptr) + expr=qobject_cast(sender()); + + if(expr==nullptr) + return; + + //We're only interested in help results, others are handled by the WorksheetEntry + for (auto* result : expr->results()) + { + if(result && result->type()==Cantor::HelpResult::Type) + { + QString help = result->toHtml(); + //Do some basic LaTeX replacing + help.replace(QRegExp(QLatin1String("\\\\code\\{([^\\}]*)\\}")), QLatin1String("\\1")); + help.replace(QRegExp(QLatin1String("\\$([^\\$])\\$")), QLatin1String("\\1")); + + emit showHelp(help); + + //TODO: break after the first help result found, not clear yet how to handle multiple requests for help within one single command (e.g. ??ev;??int). + break; + } + } +} + +void Worksheet::removeCurrentEntry() +{ + qDebug()<<"removing current entry"; + WorksheetEntry* entry=currentEntry(); + if(!entry) + return; + + // In case we just removed this + if (entry->isAncestorOf(m_lastFocusedTextItem)) + m_lastFocusedTextItem = nullptr; + entry->startRemoving(); +} + +EpsRenderer* Worksheet::epsRenderer() +{ + return &m_epsRenderer; +} + +QMenu* Worksheet::createContextMenu() +{ + QMenu *menu = new QMenu(worksheetView()); + connect(menu, SIGNAL(aboutToHide()), menu, SLOT(deleteLater())); + + return menu; +} + +void Worksheet::populateMenu(QMenu *menu, QPointF pos) +{ + WorksheetEntry* entry = entryAt(pos); + if (entry && !entry->isAncestorOf(m_lastFocusedTextItem)) { + WorksheetTextItem* item = + qgraphicsitem_cast(itemAt(pos, QTransform())); + if (item && item->isEditable()) + m_lastFocusedTextItem = item; + } + + if (!isRunning()) + menu->addAction(QIcon::fromTheme(QLatin1String("system-run")), i18n("Evaluate Worksheet"), + this, SLOT(evaluate()), 0); + else + menu->addAction(QIcon::fromTheme(QLatin1String("process-stop")), i18n("Interrupt"), this, + SLOT(interrupt()), 0); + menu->addSeparator(); + + if (entry) { + QMenu* insert = new QMenu(menu); + QMenu* insertBefore = new QMenu(menu); + + insert->addAction(QIcon::fromTheme(QLatin1String("run-build")), i18n("Command Entry"), entry, SLOT(insertCommandEntry())); + insert->addAction(QIcon::fromTheme(QLatin1String("draw-text")), i18n("Text Entry"), entry, SLOT(insertTextEntry())); +#ifdef Discount_FOUND + insert->addAction(QIcon::fromTheme(QLatin1String("text-x-markdown")), i18n("Markdown Entry"), entry, SLOT(insertMarkdownEntry())); +#endif +#ifdef WITH_EPS + insert->addAction(QIcon::fromTheme(QLatin1String("text-x-tex")), i18n("LaTeX Entry"), entry, SLOT(insertLatexEntry())); +#endif + insert->addAction(QIcon::fromTheme(QLatin1String("image-x-generic")), i18n("Image"), entry, SLOT(insertImageEntry())); + insert->addAction(QIcon::fromTheme(QLatin1String("go-next-view-page")), i18n("Page Break"), entry, SLOT(insertPageBreakEntry())); + + insertBefore->addAction(QIcon::fromTheme(QLatin1String("run-build")), i18n("Command Entry"), entry, SLOT(insertCommandEntryBefore())); + insertBefore->addAction(QIcon::fromTheme(QLatin1String("draw-text")), i18n("Text Entry"), entry, SLOT(insertTextEntryBefore())); +#ifdef Discount_FOUND + insertBefore->addAction(QIcon::fromTheme(QLatin1String("text-x-markdown")), i18n("Markdown Entry"), entry, SLOT(insertMarkdownEntryBefore())); +#endif +#ifdef WITH_EPS + insertBefore->addAction(QIcon::fromTheme(QLatin1String("text-x-tex")), i18n("LaTeX Entry"), entry, SLOT(insertLatexEntryBefore())); +#endif + insertBefore->addAction(QIcon::fromTheme(QLatin1String("image-x-generic")), i18n("Image"), entry, SLOT(insertImageEntryBefore())); + insertBefore->addAction(QIcon::fromTheme(QLatin1String("go-next-view-page")), i18n("Page Break"), entry, SLOT(insertPageBreakEntryBefore())); + + insert->setTitle(i18n("Insert Entry After")); + insert->setIcon(QIcon::fromTheme(QLatin1String("edit-table-insert-row-below"))); + insertBefore->setTitle(i18n("Insert Entry Before")); + insertBefore->setIcon(QIcon::fromTheme(QLatin1String("edit-table-insert-row-above"))); + menu->addMenu(insert); + menu->addMenu(insertBefore); + } else { + menu->addAction(QIcon::fromTheme(QLatin1String("run-build")), i18n("Insert Command Entry"), this, SLOT(appendCommandEntry())); + menu->addAction(QIcon::fromTheme(QLatin1String("draw-text")), i18n("Insert Text Entry"), this, SLOT(appendTextEntry())); +#ifdef Discount_FOUND + menu->addAction(QIcon::fromTheme(QLatin1String("text-x-markdown")), i18n("Insert Markdown Entry"), this, SLOT(appendMarkdownEntry())); +#endif +#ifdef WITH_EPS + menu->addAction(QIcon::fromTheme(QLatin1String("text-x-tex")), i18n("Insert LaTeX Entry"), this, SLOT(appendLatexEntry())); +#endif + menu->addAction(QIcon::fromTheme(QLatin1String("image-x-generic")), i18n("Insert Image"), this, SLOT(appendImageEntry())); + menu->addAction(QIcon::fromTheme(QLatin1String("go-next-view-page")), i18n("Insert Page Break"), this, SLOT(appendPageBreakEntry())); + } +} + +void Worksheet::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) +{ + if (m_readOnly) + return; + + // forward the event to the items + QGraphicsScene::contextMenuEvent(event); + + if (!event->isAccepted()) { + event->accept(); + QMenu *menu = createContextMenu(); + populateMenu(menu, event->scenePos()); + + menu->popup(event->screenPos()); + } +} + +void Worksheet::mousePressEvent(QGraphicsSceneMouseEvent* event) +{ + QGraphicsScene::mousePressEvent(event); + /* + if (event->button() == Qt::LeftButton && !focusItem() && lastEntry() && + event->scenePos().y() > lastEntry()->y() + lastEntry()->size().height()) + lastEntry()->focusEntry(WorksheetTextItem::BottomRight); + */ + if (!m_readOnly) + updateEntryCursor(event); +} + +void Worksheet::keyPressEvent(QKeyEvent *keyEvent) +{ + if (m_readOnly) + return; + + // If we choose entry by entry cursor and press text button (not modifiers, for example, like Control) + if ((m_choosenCursorEntry || m_isCursorEntryAfterLastEntry) && !keyEvent->text().isEmpty()) + addEntryFromEntryCursor(); + + QGraphicsScene::keyPressEvent(keyEvent); +} + +void Worksheet::createActions(KActionCollection* collection) +{ + // Mostly copied from KRichTextWidget::createActions(KActionCollection*) + // It would be great if this wasn't necessary. + + // Text color + QAction * action; + /* This is "format-stroke-color" in KRichTextWidget */ + action = new QAction(QIcon::fromTheme(QLatin1String("format-text-color")), + i18nc("@action", "Text &Color..."), collection); + action->setIconText(i18nc("@label text color", "Color")); + action->setPriority(QAction::LowPriority); + m_richTextActionList.append(action); + collection->addAction(QLatin1String("format_text_foreground_color"), action); + connect(action, SIGNAL(triggered()), this, SLOT(setTextForegroundColor())); + + // Text color + action = new QAction(QIcon::fromTheme(QLatin1String("format-fill-color")), + i18nc("@action", "Text &Highlight..."), collection); + action->setPriority(QAction::LowPriority); + m_richTextActionList.append(action); + collection->addAction(QLatin1String("format_text_background_color"), action); + connect(action, SIGNAL(triggered()), this, SLOT(setTextBackgroundColor())); + + // Font Family + m_fontAction = new KFontAction(i18nc("@action", "&Font"), collection); + m_richTextActionList.append(m_fontAction); + collection->addAction(QLatin1String("format_font_family"), m_fontAction); + connect(m_fontAction, SIGNAL(triggered(QString)), this, + SLOT(setFontFamily(QString))); + + // Font Size + m_fontSizeAction = new KFontSizeAction(i18nc("@action", "Font &Size"), + collection); + m_richTextActionList.append(m_fontSizeAction); + collection->addAction(QLatin1String("format_font_size"), m_fontSizeAction); + connect(m_fontSizeAction, SIGNAL(fontSizeChanged(int)), this, + SLOT(setFontSize(int))); + + // Bold + m_boldAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-text-bold")), + i18nc("@action boldify selected text", "&Bold"), + collection); + m_boldAction->setPriority(QAction::LowPriority); + QFont bold; + bold.setBold(true); + m_boldAction->setFont(bold); + m_richTextActionList.append(m_boldAction); + collection->addAction(QLatin1String("format_text_bold"), m_boldAction); + collection->setDefaultShortcut(m_boldAction, Qt::CTRL + Qt::Key_B); + connect(m_boldAction, SIGNAL(triggered(bool)), this, SLOT(setTextBold(bool))); + + // Italic + m_italicAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-text-italic")), + i18nc("@action italicize selected text", + "&Italic"), + collection); + m_italicAction->setPriority(QAction::LowPriority); + QFont italic; + italic.setItalic(true); + m_italicAction->setFont(italic); + m_richTextActionList.append(m_italicAction); + collection->addAction(QLatin1String("format_text_italic"), m_italicAction); + collection->setDefaultShortcut(m_italicAction, Qt::CTRL + Qt::Key_I); + connect(m_italicAction, SIGNAL(triggered(bool)), this, SLOT(setTextItalic(bool))); + + // Underline + m_underlineAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-text-underline")), + i18nc("@action underline selected text", + "&Underline"), + collection); + m_underlineAction->setPriority(QAction::LowPriority); + QFont underline; + underline.setUnderline(true); + m_underlineAction->setFont(underline); + m_richTextActionList.append(m_underlineAction); + collection->addAction(QLatin1String("format_text_underline"), m_underlineAction); + collection->setDefaultShortcut(m_underlineAction, Qt::CTRL + Qt::Key_U); + connect(m_underlineAction, SIGNAL(triggered(bool)), this, SLOT(setTextUnderline(bool))); + + // Strike + m_strikeOutAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-text-strikethrough")), + i18nc("@action", "&Strike Out"), + collection); + m_strikeOutAction->setPriority(QAction::LowPriority); + m_richTextActionList.append(m_strikeOutAction); + collection->addAction(QLatin1String("format_text_strikeout"), m_strikeOutAction); + collection->setDefaultShortcut(m_strikeOutAction, Qt::CTRL + Qt::Key_L); + connect(m_strikeOutAction, SIGNAL(triggered(bool)), this, SLOT(setTextStrikeOut(bool))); + + // Alignment + QActionGroup *alignmentGroup = new QActionGroup(this); + + // Align left + m_alignLeftAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-justify-left")), + i18nc("@action", "Align &Left"), + collection); + m_alignLeftAction->setPriority(QAction::LowPriority); + m_alignLeftAction->setIconText(i18nc("@label left justify", "Left")); + m_richTextActionList.append(m_alignLeftAction); + collection->addAction(QLatin1String("format_align_left"), m_alignLeftAction); + connect(m_alignLeftAction, SIGNAL(triggered()), this, + SLOT(setAlignLeft())); + alignmentGroup->addAction(m_alignLeftAction); + + // Align center + m_alignCenterAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-justify-center")), + i18nc("@action", "Align &Center"), + collection); + m_alignCenterAction->setPriority(QAction::LowPriority); + m_alignCenterAction->setIconText(i18nc("@label center justify", "Center")); + m_richTextActionList.append(m_alignCenterAction); + collection->addAction(QLatin1String("format_align_center"), m_alignCenterAction); + connect(m_alignCenterAction, SIGNAL(triggered()), this, + SLOT(setAlignCenter())); + alignmentGroup->addAction(m_alignCenterAction); + + // Align right + m_alignRightAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-justify-right")), + i18nc("@action", "Align &Right"), + collection); + m_alignRightAction->setPriority(QAction::LowPriority); + m_alignRightAction->setIconText(i18nc("@label right justify", "Right")); + m_richTextActionList.append(m_alignRightAction); + collection->addAction(QLatin1String("format_align_right"), m_alignRightAction); + connect(m_alignRightAction, SIGNAL(triggered()), this, + SLOT(setAlignRight())); + alignmentGroup->addAction(m_alignRightAction); + + // Align justify + m_alignJustifyAction = new KToggleAction(QIcon::fromTheme(QLatin1String("format-justify-fill")), + i18nc("@action", "&Justify"), + collection); + m_alignJustifyAction->setPriority(QAction::LowPriority); + m_alignJustifyAction->setIconText(i18nc("@label justify fill", "Justify")); + m_richTextActionList.append(m_alignJustifyAction); + collection->addAction(QLatin1String("format_align_justify"), m_alignJustifyAction); + connect(m_alignJustifyAction, SIGNAL(triggered()), this, + SLOT(setAlignJustify())); + alignmentGroup->addAction(m_alignJustifyAction); + + /* + // List style + KSelectAction* selAction; + selAction = new KSelectAction(QIcon::fromTheme("format-list-unordered"), + i18nc("@title:menu", "List Style"), + collection); + QStringList listStyles; + listStyles << i18nc("@item:inmenu no list style", "None") + << i18nc("@item:inmenu disc list style", "Disc") + << i18nc("@item:inmenu circle list style", "Circle") + << i18nc("@item:inmenu square list style", "Square") + << i18nc("@item:inmenu numbered lists", "123") + << i18nc("@item:inmenu lowercase abc lists", "abc") + << i18nc("@item:inmenu uppercase abc lists", "ABC"); + selAction->setItems(listStyles); + selAction->setCurrentItem(0); + action = selAction; + m_richTextActionList.append(action); + collection->addAction("format_list_style", action); + connect(action, SIGNAL(triggered(int)), + this, SLOT(_k_setListStyle(int))); + connect(action, SIGNAL(triggered()), + this, SLOT(_k_updateMiscActions())); + + // Indent + action = new QAction(QIcon::fromTheme("format-indent-more"), + i18nc("@action", "Increase Indent"), collection); + action->setPriority(QAction::LowPriority); + m_richTextActionList.append(action); + collection->addAction("format_list_indent_more", action); + connect(action, SIGNAL(triggered()), + this, SLOT(indentListMore())); + connect(action, SIGNAL(triggered()), + this, SLOT(_k_updateMiscActions())); + + // Dedent + action = new QAction(QIcon::fromTheme("format-indent-less"), + i18nc("@action", "Decrease Indent"), collection); + action->setPriority(QAction::LowPriority); + m_richTextActionList.append(action); + collection->addAction("format_list_indent_less", action); + connect(action, SIGNAL(triggered()), this, SLOT(indentListLess())); + connect(action, SIGNAL(triggered()), this, SLOT(_k_updateMiscActions())); + */ +} + +WorksheetTextItem* Worksheet::lastFocusedTextItem() +{ + return m_lastFocusedTextItem; +} + +void Worksheet::updateFocusedTextItem(WorksheetTextItem* newItem) +{ + // No need update and emit signals about editing actions in readonly + // So support only copy action and reset selection + if (m_readOnly) + { + if (m_lastFocusedTextItem && m_lastFocusedTextItem != newItem) + { + disconnect(this, SIGNAL(copy()), m_lastFocusedTextItem, SLOT(copy())); + m_lastFocusedTextItem->clearSelection(); + } + + if (newItem && m_lastFocusedTextItem != newItem) + { + connect(this, SIGNAL(copy()), newItem, SLOT(copy())); + emit copyAvailable(newItem->isCopyAvailable()); + } + else if (!newItem) + { + emit copyAvailable(false); + } + + m_lastFocusedTextItem = newItem; + return; + } + + if (m_lastFocusedTextItem && m_lastFocusedTextItem != newItem) { + disconnect(m_lastFocusedTextItem, SIGNAL(undoAvailable(bool)), + this, SIGNAL(undoAvailable(bool))); + disconnect(m_lastFocusedTextItem, SIGNAL(redoAvailable(bool)), + this, SIGNAL(redoAvailable(bool))); + disconnect(this, SIGNAL(undo()), m_lastFocusedTextItem, SLOT(undo())); + disconnect(this, SIGNAL(redo()), m_lastFocusedTextItem, SLOT(redo())); + disconnect(m_lastFocusedTextItem, SIGNAL(cutAvailable(bool)), + this, SIGNAL(cutAvailable(bool))); + disconnect(m_lastFocusedTextItem, SIGNAL(copyAvailable(bool)), + this, SIGNAL(copyAvailable(bool))); + disconnect(m_lastFocusedTextItem, SIGNAL(pasteAvailable(bool)), + this, SIGNAL(pasteAvailable(bool))); + disconnect(this, SIGNAL(cut()), m_lastFocusedTextItem, SLOT(cut())); + disconnect(this, SIGNAL(copy()), m_lastFocusedTextItem, SLOT(copy())); + + m_lastFocusedTextItem->clearSelection(); + } + + if (newItem && m_lastFocusedTextItem != newItem) { + setAcceptRichText(newItem->richTextEnabled()); + emit undoAvailable(newItem->isUndoAvailable()); + emit redoAvailable(newItem->isRedoAvailable()); + connect(newItem, SIGNAL(undoAvailable(bool)), + this, SIGNAL(undoAvailable(bool))); + connect(newItem, SIGNAL(redoAvailable(bool)), + this, SIGNAL(redoAvailable(bool))); + connect(this, SIGNAL(undo()), newItem, SLOT(undo())); + connect(this, SIGNAL(redo()), newItem, SLOT(redo())); + emit cutAvailable(newItem->isCutAvailable()); + emit copyAvailable(newItem->isCopyAvailable()); + emit pasteAvailable(newItem->isPasteAvailable()); + connect(newItem, SIGNAL(cutAvailable(bool)), + this, SIGNAL(cutAvailable(bool))); + connect(newItem, SIGNAL(copyAvailable(bool)), + this, SIGNAL(copyAvailable(bool))); + connect(newItem, SIGNAL(pasteAvailable(bool)), + this, SIGNAL(pasteAvailable(bool))); + connect(this, SIGNAL(cut()), newItem, SLOT(cut())); + connect(this, SIGNAL(copy()), newItem, SLOT(copy())); + } else if (!newItem) { + emit undoAvailable(false); + emit redoAvailable(false); + emit cutAvailable(false); + emit copyAvailable(false); + emit pasteAvailable(false); + } + m_lastFocusedTextItem = newItem; +} + +/*! + * handles the paste action triggered in cantor_part. + * Pastes into the last focused text item. + * In case the "new entry"-cursor is currently shown, + * a new entry is created first which the content will be pasted into. + */ +void Worksheet::paste() { + if (m_choosenCursorEntry || m_isCursorEntryAfterLastEntry) + addEntryFromEntryCursor(); + + m_lastFocusedTextItem->paste(); +} + +void Worksheet::setRichTextInformation(const RichTextInfo& info) +{ + m_boldAction->setChecked(info.bold); + m_italicAction->setChecked(info.italic); + m_underlineAction->setChecked(info.underline); + m_strikeOutAction->setChecked(info.strikeOut); + m_fontAction->setFont(info.font); + if (info.fontSize > 0) + m_fontSizeAction->setFontSize(info.fontSize); + + if (info.align & Qt::AlignLeft) + m_alignLeftAction->setChecked(true); + else if (info.align & Qt::AlignCenter) + m_alignCenterAction->setChecked(true); + else if (info.align & Qt::AlignRight) + m_alignRightAction->setChecked(true); + else if (info.align & Qt::AlignJustify) + m_alignJustifyAction->setChecked(true); +} + +void Worksheet::setAcceptRichText(bool b) +{ + if (!m_readOnly) + for(QAction * action : m_richTextActionList) + action->setEnabled(b); +} + +WorksheetTextItem* Worksheet::currentTextItem() +{ + QGraphicsItem* item = focusItem(); + if (!item) + item = m_lastFocusedTextItem; + while (item && item->type() != WorksheetTextItem::Type) + item = item->parentItem(); + + return qgraphicsitem_cast(item); +} + +void Worksheet::setTextForegroundColor() +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setTextForegroundColor(); +} + +void Worksheet::setTextBackgroundColor() +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setTextBackgroundColor(); +} + +void Worksheet::setTextBold(bool b) +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setTextBold(b); +} + +void Worksheet::setTextItalic(bool b) +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setTextItalic(b); +} + +void Worksheet::setTextUnderline(bool b) +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setTextUnderline(b); +} + +void Worksheet::setTextStrikeOut(bool b) +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setTextStrikeOut(b); +} + +void Worksheet::setAlignLeft() +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setAlignment(Qt::AlignLeft); +} + +void Worksheet::setAlignRight() +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setAlignment(Qt::AlignRight); +} + +void Worksheet::setAlignCenter() +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setAlignment(Qt::AlignCenter); +} + +void Worksheet::setAlignJustify() +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setAlignment(Qt::AlignJustify); +} + +void Worksheet::setFontFamily(const QString& font) +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setFontFamily(font); +} + +void Worksheet::setFontSize(int size) +{ + WorksheetTextItem* item = currentTextItem(); + if (item) + item->setFontSize(size); +} + +bool Worksheet::isShortcut(const QKeySequence& sequence) +{ + return m_shortcuts.contains(sequence); +} + +void Worksheet::registerShortcut(QAction* action) +{ + for (auto& shortcut : action->shortcuts()) + m_shortcuts.insert(shortcut, action); + + connect(action, SIGNAL(changed()), this, SLOT(updateShortcut())); +} + +void Worksheet::updateShortcut() +{ + QAction* action = qobject_cast(sender()); + if (!action) + return; + + // delete the old shortcuts of this action + QList shortcuts = m_shortcuts.keys(action); + for (auto& shortcut : shortcuts) + m_shortcuts.remove(shortcut); + + // add the new shortcuts + for (auto& shortcut : action->shortcuts()) + m_shortcuts.insert(shortcut, action); +} + +void Worksheet::dragEnterEvent(QGraphicsSceneDragDropEvent* event) +{ + qDebug() << "enter"; + if (m_dragEntry) + event->accept(); + else + QGraphicsScene::dragEnterEvent(event); +} + +void Worksheet::dragLeaveEvent(QGraphicsSceneDragDropEvent* event) +{ + if (!m_dragEntry) { + QGraphicsScene::dragLeaveEvent(event); + return; + } + + qDebug() << "leave"; + event->accept(); + if (m_placeholderEntry) { + m_placeholderEntry->startRemoving(); + m_placeholderEntry = nullptr; + } +} + +void Worksheet::dragMoveEvent(QGraphicsSceneDragDropEvent* event) +{ + if (!m_dragEntry) { + QGraphicsScene::dragMoveEvent(event); + return; + } + + QPointF pos = event->scenePos(); + WorksheetEntry* entry = entryAt(pos); + WorksheetEntry* prev = nullptr; + WorksheetEntry* next = nullptr; + if (entry) { + if (pos.y() < entry->y() + entry->size().height()/2) { + prev = entry->previous(); + next = entry; + } else if (pos.y() >= entry->y() + entry->size().height()/2) { + prev = entry; + next = entry->next(); + } + } else { + WorksheetEntry* last = lastEntry(); + if (last && pos.y() > last->y() + last->size().height()) { + prev = last; + next = nullptr; + } + } + + if (prev || next) { + PlaceHolderEntry* oldPlaceHolder = m_placeholderEntry; + if (prev && prev->type() == PlaceHolderEntry::Type && + (!prev->aboutToBeRemoved() || prev->stopRemoving())) { + m_placeholderEntry = qgraphicsitem_cast(prev); + m_placeholderEntry->changeSize(m_dragEntry->size()); + } else if (next && next->type() == PlaceHolderEntry::Type && + (!next->aboutToBeRemoved() || next->stopRemoving())) { + m_placeholderEntry = qgraphicsitem_cast(next); + m_placeholderEntry->changeSize(m_dragEntry->size()); + } else { + m_placeholderEntry = new PlaceHolderEntry(this, QSizeF(0,0)); + m_placeholderEntry->setPrevious(prev); + m_placeholderEntry->setNext(next); + if (prev) + prev->setNext(m_placeholderEntry); + else + setFirstEntry(m_placeholderEntry); + if (next) + next->setPrevious(m_placeholderEntry); + else + setLastEntry(m_placeholderEntry); + m_placeholderEntry->changeSize(m_dragEntry->size()); + } + if (oldPlaceHolder && oldPlaceHolder != m_placeholderEntry) + oldPlaceHolder->startRemoving(); + updateLayout(); + } + + const QPoint viewPos = worksheetView()->mapFromScene(pos); + const int viewHeight = worksheetView()->viewport()->height(); + if ((viewPos.y() < 10 || viewPos.y() > viewHeight - 10) && + !m_dragScrollTimer) { + m_dragScrollTimer = new QTimer(this); + m_dragScrollTimer->setSingleShot(true); + m_dragScrollTimer->setInterval(100); + connect(m_dragScrollTimer, SIGNAL(timeout()), this, + SLOT(updateDragScrollTimer())); + m_dragScrollTimer->start(); + } + + event->accept(); +} + +void Worksheet::dropEvent(QGraphicsSceneDragDropEvent* event) +{ + if (!m_dragEntry) + QGraphicsScene::dropEvent(event); + event->accept(); +} + +void Worksheet::updateDragScrollTimer() +{ + if (!m_dragScrollTimer) + return; + + const QPoint viewPos = worksheetView()->viewCursorPos(); + const QWidget* viewport = worksheetView()->viewport(); + const int viewHeight = viewport->height(); + if (!m_dragEntry || !(viewport->rect().contains(viewPos)) || + (viewPos.y() >= 10 && viewPos.y() <= viewHeight - 10)) { + delete m_dragScrollTimer; + m_dragScrollTimer = nullptr; + return; + } + + if (viewPos.y() < 10) + worksheetView()->scrollBy(-10*(10 - viewPos.y())); + else + worksheetView()->scrollBy(10*(viewHeight - viewPos.y())); + + m_dragScrollTimer->start(); +} + +void Worksheet::updateEntryCursor(QGraphicsSceneMouseEvent* event) +{ + // determine the worksheet entry near which the entry cursor will be shown + resetEntryCursor(); + if (event->button() == Qt::LeftButton && !focusItem()) + { + const qreal y = event->scenePos().y(); + for (WorksheetEntry* entry = firstEntry(); entry; entry = entry->next()) + { + if (entry == firstEntry() && y < entry->y() ) + { + m_choosenCursorEntry = firstEntry(); + break; + } + else if (entry->y() < y && (entry->next() && y < entry->next()->y())) + { + m_choosenCursorEntry = entry->next(); + break; + } + else if (entry->y() < y && entry == lastEntry()) + { + m_isCursorEntryAfterLastEntry = true; + break; + } + } + } + + if (m_choosenCursorEntry || m_isCursorEntryAfterLastEntry) + drawEntryCursor(); +} + +void Worksheet::addEntryFromEntryCursor() +{ + qDebug() << "Add new entry from entry cursor"; + if (m_isCursorEntryAfterLastEntry) + insertCommandEntry(lastEntry()); + else + insertCommandEntryBefore(m_choosenCursorEntry); + resetEntryCursor(); +} + +void Worksheet::animateEntryCursor() +{ + if ((m_choosenCursorEntry || m_isCursorEntryAfterLastEntry) && m_entryCursorItem) + m_entryCursorItem->setVisible(!m_entryCursorItem->isVisible()); +} + +void Worksheet::resetEntryCursor() +{ + m_choosenCursorEntry = nullptr; + m_isCursorEntryAfterLastEntry = false; + m_entryCursorItem->hide(); +} + +void Worksheet::drawEntryCursor() +{ + if (m_entryCursorItem && (m_choosenCursorEntry || (m_isCursorEntryAfterLastEntry && lastEntry()))) + { + qreal x; + qreal y; + if (m_isCursorEntryAfterLastEntry) + { + x = lastEntry()->x(); + y = lastEntry()->y() + lastEntry()->size().height() - (EntryCursorWidth - 1); + } + else + { + x = m_choosenCursorEntry->x(); + y = m_choosenCursorEntry->y(); + } + m_entryCursorItem->setLine(x,y,x+EntryCursorLength,y); + m_entryCursorItem->show(); + } +} diff --git a/src/worksheet.h b/src/worksheet.h new file mode 100644 index 0000000..b2d86bb --- /dev/null +++ b/src/worksheet.h @@ -0,0 +1,302 @@ +/* + 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. + + --- + Copyright (C) 2009 Alexander Rieder + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef WORKSHEET_H +#define WORKSHEET_H + +#include +#include +#include +#include +#include + +#include +#include + +#include "worksheetview.h" +#include "epsrenderer.h" +#include "worksheetcursor.h" + +namespace Cantor { + class Backend; + class Session; + class Expression; +} + +class WorksheetEntry; +class PlaceHolderEntry; +class WorksheetTextItem; + +class QAction; +class QDrag; +class QPrinter; +class KActionCollection; +class KToggleAction; +class KFontAction; +class KFontSizeAction; + +class Worksheet : public QGraphicsScene +{ + Q_OBJECT + public: + Worksheet(Cantor::Backend* backend, QWidget* parent); + ~Worksheet() override; + + Cantor::Session* session(); + + void loginToSession(); + + bool isRunning(); + bool isReadOnly(); + bool showExpressionIds(); + bool animationsEnabled(); + + bool isPrinting(); + + void setViewSize(qreal w, qreal h, qreal s, bool forceUpdate = false); + + WorksheetView* worksheetView(); + + void makeVisible(WorksheetEntry*); + void makeVisible(const WorksheetCursor&); + + void setModified(); + + void startDrag(WorksheetEntry* entry, QDrag* drag); + + void createActions(KActionCollection*); + QMenu* createContextMenu(); + void populateMenu(QMenu* menu, QPointF pos); + EpsRenderer* epsRenderer(); + bool isEmpty(); + bool isLoadingFromFile(); + + WorksheetEntry* currentEntry(); + WorksheetEntry* firstEntry(); + WorksheetEntry* lastEntry(); + WorksheetTextItem* currentTextItem(); + WorksheetTextItem* lastFocusedTextItem(); + + WorksheetCursor worksheetCursor(); + void setWorksheetCursor(const WorksheetCursor&); + + void addProtrusion(qreal width); + void updateProtrusion(qreal oldWidth, qreal newWidth); + void removeProtrusion(qreal width); + + bool isShortcut(const QKeySequence&); + + // richtext + struct RichTextInfo { + bool bold; + bool italic; + bool underline; + bool strikeOut; + QString font; + qreal fontSize; + Qt::Alignment align; + }; + + public Q_SLOTS: + WorksheetEntry* appendCommandEntry(); + void appendCommandEntry(const QString& text); + WorksheetEntry* appendTextEntry(); + WorksheetEntry* appendMarkdownEntry(); + WorksheetEntry* appendImageEntry(); + WorksheetEntry* appendPageBreakEntry(); + WorksheetEntry* appendLatexEntry(); + WorksheetEntry* insertCommandEntry(WorksheetEntry* current = nullptr); + void insertCommandEntry(const QString& text); + WorksheetEntry* insertTextEntry(WorksheetEntry* current = nullptr); + WorksheetEntry* insertMarkdownEntry(WorksheetEntry* current = nullptr); + WorksheetEntry* insertImageEntry(WorksheetEntry* current = nullptr); + WorksheetEntry* insertPageBreakEntry(WorksheetEntry* current = nullptr); + WorksheetEntry* insertLatexEntry(WorksheetEntry* current = nullptr); + WorksheetEntry* insertCommandEntryBefore(WorksheetEntry* current = nullptr); + WorksheetEntry* insertTextEntryBefore(WorksheetEntry* current = nullptr); + WorksheetEntry* insertMarkdownEntryBefore(WorksheetEntry* current = nullptr); + WorksheetEntry* insertImageEntryBefore(WorksheetEntry* current = nullptr); + WorksheetEntry* insertPageBreakEntryBefore(WorksheetEntry* current = nullptr); + WorksheetEntry* insertLatexEntryBefore(WorksheetEntry* current = nullptr); + + void updateLayout(); + void updateEntrySize(WorksheetEntry*); + + void print(QPrinter*); + void paste(); + void focusEntry(WorksheetEntry*); + + void evaluate(); + void evaluateCurrentEntry(); + void interrupt(); + void interruptCurrentEntryEvaluation(); + + bool completionEnabled(); + //void showCompletion(); + + void highlightItem(WorksheetTextItem*); + void rehighlight(); + + void enableHighlighting(bool); + void enableCompletion(bool); + void enableExpressionNumbering(bool); + void enableAnimations(bool); + + QDomDocument toXML(KZip* archive = nullptr); + + void save(const QString& filename); + void save(QIODevice*); + QByteArray saveToByteArray(); + void savePlain(const QString& filename); + void saveLatex(const QString& filename); + bool load(QIODevice*); + void load(QByteArray* data); + bool load(const QString& filename); + + void gotResult(Cantor::Expression* expr = nullptr); + + void removeCurrentEntry(); + + void setFirstEntry(WorksheetEntry*); + void setLastEntry(WorksheetEntry*); + void invalidateFirstEntry(); + void invalidateLastEntry(); + + void updateFocusedTextItem(WorksheetTextItem*); + + void updateDragScrollTimer(); + + void registerShortcut(QAction*); + void updateShortcut(); + + // richtext + void setRichTextInformation(const Worksheet::RichTextInfo&); + void setAcceptRichText(bool b); + + void setTextForegroundColor(); + void setTextBackgroundColor(); + void setTextBold(bool b); + void setTextItalic(bool b); + void setTextUnderline(bool b); + void setTextStrikeOut(bool b); + void setAlignLeft(); + void setAlignRight(); + void setAlignCenter(); + void setAlignJustify(); + void setFontFamily(const QString&); + void setFontSize(int size); + + Q_SIGNALS: + void modified(); + void loaded(); + void showHelp(const QString&); + void updatePrompt(); + void undoAvailable(bool); + void redoAvailable(bool); + void undo(); + void redo(); + void cutAvailable(bool); + void copyAvailable(bool); + void pasteAvailable(bool); + void cut(); + void copy(); + + protected: + void contextMenuEvent(QGraphicsSceneContextMenuEvent*) override; + void mousePressEvent(QGraphicsSceneMouseEvent*) override; + + void dragEnterEvent(QGraphicsSceneDragDropEvent*) override; + void dragLeaveEvent(QGraphicsSceneDragDropEvent*) override; + void dragMoveEvent(QGraphicsSceneDragDropEvent*) override; + void dropEvent(QGraphicsSceneDragDropEvent*) override; + + void keyPressEvent(QKeyEvent*) override; + + private Q_SLOTS: + void showCompletion(); + //void checkEntriesForSanity(); + + WorksheetEntry* appendEntry(int type); + WorksheetEntry* insertEntry(int type, WorksheetEntry* current = nullptr); + WorksheetEntry* insertEntryBefore(int type, WorksheetEntry* current = nullptr); + + void animateEntryCursor(); + + private: + WorksheetEntry* entryAt(qreal x, qreal y); + WorksheetEntry* entryAt(QPointF p); + WorksheetEntry* entryAt(int row); + void updateEntryCursor(QGraphicsSceneMouseEvent*); + void resetEntryCursor(); + void addEntryFromEntryCursor(); + void drawEntryCursor(); + int entryCount(); + + private: + static const double LeftMargin; + static const double RightMargin; + static const double TopMargin; + static const double EntryCursorLength; + static const double EntryCursorWidth; + Cantor::Session *m_session; + QSyntaxHighlighter* m_highlighter; + EpsRenderer m_epsRenderer; + WorksheetEntry* m_firstEntry; + WorksheetEntry* m_lastEntry; + WorksheetEntry* m_dragEntry; + WorksheetEntry* m_choosenCursorEntry; + bool m_isCursorEntryAfterLastEntry; + QTimer* m_cursorItemTimer; + QGraphicsLineItem* m_entryCursorItem; + PlaceHolderEntry* m_placeholderEntry; + WorksheetTextItem* m_lastFocusedTextItem; + QTimer* m_dragScrollTimer; + + double m_viewWidth; + double m_protrusion; + QMap m_itemProtrusions; + + QMap m_shortcuts; + + QList m_richTextActionList; + KToggleAction* m_boldAction; + KToggleAction* m_italicAction; + KToggleAction* m_underlineAction; + KToggleAction* m_strikeOutAction; + KFontAction* m_fontAction; + KFontSizeAction* m_fontSizeAction; + KToggleAction* m_alignLeftAction; + KToggleAction* m_alignCenterAction; + KToggleAction* m_alignRightAction; + KToggleAction* m_alignJustifyAction; + + bool m_completionEnabled; + bool m_showExpressionIds; + bool m_animationsEnabled; + bool m_loginDone; + bool m_isPrinting; + bool m_isLoadingFromFile; + bool m_readOnly; + + QString m_backendName; +}; + +#endif // WORKSHEET_H diff --git a/src/worksheetcursor.cpp b/src/worksheetcursor.cpp new file mode 100644 index 0000000..09e7f54 --- /dev/null +++ b/src/worksheetcursor.cpp @@ -0,0 +1,57 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheetcursor.h" + +WorksheetCursor::WorksheetCursor() +{ + m_entry = nullptr; + m_textItem = nullptr; + m_textCursor = QTextCursor(); +} + +WorksheetCursor::WorksheetCursor(WorksheetEntry* entry, WorksheetTextItem* item, + const QTextCursor& cursor) +{ + m_entry = entry; + m_textItem = item; + m_textCursor = cursor; +} + +WorksheetEntry* WorksheetCursor::entry() const +{ + return m_entry; +} + +WorksheetTextItem* WorksheetCursor::textItem() const +{ + return m_textItem; +} + +QTextCursor WorksheetCursor::textCursor() const +{ + return m_textCursor; +} + +bool WorksheetCursor::isValid() const +{ + return m_entry && m_textItem; +} + diff --git a/src/worksheetcursor.h b/src/worksheetcursor.h new file mode 100644 index 0000000..aaadc1f --- /dev/null +++ b/src/worksheetcursor.h @@ -0,0 +1,48 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef WORKSHEETCURSOR_H +#define WORKSHEETCURSOR_H + +#include + +class WorksheetEntry; +class WorksheetTextItem; + +class WorksheetCursor +{ + public: + WorksheetCursor(); + WorksheetCursor(WorksheetEntry*, WorksheetTextItem*, const QTextCursor&); + ~WorksheetCursor() = default; + + WorksheetEntry* entry() const; + WorksheetTextItem* textItem() const; + QTextCursor textCursor() const; + + bool isValid() const; + + private: + WorksheetEntry* m_entry; + WorksheetTextItem* m_textItem; + QTextCursor m_textCursor; +}; + +#endif // WORKSHEETCURSOR_H diff --git a/src/worksheetentry.cpp b/src/worksheetentry.cpp new file mode 100644 index 0000000..e6f71e0 --- /dev/null +++ b/src/worksheetentry.cpp @@ -0,0 +1,803 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheetentry.h" +#include "commandentry.h" +#include "textentry.h" +#include "markdownentry.h" +#include "latexentry.h" +#include "imageentry.h" +#include "pagebreakentry.h" +#include "settings.h" +#include "actionbar.h" +#include "worksheettoolbutton.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +struct AnimationData +{ + QAnimationGroup* animation; + QPropertyAnimation* sizeAnimation; + QPropertyAnimation* opacAnimation; + QPropertyAnimation* posAnimation; + const char* slot; + QGraphicsObject* item; +}; + +const qreal WorksheetEntry::VerticalMargin = 4; + +WorksheetEntry::WorksheetEntry(Worksheet* worksheet) : QGraphicsObject() +{ + m_next = nullptr; + m_prev = nullptr; + m_animation = nullptr; + m_actionBar = nullptr; + m_actionBarAnimation = nullptr; + m_aboutToBeRemoved = false; + setAcceptHoverEvents(true); + worksheet->addItem(this); +} + +WorksheetEntry::~WorksheetEntry() +{ + emit aboutToBeDeleted(); + if (next()) + next()->setPrevious(previous()); + if (previous()) + previous()->setNext(next()); + if (m_animation) { + m_animation->animation->deleteLater(); + delete m_animation; + } +} + +int WorksheetEntry::type() const +{ + return Type; +} + +WorksheetEntry* WorksheetEntry::create(int t, Worksheet* worksheet) +{ + switch(t) + { + case TextEntry::Type: + return new TextEntry(worksheet); + case MarkdownEntry::Type: + return new MarkdownEntry(worksheet); + case CommandEntry::Type: + return new CommandEntry(worksheet); + case ImageEntry::Type: + return new ImageEntry(worksheet); + case PageBreakEntry::Type: + return new PageBreakEntry(worksheet); + case LatexEntry::Type: + return new LatexEntry(worksheet); + default: + return nullptr; + } +} + +void WorksheetEntry::insertCommandEntry() +{ + worksheet()->insertCommandEntry(this); +} + +void WorksheetEntry::insertTextEntry() +{ + worksheet()->insertTextEntry(this); +} + +void WorksheetEntry::insertMarkdownEntry() +{ + worksheet()->insertMarkdownEntry(this); +} + +void WorksheetEntry::insertLatexEntry() +{ + worksheet()->insertLatexEntry(this); +} + +void WorksheetEntry::insertImageEntry() +{ + worksheet()->insertImageEntry(this); +} + +void WorksheetEntry::insertPageBreakEntry() +{ + worksheet()->insertPageBreakEntry(this); +} + +void WorksheetEntry::insertCommandEntryBefore() +{ + worksheet()->insertCommandEntryBefore(this); +} + +void WorksheetEntry::insertTextEntryBefore() +{ + worksheet()->insertTextEntryBefore(this); +} + +void WorksheetEntry::insertMarkdownEntryBefore() +{ + worksheet()->insertMarkdownEntryBefore(this); +} + +void WorksheetEntry::insertLatexEntryBefore() +{ + worksheet()->insertLatexEntryBefore(this); +} + +void WorksheetEntry::insertImageEntryBefore() +{ + worksheet()->insertImageEntryBefore(this); +} + +void WorksheetEntry::insertPageBreakEntryBefore() +{ + worksheet()->insertPageBreakEntryBefore(this); +} + + +void WorksheetEntry::showCompletion() +{ +} + +WorksheetEntry* WorksheetEntry::next() const +{ + return m_next; +} + +WorksheetEntry* WorksheetEntry::previous() const +{ + return m_prev; +} + +void WorksheetEntry::setNext(WorksheetEntry* n) +{ + m_next = n; +} + +void WorksheetEntry::setPrevious(WorksheetEntry* p) +{ + m_prev = p; +} + +void WorksheetEntry::startDrag(QPointF grabPos) +{ + QDrag* drag = new QDrag(worksheetView()); + qDebug() << size(); + const qreal scale = worksheet()->epsRenderer()->scale(); + QPixmap pixmap((size()*scale).toSize()); + pixmap.fill(QColor(255, 255, 255, 0)); + QPainter painter(&pixmap); + const QRectF sceneRect = mapRectToScene(boundingRect()); + worksheet()->render(&painter, pixmap.rect(), sceneRect); + painter.end(); + QBitmap mask = pixmap.createMaskFromColor(QColor(255, 255, 255), + Qt::MaskInColor); + pixmap.setMask(mask); + + drag->setPixmap(pixmap); + if (grabPos.isNull()) { + const QPointF scenePos = worksheetView()->sceneCursorPos(); + drag->setHotSpot((mapFromScene(scenePos) * scale).toPoint()); + } else { + drag->setHotSpot((grabPos * scale).toPoint()); + } + drag->setMimeData(new QMimeData()); + + worksheet()->startDrag(this, drag); +} + + +QRectF WorksheetEntry::boundingRect() const +{ + return QRectF(QPointF(0,0), m_size); +} + +void WorksheetEntry::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +{ + Q_UNUSED(painter); + Q_UNUSED(option); + Q_UNUSED(widget); +} + +bool WorksheetEntry::focusEntry(int pos, qreal xCoord) +{ + Q_UNUSED(pos); + Q_UNUSED(xCoord); + + if (flags() & QGraphicsItem::ItemIsFocusable) { + setFocus(); + return true; + } + return false; +} + +void WorksheetEntry::moveToPreviousEntry(int pos, qreal x) +{ + WorksheetEntry* entry = previous(); + while (entry && !(entry->wantFocus() && entry->focusEntry(pos, x))) + entry = entry->previous(); +} + +void WorksheetEntry::moveToNextEntry(int pos, qreal x) +{ + WorksheetEntry* entry = next(); + while (entry && !(entry->wantFocus() && entry->focusEntry(pos, x))) + entry = entry->next(); +} + +Worksheet* WorksheetEntry::worksheet() +{ + return qobject_cast(scene()); +} + +WorksheetView* WorksheetEntry::worksheetView() +{ + return worksheet()->worksheetView(); +} + +WorksheetCursor WorksheetEntry::search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos) +{ + Q_UNUSED(pattern); + Q_UNUSED(flags); + Q_UNUSED(qt_flags); + Q_UNUSED(pos); + + return WorksheetCursor(); +} + +void WorksheetEntry::keyPressEvent(QKeyEvent* event) +{ + // This event is used in Entries that set the ItemIsFocusable flag + switch(event->key()) { + case Qt::Key_Left: + case Qt::Key_Up: + if (event->modifiers() == Qt::NoModifier) + moveToPreviousEntry(WorksheetTextItem::BottomRight, 0); + break; + case Qt::Key_Right: + case Qt::Key_Down: + if (event->modifiers() == Qt::NoModifier) + moveToNextEntry(WorksheetTextItem::TopLeft, 0); + break; + /*case Qt::Key_Enter: + case Qt::Key_Return: + if (event->modifiers() == Qt::ShiftModifier) + evaluate(); + else if (event->modifiers() == Qt::ControlModifier) + worksheet()->insertCommandEntry(); + break; + case Qt::Key_Delete: + if (event->modifiers() == Qt::ShiftModifier) + startRemoving(); + break;*/ + default: + event->ignore(); + } +} + +void WorksheetEntry::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) +{ + QMenu *menu = worksheet()->createContextMenu(); + populateMenu(menu, event->pos()); + + menu->popup(event->screenPos()); +} + +void WorksheetEntry::populateMenu(QMenu* menu, QPointF pos) +{ + if (!worksheet()->isRunning() && wantToEvaluate()) + menu->addAction(QIcon::fromTheme(QLatin1String("media-playback-start")), i18n("Evaluate Entry"), this, SLOT(evaluate()), 0); + + menu->addAction(QIcon::fromTheme(QLatin1String("edit-delete")), i18n("Remove Entry"), this, SLOT(startRemoving()), 0); + menu->addSeparator(); + worksheet()->populateMenu(menu, mapToScene(pos)); +} + +bool WorksheetEntry::evaluateCurrentItem() +{ + // A default implementation that works well for most entries, + // because they have only one item. + return evaluate(); +} + +void WorksheetEntry::evaluateNext(EvaluationOption opt) +{ + WorksheetEntry* entry = next(); + + while (entry && !entry->wantFocus()) + entry = entry->next(); + + if (entry) { + if (opt == EvaluateNext || Settings::self()->autoEval()) { + entry->evaluate(EvaluateNext); + } else if (opt == FocusNext) { + worksheet()->setModified(); + entry->focusEntry(WorksheetTextItem::BottomRight); + } else { + worksheet()->setModified(); + } + } else if (opt != DoNothing) { + if (!worksheet()->isLoadingFromFile() && (!isEmpty() || type() != CommandEntry::Type)) + worksheet()->appendCommandEntry(); + else + focusEntry(); + worksheet()->setModified(); + } +} + +qreal WorksheetEntry::setGeometry(qreal x, qreal y, qreal w) +{ + setPos(x, y); + layOutForWidth(w); + return size().height(); +} + +void WorksheetEntry::recalculateSize() +{ + qreal height = size().height(); + layOutForWidth(size().width(), true); + if (height != size().height()) + worksheet()->updateEntrySize(this); +} + +QPropertyAnimation* WorksheetEntry::sizeChangeAnimation(QSizeF s) +{ + QSizeF oldSize; + QSizeF newSize; + if (s.isValid()) { + oldSize = size(); + newSize = s; + } else { + oldSize = size(); + layOutForWidth(size().width(), true); + newSize = size(); + } + + QPropertyAnimation* sizeAn = new QPropertyAnimation(this, "size", this); + sizeAn->setDuration(200); + sizeAn->setStartValue(oldSize); + sizeAn->setEndValue(newSize); + sizeAn->setEasingCurve(QEasingCurve::InOutQuad); + connect(sizeAn, &QPropertyAnimation::valueChanged, this, &WorksheetEntry::sizeAnimated); + return sizeAn; +} + +void WorksheetEntry::sizeAnimated() +{ + worksheet()->updateEntrySize(this); +} + +void WorksheetEntry::animateSizeChange() +{ + if (!worksheet()->animationsEnabled()) { + recalculateSize(); + return; + } + if (m_animation) { + layOutForWidth(size().width(), true); + return; + } + QPropertyAnimation* sizeAn = sizeChangeAnimation(); + m_animation = new AnimationData; + m_animation->item = nullptr; + m_animation->slot = nullptr; + m_animation->opacAnimation = nullptr; + m_animation->posAnimation = nullptr; + m_animation->sizeAnimation = sizeAn; + m_animation->sizeAnimation->setEasingCurve(QEasingCurve::OutCubic); + m_animation->animation = new QParallelAnimationGroup(this); + m_animation->animation->addAnimation(m_animation->sizeAnimation); + connect(m_animation->animation, &QAnimationGroup::finished, this, &WorksheetEntry::endAnimation); + m_animation->animation->start(); +} + +void WorksheetEntry::fadeInItem(QGraphicsObject* item, const char* slot) +{ + if (!worksheet()->animationsEnabled()) { + recalculateSize(); + if (slot) + invokeSlotOnObject(slot, item); + return; + } + if (m_animation) { + // this calculates the new size and calls updateSizeAnimation + layOutForWidth(size().width(), true); + if (slot) + invokeSlotOnObject(slot, item); + return; + } + QPropertyAnimation* sizeAn = sizeChangeAnimation(); + m_animation = new AnimationData; + m_animation->sizeAnimation = sizeAn; + m_animation->sizeAnimation->setEasingCurve(QEasingCurve::OutCubic); + m_animation->opacAnimation = new QPropertyAnimation(item, "opacity", this); + m_animation->opacAnimation->setDuration(200); + m_animation->opacAnimation->setStartValue(0); + m_animation->opacAnimation->setEndValue(1); + m_animation->opacAnimation->setEasingCurve(QEasingCurve::OutCubic); + m_animation->posAnimation = nullptr; + + m_animation->animation = new QParallelAnimationGroup(this); + m_animation->item = item; + m_animation->slot = slot; + + m_animation->animation->addAnimation(m_animation->sizeAnimation); + m_animation->animation->addAnimation(m_animation->opacAnimation); + + connect(m_animation->animation, &QAnimationGroup::finished, this, &WorksheetEntry::endAnimation); + + m_animation->animation->start(); +} + +void WorksheetEntry::fadeOutItem(QGraphicsObject* item, const char* slot) +{ + // Note: The default value for slot is SLOT(deleteLater()), so item + // will be deleted after the animation. + if (!worksheet()->animationsEnabled()) { + recalculateSize(); + if (slot) + invokeSlotOnObject(slot, item); + return; + } + if (m_animation) { + // this calculates the new size and calls updateSizeAnimation + layOutForWidth(size().width(), true); + if (slot) + invokeSlotOnObject(slot, item); + return; + } + QPropertyAnimation* sizeAn = sizeChangeAnimation(); + m_animation = new AnimationData; + m_animation->sizeAnimation = sizeAn; + m_animation->opacAnimation = new QPropertyAnimation(item, "opacity", this); + m_animation->opacAnimation->setDuration(200); + m_animation->opacAnimation->setStartValue(1); + m_animation->opacAnimation->setEndValue(0); + m_animation->opacAnimation->setEasingCurve(QEasingCurve::OutCubic); + m_animation->posAnimation = nullptr; + + m_animation->animation = new QParallelAnimationGroup(this); + m_animation->item = item; + m_animation->slot = slot; + + m_animation->animation->addAnimation(m_animation->sizeAnimation); + m_animation->animation->addAnimation(m_animation->opacAnimation); + + connect(m_animation->animation, &QAnimationGroup::finished, this, &WorksheetEntry::endAnimation); + + m_animation->animation->start(); +} + +void WorksheetEntry::endAnimation() +{ + if (!m_animation) + return; + QAnimationGroup* anim = m_animation->animation; + if (anim->state() == QAbstractAnimation::Running) { + anim->stop(); + if (m_animation->sizeAnimation) + setSize(m_animation->sizeAnimation->endValue().toSizeF()); + if (m_animation->opacAnimation) { + qreal opac = m_animation->opacAnimation->endValue().value(); + m_animation->item->setOpacity(opac); + } + if (m_animation->posAnimation) { + const QPointF& pos = m_animation->posAnimation->endValue().toPointF(); + m_animation->item->setPos(pos); + } + + // If the animation was connected to a slot, call it + if (m_animation->slot) + invokeSlotOnObject(m_animation->slot, m_animation->item); + } + m_animation->animation->deleteLater(); + delete m_animation; + m_animation = nullptr; +} + +bool WorksheetEntry::animationActive() +{ + return m_animation; +} + +void WorksheetEntry::updateSizeAnimation(QSizeF size) +{ + // Update the current animation, so that the new ending will be size + + if (!m_animation) + return; + + if (m_aboutToBeRemoved) + // do not modify the remove-animation + return; + if (m_animation->sizeAnimation) { + QPropertyAnimation* sizeAn = m_animation->sizeAnimation; + qreal progress = static_cast(sizeAn->currentTime()) / + sizeAn->totalDuration(); + QEasingCurve curve = sizeAn->easingCurve(); + qreal value = curve.valueForProgress(progress); + sizeAn->setEndValue(size); + QSizeF newStart = 1/(1-value)*(sizeAn->currentValue().toSizeF() - value*size); + sizeAn->setStartValue(newStart); + } else { + m_animation->sizeAnimation = sizeChangeAnimation(size); + int d = m_animation->animation->duration() - + m_animation->animation->currentTime(); + m_animation->sizeAnimation->setDuration(d); + m_animation->animation->addAnimation(m_animation->sizeAnimation); + } +} + +void WorksheetEntry::invokeSlotOnObject(const char* slot, QObject* obj) +{ + const QMetaObject* metaObj = obj->metaObject(); + const QByteArray normSlot = QMetaObject::normalizedSignature(slot); + const int slotIndex = metaObj->indexOfSlot(normSlot.constData()); + if (slotIndex == -1) + qDebug() << "Warning: Tried to invoke an invalid slot:" << slot; + const QMetaMethod method = metaObj->method(slotIndex); + method.invoke(obj, Qt::DirectConnection); +} + +bool WorksheetEntry::aboutToBeRemoved() +{ + return m_aboutToBeRemoved; +} + +void WorksheetEntry::startRemoving() +{ + if (!worksheet()->animationsEnabled()) { + m_aboutToBeRemoved = true; + remove(); + return; + } + if (m_aboutToBeRemoved) + return; + + if (focusItem()) { + if (!next()) { + if (previous() && previous()->isEmpty() && + !previous()->aboutToBeRemoved()) { + previous()->focusEntry(); + } else { + WorksheetEntry* next = worksheet()->appendCommandEntry(); + setNext(next); + next->focusEntry(); + } + } else { + next()->focusEntry(); + } + } + + if (m_animation) { + endAnimation(); + } + + m_aboutToBeRemoved = true; + m_animation = new AnimationData; + m_animation->sizeAnimation = new QPropertyAnimation(this, "size", this); + m_animation->sizeAnimation->setDuration(300); + m_animation->sizeAnimation->setEndValue(QSizeF(size().width(), 0)); + m_animation->sizeAnimation->setEasingCurve(QEasingCurve::InOutQuad); + + connect(m_animation->sizeAnimation, &QPropertyAnimation::valueChanged, this, &WorksheetEntry::sizeAnimated); + connect(m_animation->sizeAnimation, &QPropertyAnimation::finished, this, &WorksheetEntry::remove); + + m_animation->opacAnimation = new QPropertyAnimation(this, "opacity", this); + m_animation->opacAnimation->setDuration(300); + m_animation->opacAnimation->setEndValue(0); + m_animation->opacAnimation->setEasingCurve(QEasingCurve::OutCubic); + m_animation->posAnimation = nullptr; + + m_animation->animation = new QParallelAnimationGroup(this); + m_animation->animation->addAnimation(m_animation->sizeAnimation); + m_animation->animation->addAnimation(m_animation->opacAnimation); + + m_animation->animation->start(); +} + +bool WorksheetEntry::stopRemoving() +{ + if (!m_aboutToBeRemoved) + return true; + + if (m_animation->animation->state() == QAbstractAnimation::Stopped) + // we are too late to stop the deletion + return false; + + m_aboutToBeRemoved = false; + m_animation->animation->stop(); + m_animation->animation->deleteLater(); + delete m_animation; + m_animation = nullptr; + return true; +} + +void WorksheetEntry::remove() +{ + if (!m_aboutToBeRemoved) + return; + + if (previous() && previous()->next() == this) + previous()->setNext(next()); + else + worksheet()->setFirstEntry(next()); + if (next() && next()->previous() == this) + next()->setPrevious(previous()); + else + worksheet()->setLastEntry(previous()); + + // make the entry invisible to QGraphicsScene's itemAt() function + hide(); + worksheet()->updateLayout(); + deleteLater(); +} + +void WorksheetEntry::setSize(QSizeF size) +{ + prepareGeometryChange(); + if (m_actionBar && size != m_size) + m_actionBar->updatePosition(); + m_size = size; +} + +QSizeF WorksheetEntry::size() +{ + return m_size; +} + +bool WorksheetEntry::hasActionBar() +{ + return m_actionBar; +} + +void WorksheetEntry::showActionBar() +{ + if (m_actionBar && !m_actionBarAnimation) + return; + + if (m_actionBarAnimation) { + if (m_actionBarAnimation->endValue().toReal() == 1) + return; + m_actionBarAnimation->stop(); + delete m_actionBarAnimation; + m_actionBarAnimation = nullptr; + } + + if (!m_actionBar) { + m_actionBar = new ActionBar(this); + + m_actionBar->addButton(QIcon::fromTheme(QLatin1String("edit-delete")), i18n("Remove Entry"), + this, SLOT(startRemoving())); + + WorksheetToolButton* dragButton; + dragButton = m_actionBar->addButton(QIcon::fromTheme(QLatin1String("transform-move")), + i18n("Drag Entry")); + connect(dragButton, SIGNAL(pressed()), this, SLOT(startDrag())); + + if (wantToEvaluate()) { + QString toolTip = i18n("Evaluate Entry"); + m_actionBar->addButton(QIcon::fromTheme(QLatin1String("media-playback-start")), toolTip, + this, SLOT(evaluate())); + } + + m_actionBar->addSpace(); + + addActionsToBar(m_actionBar); + } + + if (worksheet()->animationsEnabled()) { + m_actionBarAnimation = new QPropertyAnimation(m_actionBar, "opacity", + this); + m_actionBarAnimation->setStartValue(0); + m_actionBarAnimation->setKeyValueAt(0.666, 0); + m_actionBarAnimation->setEndValue(1); + m_actionBarAnimation->setDuration(600); + connect(m_actionBarAnimation, &QPropertyAnimation::finished, this, &WorksheetEntry::deleteActionBarAnimation); + + m_actionBarAnimation->start(); + } +} + +void WorksheetEntry::hideActionBar() +{ + if (!m_actionBar) + return; + + if (m_actionBarAnimation) { + if (m_actionBarAnimation->endValue().toReal() == 0) + return; + m_actionBarAnimation->stop(); + delete m_actionBarAnimation; + m_actionBarAnimation = nullptr; + } + + if (worksheet()->animationsEnabled()) { + m_actionBarAnimation = new QPropertyAnimation(m_actionBar, "opacity", + this); + m_actionBarAnimation->setEndValue(0); + m_actionBarAnimation->setEasingCurve(QEasingCurve::Linear); + m_actionBarAnimation->setDuration(200); + connect(m_actionBarAnimation, &QPropertyAnimation::finished, this, &WorksheetEntry::deleteActionBar); + + m_actionBarAnimation->start(); + } else { + deleteActionBar(); + } +} + +void WorksheetEntry::deleteActionBarAnimation() +{ + if (m_actionBarAnimation) { + delete m_actionBarAnimation; + m_actionBarAnimation = nullptr; + } +} + +void WorksheetEntry::deleteActionBar() +{ + if (m_actionBar) { + delete m_actionBar; + m_actionBar = nullptr; + } + + deleteActionBarAnimation(); +} + +void WorksheetEntry::addActionsToBar(ActionBar*) +{ +} + +void WorksheetEntry::hoverEnterEvent(QGraphicsSceneHoverEvent* event) +{ + Q_UNUSED(event); + showActionBar(); +} + +void WorksheetEntry::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) +{ + Q_UNUSED(event); + hideActionBar(); +} + +WorksheetTextItem* WorksheetEntry::highlightItem() +{ + return nullptr; +} + +bool WorksheetEntry::wantFocus() +{ + return true; +} diff --git a/src/worksheetentry.h b/src/worksheetentry.h new file mode 100644 index 0000000..36914ed --- /dev/null +++ b/src/worksheetentry.h @@ -0,0 +1,190 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef WORKSHEETENTRY_H +#define WORKSHEETENTRY_H + +#include +#include + +#include "worksheet.h" +#include "worksheettextitem.h" +#include "worksheetcursor.h" + +class TextEntry; +class MarkdownEntry; +class CommandEntry; +class ImageEntry; +class PageBreakEntry; +class LaTeXEntry; + +class WorksheetTextItem; +class ActionBar; + +class QPainter; +class QWidget; +class QPropertyAnimation; + +struct AnimationData; + +class WorksheetEntry : public QGraphicsObject +{ + Q_OBJECT + public: + explicit WorksheetEntry(Worksheet* worksheet); + ~WorksheetEntry() override; + + enum {Type = UserType}; + + int type() const override; + + virtual bool isEmpty()=0; + + static WorksheetEntry* create(int t, Worksheet* worksheet); + + WorksheetEntry* next() const; + WorksheetEntry* previous() const; + + void setNext(WorksheetEntry*); + void setPrevious(WorksheetEntry*); + + QRectF boundingRect() const override; + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; + + virtual bool acceptRichText() = 0; + + virtual void setContent(const QString& content)=0; + virtual void setContent(const QDomElement& content, const KZip& file)=0; + + virtual QDomElement toXml(QDomDocument& doc, KZip* archive)=0; + virtual QString toPlain(const QString& commandSep, const QString& commentStartingSeq, const QString& commentEndingSeq)=0; + + virtual void interruptEvaluation()=0; + + virtual void showCompletion(); + + virtual bool focusEntry(int pos = WorksheetTextItem::TopLeft, qreal xCoord = 0); + + virtual qreal setGeometry(qreal x, qreal y, qreal w); + virtual void layOutForWidth(qreal w, bool force = false) = 0; + QPropertyAnimation* sizeChangeAnimation(QSizeF s = QSizeF()); + + virtual void populateMenu(QMenu* menu, QPointF pos); + + bool aboutToBeRemoved(); + QSizeF size(); + + enum EvaluationOption { + DoNothing, FocusNext, EvaluateNext + }; + + virtual WorksheetTextItem* highlightItem(); + + bool hasActionBar(); + + enum SearchFlag {SearchCommand=1, SearchResult=2, SearchError=4, + SearchText=8, SearchLaTeX=16, SearchAll=31}; + + virtual WorksheetCursor search(const QString& pattern, unsigned flags, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos = WorksheetCursor()); + + public Q_SLOTS: + virtual bool evaluate(WorksheetEntry::EvaluationOption evalOp = FocusNext) = 0; + virtual bool evaluateCurrentItem(); + virtual void updateEntry() = 0; + + void insertCommandEntry(); + void insertTextEntry(); + void insertMarkdownEntry(); + void insertLatexEntry(); + void insertImageEntry(); + void insertPageBreakEntry(); + void insertCommandEntryBefore(); + void insertTextEntryBefore(); + void insertMarkdownEntryBefore(); + void insertLatexEntryBefore(); + void insertImageEntryBefore(); + void insertPageBreakEntryBefore(); + + virtual void sizeAnimated(); + virtual void startRemoving(); + bool stopRemoving(); + void moveToPreviousEntry(int pos = WorksheetTextItem::BottomRight, qreal x = 0); + void moveToNextEntry(int pos = WorksheetTextItem::TopLeft, qreal x = 0); + void recalculateSize(); + + // similar to recalculateSize, but the size change is animated + void animateSizeChange(); + // animate the size change and the opacity of item + void fadeInItem(QGraphicsObject* item = nullptr, const char* slot = nullptr); + void fadeOutItem(QGraphicsObject* item = nullptr, const char* slot = "deleteLater()"); + void endAnimation(); + + void showActionBar(); + void hideActionBar(); + + void startDrag(QPointF grabPos = QPointF()); + + Q_SIGNALS: + void aboutToBeDeleted(); + + protected: + Worksheet* worksheet(); + WorksheetView* worksheetView(); + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + void evaluateNext(EvaluationOption opt); + + void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override; + + void setSize(QSizeF size); + + bool animationActive(); + void updateSizeAnimation(QSizeF size); + + void invokeSlotOnObject(const char* slot, QObject* obj); + + virtual void addActionsToBar(ActionBar* actionBar); + + virtual bool wantToEvaluate() = 0; + virtual bool wantFocus(); + + protected Q_SLOTS: + virtual void remove(); + void deleteActionBar(); + void deleteActionBarAnimation(); + + protected: + static const qreal VerticalMargin; + + private: + QSizeF m_size; + WorksheetEntry* m_prev; + WorksheetEntry* m_next; + Q_PROPERTY(QSizeF size READ size WRITE setSize) + AnimationData* m_animation; + ActionBar* m_actionBar; + QPropertyAnimation* m_actionBarAnimation; + bool m_aboutToBeRemoved; +}; + +#endif // WORKSHEETENTRY_H diff --git a/src/worksheetimageitem.cpp b/src/worksheetimageitem.cpp new file mode 100644 index 0000000..9cb1971 --- /dev/null +++ b/src/worksheetimageitem.cpp @@ -0,0 +1,160 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheetimageitem.h" +#include "worksheet.h" + +#include +#include +#include +#include +#include +#include + +WorksheetImageItem::WorksheetImageItem(QGraphicsObject* parent) + : QGraphicsObject(parent) +{ + connect(this, SIGNAL(menuCreated(QMenu*,QPointF)), parent, + SLOT(populateMenu(QMenu*,QPointF)), Qt::DirectConnection); + m_maxWidth = 0; +} + +WorksheetImageItem::~WorksheetImageItem() +{ + if (worksheet() && m_maxWidth > 0 && width() > m_maxWidth) + worksheet()->removeProtrusion(width() - m_maxWidth); +} + +int WorksheetImageItem::type() const +{ + return Type; +} + +bool WorksheetImageItem::imageIsValid() +{ + return !m_pixmap.isNull(); +} + +qreal WorksheetImageItem::setGeometry(qreal x, qreal y, qreal w, bool centered) +{ + if (width() <= w && centered) { + setPos(x + w/2 - width()/2, y); + } else { + setPos(x, y); + if (m_maxWidth < width()) + worksheet()->updateProtrusion(width() - m_maxWidth, width() - w); + else + worksheet()->addProtrusion(width() - w); + } + m_maxWidth = w; + + return height(); +} + +qreal WorksheetImageItem::height() const +{ + return m_size.height(); +} + +qreal WorksheetImageItem::width() const +{ + return m_size.width(); +} + +QSizeF WorksheetImageItem::size() +{ + return m_size; +} + +void WorksheetImageItem::setSize(QSizeF size) +{ + qreal oldProtrusion = x() + m_size.width() - m_maxWidth; + qreal newProtrusion = x() + size.width() - m_maxWidth; + if (oldProtrusion > 0) { + if (newProtrusion > 0) + worksheet()->updateProtrusion(oldProtrusion, newProtrusion); + else + worksheet()->removeProtrusion(oldProtrusion); + } else { + if (newProtrusion > 0) + worksheet()->addProtrusion(newProtrusion); + } + m_size = size; +} + +QSize WorksheetImageItem::imageSize() +{ + return m_pixmap.size(); +} + +QRectF WorksheetImageItem::boundingRect() const +{ + return QRectF(QPointF(0, 0), m_size); +} + +#include + +void WorksheetImageItem::paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, + QWidget *widget) +{ + Q_UNUSED(option); + Q_UNUSED(widget); + painter->drawPixmap(QRectF(QPointF(0,0), m_size), m_pixmap, + m_pixmap.rect()); +} + +void WorksheetImageItem::setEps(const QUrl& url) +{ + const QImage img = worksheet()->epsRenderer()->renderToImage(url, &m_size); + m_pixmap = QPixmap::fromImage(img.convertToFormat(QImage::Format_ARGB32)); +} + +void WorksheetImageItem::setImage(QImage img) +{ + m_pixmap = QPixmap::fromImage(img); + setSize(m_pixmap.size()); +} + +void WorksheetImageItem::setPixmap(QPixmap pixmap) +{ + m_pixmap = pixmap; +} + +void WorksheetImageItem::populateMenu(QMenu* menu, QPointF pos) +{ + emit menuCreated(menu, mapToParent(pos)); +} + +void WorksheetImageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) +{ + QMenu *menu = worksheet()->createContextMenu(); + populateMenu(menu, event->pos()); + + menu->popup(event->screenPos()); +} + +Worksheet* WorksheetImageItem::worksheet() +{ + return qobject_cast(scene()); +} + + + diff --git a/src/worksheetimageitem.h b/src/worksheetimageitem.h new file mode 100644 index 0000000..a881748 --- /dev/null +++ b/src/worksheetimageitem.h @@ -0,0 +1,78 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef WORKSHEETIMAGEITEM_H +#define WORKSHEETIMAGEITEM_H + +#include +#include + +class Worksheet; +class QImage; +class QGraphicsSceneContextMenuEvent; +class QMenu; + +class WorksheetImageItem : public QGraphicsObject +{ + Q_OBJECT + public: + explicit WorksheetImageItem(QGraphicsObject* parent); + ~WorksheetImageItem() override; + + enum {Type = UserType + 101}; + + int type() const override; + + bool imageIsValid(); + + virtual qreal setGeometry(qreal x, qreal y, qreal w, bool centered=false); + + qreal height() const; + qreal width() const; + QSizeF size(); + void setSize(QSizeF size); + QSize imageSize(); + + QRectF boundingRect() const override; + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget = nullptr) override; + + void setEps(const QUrl &url); + void setImage(QImage img); + void setPixmap(QPixmap pixmap); + + virtual void populateMenu(QMenu* menu, QPointF pos); + Worksheet* worksheet(); + + Q_SIGNALS: + void sizeChanged(); + void menuCreated(QMenu*, QPointF); + + protected: + void contextMenuEvent(QGraphicsSceneContextMenuEvent*) override; + + private: + QPixmap m_pixmap; + QSizeF m_size; + qreal m_maxWidth; +}; + +#endif //WORKSHEETIMAGEITEM_H diff --git a/src/worksheettextitem.cpp b/src/worksheettextitem.cpp new file mode 100644 index 0000000..df0ec20 --- /dev/null +++ b/src/worksheettextitem.cpp @@ -0,0 +1,920 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheettextitem.h" +#include "worksheet.h" +#include "worksheetentry.h" +#include "epsrenderer.h" +#include "worksheetcursor.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +WorksheetTextItem::WorksheetTextItem(QGraphicsObject* parent, Qt::TextInteractionFlags ti) + : QGraphicsTextItem(parent) +{ + setTextInteractionFlags(ti); + if (ti & Qt::TextEditable) { + setCursor(Qt::IBeamCursor); + connect(this, SIGNAL(sizeChanged()), parent, + SLOT(recalculateSize())); + } + m_completionEnabled = false; + m_completionActive = false; + m_itemDragable = false; + m_richTextEnabled = false; + m_size = document()->size();; + m_maxWidth = -1; + setAcceptDrops(true); + setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); + connect(document(), SIGNAL(contentsChanged()), this, SLOT(testSize())); + connect(this, SIGNAL(menuCreated(QMenu*,QPointF)), parent, + SLOT(populateMenu(QMenu*,QPointF)), Qt::DirectConnection); + connect(this, SIGNAL(deleteEntry()), parent, SLOT(startRemoving())); + connect(this, &WorksheetTextItem::cursorPositionChanged, this, &WorksheetTextItem::updateRichTextActions); + connect(document(), SIGNAL(undoAvailable(bool)), + this, SIGNAL(undoAvailable(bool))); + connect(document(), SIGNAL(redoAvailable(bool)), + this, SIGNAL(redoAvailable(bool))); +} + +WorksheetTextItem::~WorksheetTextItem() +{ + if (worksheet() && this == worksheet()->lastFocusedTextItem()) + worksheet()->updateFocusedTextItem(nullptr); + if (worksheet() && m_maxWidth > 0 && width() > m_maxWidth) + worksheet()->removeProtrusion(width() - m_maxWidth); +} + +int WorksheetTextItem::type() const +{ + return Type; +} + +/* +void WorksheetTextItem::setHeight() +{ + m_height = height(); +} +*/ + +void WorksheetTextItem::testSize() +{ + qreal h = document()->size().height(); + if (h != m_size.height()) { + emit sizeChanged(); + m_size.setHeight(h); + } + + qreal w = document()->size().width(); + if (w != m_size.width()) { + if (m_maxWidth > 0) { + qreal oldDiff = m_size.width() - m_maxWidth; + qreal newDiff = w - m_maxWidth; + if (w > m_maxWidth) { + if (m_size.width() > m_maxWidth) + worksheet()->updateProtrusion(oldDiff, newDiff); + else + worksheet()->addProtrusion(newDiff); + } else if (m_size.width() > m_maxWidth) { + worksheet()->removeProtrusion(oldDiff); + } + } + m_size.setWidth(w); + } +} + +qreal WorksheetTextItem::setGeometry(qreal x, qreal y, qreal w, bool centered) +{ + if (m_size.width() < w && centered) + setPos(x + w/2 - m_size.width()/2, y); + else + setPos(x,y); + + qreal oldDiff = 0; + if (m_maxWidth > 0 && width() > m_maxWidth) + oldDiff = width() - m_maxWidth; + m_maxWidth = w; + setTextWidth(w); + m_size = document()->size(); + + if (oldDiff) { + if (m_size.width() > m_maxWidth) { + qreal newDiff = m_size.width() - m_maxWidth; + worksheet()->updateProtrusion(oldDiff, newDiff); + } else { + worksheet()->removeProtrusion(oldDiff); + } + } else if (m_size.width() > m_maxWidth) { + qreal newDiff = m_size.width() - m_maxWidth; + worksheet()->addProtrusion(newDiff); + } + + return m_size.height(); +} + +void WorksheetTextItem::populateMenu(QMenu* menu, QPointF pos) +{ + qDebug() << "populate Menu"; + QAction * cut = KStandardAction::cut(this, SLOT(cut()), menu); + QAction * copy = KStandardAction::copy(this, SLOT(copy()), menu); + QAction * paste = KStandardAction::paste(this, SLOT(paste()), menu); + if (!textCursor().hasSelection()) { + cut->setEnabled(false); + copy->setEnabled(false); + } + if (QApplication::clipboard()->text().isEmpty()) { + paste->setEnabled(false); + } + bool actionAdded = false; + if (isEditable()) { + menu->addAction(cut); + actionAdded = true; + } + if (!m_itemDragable && (flags() & Qt::TextSelectableByMouse)) { + menu->addAction(copy); + actionAdded = true; + } + if (isEditable()) { + menu->addAction(paste); + actionAdded = true; + } + if (actionAdded) + menu->addSeparator(); + + emit menuCreated(menu, mapToParent(pos)); +} + +QKeyEvent* WorksheetTextItem::eventForStandardAction(KStandardAction::StandardAction actionID) +{ + // there must be a better way to get the shortcut... + QAction * action = KStandardAction::create(actionID, this, SLOT(copy()), this); + QKeySequence keySeq = action->shortcut(); + // we do not support key sequences with multiple keys here + int code = keySeq[0]; + const int ModMask = Qt::ShiftModifier | Qt::ControlModifier | + Qt::AltModifier | Qt::MetaModifier; + const int KeyMask = ~ModMask; + QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, code & KeyMask, + QFlags(code & ModMask)); + delete action; + return event; +} + +void WorksheetTextItem::cut() +{ + if (richTextEnabled()) { + QKeyEvent* event = eventForStandardAction(KStandardAction::Cut); + QApplication::sendEvent(worksheet(), event); + delete event; + } else { + copy(); + textCursor().removeSelectedText(); + } +} + +void WorksheetTextItem::paste() +{ + if (richTextEnabled()) { + QKeyEvent* event = eventForStandardAction(KStandardAction::Paste); + QApplication::sendEvent(worksheet(), event); + delete event; + } else { + textCursor().insertText(QApplication::clipboard()->text()); + } +} + +void WorksheetTextItem::copy() +{ + if (richTextEnabled()) { + QKeyEvent* event = eventForStandardAction(KStandardAction::Copy); + QApplication::sendEvent(worksheet(), event); + delete event; + } else { + if (!textCursor().hasSelection()) + return; + QApplication::clipboard()->setText(resolveImages(textCursor())); + } +} + +void WorksheetTextItem::undo() +{ + document()->undo(); +} + +void WorksheetTextItem::redo() +{ + document()->redo(); +} + +void WorksheetTextItem::clipboardChanged() +{ + if (isEditable()) + emit pasteAvailable(!QApplication::clipboard()->text().isEmpty()); +} + +void WorksheetTextItem::selectionChanged() +{ + emit copyAvailable(textCursor().hasSelection()); + if (isEditable()) + emit cutAvailable(textCursor().hasSelection()); +} + +QString WorksheetTextItem::resolveImages(const QTextCursor& cursor) +{ + int start = cursor.selectionStart(); + int end = cursor.selectionEnd(); + + const QString repl = QString(QChar::ObjectReplacementCharacter); + QString result; + QTextCursor cursor1 = textCursor(); + cursor1.setPosition(start); + QTextCursor cursor2 = document()->find(repl, cursor1); + + for (; !cursor2.isNull() && cursor2.selectionEnd() <= end; + cursor2 = document()->find(repl, cursor1)) { + cursor1.setPosition(cursor2.selectionStart(), QTextCursor::KeepAnchor); + result += cursor1.selectedText(); + QVariant var = cursor2.charFormat().property(EpsRenderer::Delimiter); + QString delim; + if (var.isValid()) + delim = var.value(); + else + delim = QLatin1String(""); + result += delim + cursor2.charFormat().property(EpsRenderer::Code).value() + delim; + cursor1.setPosition(cursor2.selectionEnd()); + } + + cursor1.setPosition(end, QTextCursor::KeepAnchor); + result += cursor1.selectedText(); + return result; +} + +void WorksheetTextItem::setCursorPosition(const QPointF& pos) +{ + QTextCursor cursor = cursorForPosition(pos); + setTextCursor(cursor); + emit cursorPositionChanged(cursor); + //setLocalCursorPosition(mapFromParent(pos)); +} + +QPointF WorksheetTextItem::cursorPosition() const +{ + return mapToParent(localCursorPosition()); +} + +void WorksheetTextItem::setLocalCursorPosition(const QPointF& pos) +{ + int p = document()->documentLayout()->hitTest(pos, Qt::FuzzyHit); + QTextCursor cursor = textCursor(); + cursor.setPosition(p); + setTextCursor(cursor); + emit cursorPositionChanged(cursor); +} + +QPointF WorksheetTextItem::localCursorPosition() const +{ + QTextCursor cursor = textCursor(); + QTextBlock block = cursor.block(); + int p = cursor.position() - block.position(); + QTextLine line = block.layout()->lineForTextPosition(p); + if (!line.isValid()) // can this happen? + return block.layout()->position(); + return QPointF(line.cursorToX(p), line.y() + line.height()); +} + +QRectF WorksheetTextItem::sceneCursorRect(QTextCursor cursor) const +{ + return mapRectToScene(cursorRect(cursor)); +} + +QRectF WorksheetTextItem::cursorRect(QTextCursor cursor) const +{ + if (cursor.isNull()) + cursor = textCursor(); + QTextCursor startCursor = cursor; + startCursor.setPosition(cursor.selectionStart()); + QTextBlock block = startCursor.block(); + if (!block.layout()) + return mapRectToScene(boundingRect()); + int p = startCursor.position() - block.position(); + QTextLine line = block.layout()->lineForTextPosition(p); + QRectF r1(line.cursorToX(p), line.y(), 1, line.height()+line.leading()); + + if (!cursor.hasSelection()) + return r1; + + QTextCursor endCursor = cursor; + endCursor.setPosition(cursor.selectionEnd()); + block = endCursor.block(); + p = endCursor.position() - block.position(); + line = block.layout()->lineForTextPosition(p); + QRectF r2(line.cursorToX(p), line.y(), 1, line.height()+line.leading()); + + if (r1.y() == r2.y()) + return r1.united(r2); + else + return QRectF(x(), qMin(r1.y(), r2.y()), boundingRect().width(), + qMax(r1.y() + r1.height(), r2.y() + r2.height())); +} + +QTextCursor WorksheetTextItem::cursorForPosition(const QPointF& pos) const +{ + QPointF lpos = mapFromParent(pos); + int p = document()->documentLayout()->hitTest(lpos, Qt::FuzzyHit); + QTextCursor cursor = textCursor(); + cursor.setPosition(p); + return cursor; +} + +bool WorksheetTextItem::isEditable() +{ + return textInteractionFlags() & Qt::TextEditable; +} + +void WorksheetTextItem::setBackgroundColor(const QColor& color) +{ + m_backgroundColor = color; +} + +const QColor& WorksheetTextItem::backgroundColor() const +{ + return m_backgroundColor; +} + +bool WorksheetTextItem::richTextEnabled() +{ + return m_richTextEnabled; +} + +void WorksheetTextItem::enableCompletion(bool b) +{ + m_completionEnabled = b; +} + +void WorksheetTextItem::activateCompletion(bool b) +{ + m_completionActive = b; +} + +void WorksheetTextItem::setItemDragable(bool b) +{ + m_itemDragable = b; +} + +void WorksheetTextItem::enableRichText(bool b) +{ + m_richTextEnabled = b; +} + +void WorksheetTextItem::setFocusAt(int pos, qreal xCoord) +{ + QTextCursor cursor = textCursor(); + if (pos == TopLeft) { + cursor.movePosition(QTextCursor::Start); + } else if (pos == BottomRight) { + cursor.movePosition(QTextCursor::End); + } else { + QTextLine line; + if (pos == TopCoord) { + line = document()->firstBlock().layout()->lineAt(0); + } else { + QTextLayout* layout = document()->lastBlock().layout(); + qDebug() << document()->blockCount() << "blocks"; + qDebug() << document()->lastBlock().lineCount() << "lines in last block"; + line = layout->lineAt(document()->lastBlock().lineCount()-1); + } + qreal x = mapFromScene(xCoord, 0).x(); + int p = line.xToCursor(x); + cursor.setPosition(p); + // Hack: The code for selecting the last line above does not work. + // This is a workaround + if (pos == BottomCoord) + while (cursor.movePosition(QTextCursor::Down)) + ; + } + setTextCursor(cursor); + emit cursorPositionChanged(cursor); + setFocus(); +} + +Cantor::Session* WorksheetTextItem::session() +{ + return worksheet()->session(); +} + +void WorksheetTextItem::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) { + case Qt::Key_Left: + if (event->modifiers() == Qt::NoModifier && textCursor().atStart()) { + emit moveToPrevious(BottomRight, 0); + qDebug()<<"Reached leftmost valid position"; + return; + } + break; + case Qt::Key_Right: + if (event->modifiers() == Qt::NoModifier && textCursor().atEnd()) { + emit moveToNext(TopLeft, 0); + qDebug()<<"Reached rightmost valid position"; + return; + } + break; + case Qt::Key_Up: + if (event->modifiers() == Qt::NoModifier && !textCursor().movePosition(QTextCursor::Up)) { + qreal x = mapToScene(localCursorPosition()).x(); + emit moveToPrevious(BottomCoord, x); + qDebug()<<"Reached topmost valid position" << localCursorPosition().x(); + return; + } + break; + case Qt::Key_Down: + if (event->modifiers() == Qt::NoModifier && !textCursor().movePosition(QTextCursor::Down)) { + qreal x = mapToScene(localCursorPosition()).x(); + emit moveToNext(TopCoord, x); + qDebug()<<"Reached bottommost valid position" << localCursorPosition().x(); + return; + } + break; + case Qt::Key_Enter: + case Qt::Key_Return: + if (event->modifiers() == Qt::NoModifier && m_completionActive) { + emit applyCompletion(); + return; + } + break; + case Qt::Key_Tab: + qDebug() << "Tab"; + break; + default: + break; + } + int p = textCursor().position(); + bool b = textCursor().hasSelection(); + QGraphicsTextItem::keyPressEvent(event); + if (p != textCursor().position()) + emit cursorPositionChanged(textCursor()); + if (b != textCursor().hasSelection()) + selectionChanged(); +} + +bool WorksheetTextItem::sceneEvent(QEvent *event) +{ + if (event->type() == QEvent::KeyPress) { + // QGraphicsTextItem's TabChangesFocus feature prevents calls to + // keyPressEvent for Tab, even when it's turned off. So we got to catch + // that here. + QKeyEvent* kev = dynamic_cast(event); + if (kev->key() == Qt::Key_Tab && kev->modifiers() == Qt::NoModifier) { + emit tabPressed(); + return true; + } else if ((kev->key() == Qt::Key_Tab && + kev->modifiers() == Qt::ShiftModifier) || + kev->key() == Qt::Key_Backtab) { + emit backtabPressed(); + return true; + } + } else if (event->type() == QEvent::ShortcutOverride) { + QKeyEvent* kev = dynamic_cast(event); + QKeySequence seq(kev->key() + kev->modifiers()); + if (worksheet()->isShortcut(seq)) { + qDebug() << "ShortcutOverride" << kev->key() << kev->modifiers(); + kev->ignore(); + return false; + } + } + return QGraphicsTextItem::sceneEvent(event); +} + +void WorksheetTextItem::focusInEvent(QFocusEvent *event) +{ + QGraphicsTextItem::focusInEvent(event); + //parentItem()->ensureVisible(QRectF(), 0, 0); + WorksheetEntry* entry = qobject_cast(parentObject()); + WorksheetCursor c(entry, this, textCursor()); + worksheet()->makeVisible(c); + worksheet()->updateFocusedTextItem(this); + connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, + SLOT(clipboardChanged())); + emit receivedFocus(this); + emit cursorPositionChanged(textCursor()); +} + +void WorksheetTextItem::focusOutEvent(QFocusEvent *event) +{ + QGraphicsTextItem::focusOutEvent(event); + emit cursorPositionChanged(QTextCursor()); +} + +void WorksheetTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) +{ + int p = textCursor().position(); + bool b = textCursor().hasSelection(); + + QGraphicsTextItem::mousePressEvent(event); + + if (isEditable() && event->button() == Qt::MiddleButton && + QApplication::clipboard()->supportsSelection() && + !event->isAccepted()) + event->accept(); + + if (m_itemDragable && event->button() == Qt::LeftButton) + event->accept(); + + if (p != textCursor().position()) + emit cursorPositionChanged(textCursor()); + if (b != textCursor().hasSelection()) + selectionChanged(); +} + +void WorksheetTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event) +{ + const QPointF buttonDownPos = event->buttonDownPos(Qt::LeftButton); + if (m_itemDragable && event->buttons() == Qt::LeftButton && + contains(buttonDownPos) && + (event->pos() - buttonDownPos).manhattanLength() >= QApplication::startDragDistance()) { + ungrabMouse(); + emit drag(mapToParent(buttonDownPos), mapToParent(event->pos())); + event->accept(); + } else { + bool b = textCursor().hasSelection(); + QGraphicsTextItem::mouseMoveEvent(event); + if (b != textCursor().hasSelection()) + selectionChanged(); + } +} + +void WorksheetTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + int p = textCursor().position(); + + // custom middle-click paste that does not copy rich text + if (isEditable() && event->button() == Qt::MiddleButton && + QApplication::clipboard()->supportsSelection() && + !richTextEnabled()) { + setLocalCursorPosition(mapFromScene(event->scenePos())); + const QString& text = QApplication::clipboard()->text(QClipboard::Selection); + textCursor().insertText(text); + } else { + QGraphicsTextItem::mouseReleaseEvent(event); + } + + if (p != textCursor().position()) + emit cursorPositionChanged(textCursor()); +} + +void WorksheetTextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) +{ + QTextCursor cursor = textCursor(); + const QChar repl = QChar::ObjectReplacementCharacter; + + if (!cursor.hasSelection()) { + // We look at the current cursor and the next cursor for a + // ObjectReplacementCharacter + for (int i = 2; i; --i) { + if (document()->characterAt(cursor.position()-1) == repl) { + setTextCursor(cursor); + emit doubleClick(); + return; + } + cursor.movePosition(QTextCursor::NextCharacter); + } + } else if (cursor.selectedText().contains(repl)) { + emit doubleClick(); + return; + } + + QGraphicsTextItem::mouseDoubleClickEvent(event); +} + +void WorksheetTextItem::dragEnterEvent(QGraphicsSceneDragDropEvent* event) +{ + if (isEditable() && event->mimeData()->hasFormat(QLatin1String("text/plain"))) { + if (event->proposedAction() & (Qt::CopyAction | Qt::MoveAction)) { + event->acceptProposedAction(); + } else if (event->possibleActions() & Qt::CopyAction) { + event->setDropAction(Qt::CopyAction); + event->accept(); + } else if (event->possibleActions() & Qt::MoveAction) { + event->setDropAction(Qt::MoveAction); + event->accept(); + } else { + event->ignore(); + } + } else { + event->ignore(); + } +} + +void WorksheetTextItem::dragMoveEvent(QGraphicsSceneDragDropEvent* event) +{ + if (isEditable() && event->mimeData()->hasFormat(QLatin1String("text/plain"))) + setLocalCursorPosition(mapFromScene(event->scenePos())); +} + +void WorksheetTextItem::dropEvent(QGraphicsSceneDragDropEvent* event) +{ + if (isEditable()) { + if (richTextEnabled() && event->mimeData()->hasFormat(QLatin1String("text/html"))) + textCursor().insertHtml(event->mimeData()->html()); + else + textCursor().insertText(event->mimeData()->text()); + event->accept(); + } +} + +void WorksheetTextItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) +{ + QMenu *menu = worksheet()->createContextMenu(); + populateMenu(menu, event->pos()); + + menu->popup(event->screenPos()); +} + +void WorksheetTextItem::insertTab() +{ + QTextCursor cursor = textCursor(); + cursor.clearSelection(); + cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + QString sel = cursor.selectedText(); + bool spacesOnly = true; + qDebug() << sel; + for (QString::iterator it = sel.begin(); it != sel.end(); ++it) { + if (! it->isSpace()) { + spacesOnly = false; + break; + } + } + + cursor.setPosition(cursor.selectionEnd()); + if (spacesOnly) { + while (document()->characterAt(cursor.position()) == QLatin1Char(' ')) + cursor.movePosition(QTextCursor::NextCharacter); + } + + QTextLayout *layout = textCursor().block().layout(); + if (!layout) { + cursor.insertText(QLatin1String(" ")); + } else { + cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::KeepAnchor); + int i = cursor.selectionEnd() - cursor.selectionStart(); + i = ((i+4) & (~3)) - i; + cursor.setPosition(cursor.selectionEnd()); + + QString insertBlankSpace = QLatin1String(" "); + cursor.insertText(insertBlankSpace.repeated(i)); + } + setTextCursor(cursor); + emit cursorPositionChanged(textCursor()); +} + +void WorksheetTextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* o, QWidget* w) { + if (m_backgroundColor.isValid()) { + painter->setPen(QPen(Qt::NoPen)); + painter->setBrush(m_backgroundColor); + painter->drawRect(boundingRect()); + } + QGraphicsTextItem::paint(painter, o, w); +} + +double WorksheetTextItem::width() const +{ + return m_size.width(); +} + +double WorksheetTextItem::height() const +{ + return m_size.height(); +} + +Worksheet* WorksheetTextItem::worksheet() +{ + return qobject_cast(scene()); +} + +WorksheetView* WorksheetTextItem::worksheetView() +{ + return worksheet()->worksheetView(); +} + +void WorksheetTextItem::clearSelection() +{ + QTextCursor cursor = textCursor(); + cursor.clearSelection(); + setTextCursor(cursor); + selectionChanged(); +} + +bool WorksheetTextItem::isUndoAvailable() +{ + return document()->isUndoAvailable(); +} + +bool WorksheetTextItem::isRedoAvailable() +{ + return document()->isRedoAvailable(); +} + +bool WorksheetTextItem::isCutAvailable() +{ + return isEditable() && textCursor().hasSelection(); +} + +bool WorksheetTextItem::isCopyAvailable() +{ + return !m_itemDragable && textCursor().hasSelection(); +} + +bool WorksheetTextItem::isPasteAvailable() +{ + return isEditable() && !QApplication::clipboard()->text().isEmpty(); +} + +QTextCursor WorksheetTextItem::search(QString pattern, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos) +{ + if (pos.isValid() && pos.textItem() != this) + return QTextCursor(); + + QTextDocument* doc = document(); + QTextCursor cursor; + if (pos.isValid()) { + cursor = doc->find(pattern, pos.textCursor(), qt_flags); + } else { + cursor = textCursor(); + if (qt_flags & QTextDocument::FindBackward) + cursor.movePosition(QTextCursor::End); + else + cursor.movePosition(QTextCursor::Start); + cursor = doc->find(pattern, cursor, qt_flags); + } + + return cursor; +} + +// RichText + +void WorksheetTextItem::updateRichTextActions(QTextCursor cursor) +{ + if (cursor.isNull()) + return; + Worksheet::RichTextInfo info; + QTextCharFormat fmt = cursor.charFormat(); + info.bold = (fmt.fontWeight() == QFont::Bold); + info.italic = fmt.fontItalic(); + info.underline = fmt.fontUnderline(); + info.strikeOut = fmt.fontStrikeOut(); + info.font = fmt.fontFamily(); + info.fontSize = fmt.font().pointSize(); + + QTextBlockFormat bfmt = cursor.blockFormat(); + info.align = bfmt.alignment(); + + worksheet()->setRichTextInformation(info); +} + +void WorksheetTextItem::mergeFormatOnWordOrSelection(const QTextCharFormat &format) +{ + qDebug() << format; + QTextCursor cursor = textCursor(); + QTextCursor wordStart(cursor); + QTextCursor wordEnd(cursor); + + wordStart.movePosition(QTextCursor::StartOfWord); + wordEnd.movePosition(QTextCursor::EndOfWord); + + //cursor.beginEditBlock(); + if (!cursor.hasSelection() && cursor.position() != wordStart.position() && cursor.position() != wordEnd.position()) + cursor.select(QTextCursor::WordUnderCursor); + cursor.mergeCharFormat(format); + //q->mergeCurrentCharFormat(format); + //cursor.endEditBlock(); + setTextCursor(cursor); +} + +void WorksheetTextItem::setTextForegroundColor() +{ + QTextCharFormat fmt = textCursor().charFormat(); + QColor color = fmt.foreground().color(); + + color = QColorDialog::getColor(color, worksheetView()); + if (!color.isValid()) + color = KColorScheme(QPalette::Active, KColorScheme::View).foreground().color(); + + QTextCharFormat newFmt; + newFmt.setForeground(color); + mergeFormatOnWordOrSelection(newFmt); +} + +void WorksheetTextItem::setTextBackgroundColor() +{ + QTextCharFormat fmt = textCursor().charFormat(); + QColor color = fmt.background().color(); + + color = QColorDialog::getColor(color, worksheetView()); + if (!color.isValid()) + color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); + + QTextCharFormat newFmt; + newFmt.setBackground(color); + mergeFormatOnWordOrSelection(newFmt); +} + +void WorksheetTextItem::setTextBold(bool b) +{ + QTextCharFormat fmt; + fmt.setFontWeight(b ? QFont::Bold : QFont::Normal); + mergeFormatOnWordOrSelection(fmt); +} + +void WorksheetTextItem::setTextItalic(bool b) +{ + QTextCharFormat fmt; + fmt.setFontItalic(b); + mergeFormatOnWordOrSelection(fmt); +} + +void WorksheetTextItem::setTextUnderline(bool b) +{ + QTextCharFormat fmt; + fmt.setFontUnderline(b); + mergeFormatOnWordOrSelection(fmt); +} + +void WorksheetTextItem::setTextStrikeOut(bool b) +{ + QTextCharFormat fmt; + fmt.setFontStrikeOut(b); + mergeFormatOnWordOrSelection(fmt); +} + +void WorksheetTextItem::setAlignment(Qt::Alignment a) +{ + QTextBlockFormat fmt; + fmt.setAlignment(a); + QTextCursor cursor = textCursor(); + cursor.mergeBlockFormat(fmt); + setTextCursor(cursor); +} + + +void WorksheetTextItem::setFontFamily(const QString& font) +{ + if (!richTextEnabled()) + return; + QTextCharFormat fmt; + fmt.setFontFamily(font); + mergeFormatOnWordOrSelection(fmt); +} + +void WorksheetTextItem::setFontSize(int size) +{ + if (!richTextEnabled()) + return; + QTextCharFormat fmt; + fmt.setFontPointSize(size); + mergeFormatOnWordOrSelection(fmt); +} + +void WorksheetTextItem::allowEditing() +{ + setTextInteractionFlags(Qt::TextEditorInteraction); +} + +void WorksheetTextItem::denyEditing() +{ + setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard); +} diff --git a/src/worksheettextitem.h b/src/worksheettextitem.h new file mode 100644 index 0000000..932d9ae --- /dev/null +++ b/src/worksheettextitem.h @@ -0,0 +1,178 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + + +#ifndef WORKSHEET_TEXT_ITEM_H +#define WORKSHEET_TEXT_ITEM_H + +#include +#include +#include + +#include +#include + +class Worksheet; +class WorksheetView; +class WorksheetCursor; + +namespace Cantor { + class Session; +} + +class QTextCharFormat; + +class WorksheetTextItem : public QGraphicsTextItem +{ + Q_OBJECT + public: + explicit WorksheetTextItem(QGraphicsObject* parent, + Qt::TextInteractionFlags ti = Qt::NoTextInteraction); + ~WorksheetTextItem() override; + + void setCursorPosition(const QPointF& pos); + QPointF cursorPosition() const; + QTextCursor cursorForPosition(const QPointF& pos) const; + QRectF sceneCursorRect(QTextCursor cursor = QTextCursor()) const; + QRectF cursorRect(QTextCursor cursor = QTextCursor()) const; + + enum {TopLeft, BottomRight, TopCoord, BottomCoord}; + enum {Type = UserType + 100}; + + int type() const override; + + void setFocusAt(int pos = TopLeft, qreal xCoord = 0); + + void enableCompletion(bool b); + void activateCompletion(bool b); + void setItemDragable(bool b); + void enableRichText(bool b); + + virtual void populateMenu(QMenu* menu, QPointF pos); + QString resolveImages(const QTextCursor& cursor); + + bool isEditable(); + void allowEditing(); + void denyEditing(); + void setBackgroundColor(const QColor&); + const QColor& backgroundColor() const; + bool richTextEnabled(); + double width() const; + double height() const; + virtual qreal setGeometry(qreal x, qreal y, qreal w, bool centered=false); + + Worksheet* worksheet(); + WorksheetView* worksheetView(); + + void clearSelection(); + + bool isUndoAvailable(); + bool isRedoAvailable(); + bool isCutAvailable(); + bool isCopyAvailable(); + bool isPasteAvailable(); + + // richtext stuff + void setTextForegroundColor(); + void setTextBackgroundColor(); + void setTextBold(bool b); + void setTextItalic(bool b); + void setTextUnderline(bool b); + void setTextStrikeOut(bool b); + void setAlignment(Qt::Alignment a); + void setFontFamily(const QString& font); + void setFontSize(int size); + + QTextCursor search(QString pattern, + QTextDocument::FindFlags qt_flags, + const WorksheetCursor& pos); + + Q_SIGNALS: + void moveToPrevious(int pos, qreal xCoord); + void moveToNext(int pos, qreal xCoord); + void cursorPositionChanged(QTextCursor); + void receivedFocus(WorksheetTextItem*); + void tabPressed(); + void backtabPressed(); + void applyCompletion(); + void doubleClick(); + void execute(); + void deleteEntry(); + void sizeChanged(); + void menuCreated(QMenu*, const QPointF&); + void drag(const QPointF&, const QPointF&); + void undoAvailable(bool); + void redoAvailable(bool); + void cutAvailable(bool); + void copyAvailable(bool); + void pasteAvailable(bool); + + public Q_SLOTS: + void insertTab(); + void cut(); + void copy(); + void paste(); + void undo(); + void redo(); + void clipboardChanged(); + void selectionChanged(); + + protected: + void keyPressEvent(QKeyEvent *event) override; + void focusInEvent(QFocusEvent *event) override; + void focusOutEvent(QFocusEvent *event) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; + void mouseMoveEvent(QGraphicsSceneMouseEvent* event) override; + void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override; + void dragEnterEvent(QGraphicsSceneDragDropEvent* event) override; + //void dragLeaveEvent(QGraphicsSceneDragDropEvent* event); + void dragMoveEvent(QGraphicsSceneDragDropEvent* event) override; + void dropEvent(QGraphicsSceneDragDropEvent* event) override; + bool sceneEvent(QEvent *event) override; + void paint(QPainter* painter, const QStyleOptionGraphicsItem* o, QWidget* w) override; + + private Q_SLOTS: + //void setHeight(); + void testSize(); + void updateRichTextActions(QTextCursor cursor); + + private: + void setLocalCursorPosition(const QPointF& pos); + QPointF localCursorPosition() const; + + QKeyEvent* eventForStandardAction(KStandardAction::StandardAction actionID); + Cantor::Session* session(); + + // richtext + void mergeFormatOnWordOrSelection(const QTextCharFormat &format); + + private: + QSizeF m_size; + qreal m_maxWidth; + bool m_completionEnabled; + bool m_completionActive; + bool m_itemDragable; + bool m_richTextEnabled; + QColor m_backgroundColor; +}; + +#endif // WORKSHEET_TEXT_ITEM_H diff --git a/src/worksheettoolbutton.cpp b/src/worksheettoolbutton.cpp new file mode 100644 index 0000000..9659dd1 --- /dev/null +++ b/src/worksheettoolbutton.cpp @@ -0,0 +1,84 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheettoolbutton.h" +#include +#include +#include +#include + +WorksheetToolButton::WorksheetToolButton(QGraphicsItem* parent) + : QGraphicsObject(parent) +{ + m_size = QSize(16, 16); + setCursor(QCursor(Qt::ArrowCursor)); + m_scale = 0; +} + +void WorksheetToolButton::setIcon(const QIcon& icon) +{ + m_icon = icon; +} + +qreal WorksheetToolButton::width() +{ + return m_size.width(); +} + +qreal WorksheetToolButton::height() +{ + return m_size.height(); +} + +QRectF WorksheetToolButton::boundingRect() const +{ + return QRectF(0, 0, m_size.width(), m_size.height()); +} + +void WorksheetToolButton::setIconScale(qreal scale) +{ + m_scale = scale; + m_pixmap = m_icon.pixmap(m_size * m_scale); +} + +void WorksheetToolButton::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, + QWidget* widget) +{ + Q_UNUSED(option); + Q_UNUSED(widget); + if (m_scale == 0) + setIconScale(1); + QRectF rect(QPointF(0,0), m_size); + painter->drawPixmap(rect, m_pixmap, m_pixmap.rect()); +} + +void WorksheetToolButton::mousePressEvent(QGraphicsSceneMouseEvent* event) +{ + Q_UNUSED(event); + + emit pressed(); +} + +void WorksheetToolButton::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) +{ + if (boundingRect().contains(event->pos())) + emit clicked(); +} diff --git a/src/worksheettoolbutton.h b/src/worksheettoolbutton.h new file mode 100644 index 0000000..8df62b7 --- /dev/null +++ b/src/worksheettoolbutton.h @@ -0,0 +1,60 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef WORKSHEETTOOLBUTTON_H +#define WORKSHEETTOOLBUTTON_H + +#include +#include + +#include + +class WorksheetToolButton : public QGraphicsObject +{ + Q_OBJECT + public: + explicit WorksheetToolButton(QGraphicsItem* parent); + ~WorksheetToolButton() override = default; + + void setIcon(const QIcon& icon); + + qreal width(); + qreal height(); + QRectF boundingRect() const override; + void setIconScale(qreal scale); + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, + QWidget* widget = nullptr) override; + + Q_SIGNALS: + void clicked(); + void pressed(); + + protected: + void mousePressEvent(QGraphicsSceneMouseEvent* event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override; + + private: + QSize m_size; + QPixmap m_pixmap; + QIcon m_icon; + qreal m_scale; +}; + +#endif //WORKSHEETTOOLBUTTON_H diff --git a/src/worksheetview.cpp b/src/worksheetview.cpp new file mode 100644 index 0000000..0d50527 --- /dev/null +++ b/src/worksheetview.cpp @@ -0,0 +1,285 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#include "worksheetview.h" +#include "worksheet.h" + +#include +#include +#include + +WorksheetView::WorksheetView(Worksheet* scene, QWidget* parent) : QGraphicsView(scene, parent), + m_scale(1), + m_animation(nullptr), + m_hAnimation(nullptr), + m_vAnimation(nullptr), + m_worksheet(scene) +{ + connect(scene, SIGNAL(sceneRectChanged(QRectF)), + this, SLOT(sceneRectChanged(QRectF))); + setAlignment(Qt::AlignLeft | Qt::AlignTop); + //setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); +} + +void WorksheetView::makeVisible(const QRectF& sceneRect) +{ + const qreal w = viewport()->width(); + const qreal h = viewport()->height(); + + QRectF rect(m_scale*sceneRect.topLeft(), m_scale*sceneRect.size()); + + qreal x,y; + if (m_animation) { + x = m_hAnimation->endValue().toReal(); + y = m_vAnimation->endValue().toReal(); + + if (QRectF(x,y,w,h).contains(rect)) + return; + } + + if (horizontalScrollBar()) + x = horizontalScrollBar()->value(); + else + x = 0; + if (verticalScrollBar()) + y = verticalScrollBar()->value(); + else + y = 0; + + if (!m_animation && QRectF(x,y,w,h).contains(rect)) + return; + + qreal nx, ny; + if (y > rect.y() || rect.height() > h) + ny = rect.y(); + else + ny = rect.y() + rect.height() - h; + if (rect.x() + rect.width() <= w || x > rect.x()) + nx = 0; + else + nx = rect.x() + rect.width() - w; + + if (!m_worksheet->animationsEnabled()) { + if (horizontalScrollBar()) + horizontalScrollBar()->setValue(nx); + if (verticalScrollBar()) + verticalScrollBar()->setValue(ny); + return; + } + + if (!m_animation) + m_animation = new QParallelAnimationGroup(this); + + if (horizontalScrollBar()) { + if (!m_hAnimation) { + m_hAnimation = new QPropertyAnimation(horizontalScrollBar(), + "value", this); + m_hAnimation->setStartValue(horizontalScrollBar()->value()); + nx = qBound(qreal(0.0), nx, qreal(0.0+horizontalScrollBar()->maximum())); + m_hAnimation->setEndValue(nx); + m_hAnimation->setDuration(100); + m_animation->addAnimation(m_hAnimation); + } else { + qreal progress = static_cast(m_hAnimation->currentTime()) / + m_hAnimation->totalDuration(); + QEasingCurve curve = m_hAnimation->easingCurve(); + qreal value = curve.valueForProgress(progress); + qreal sx = 1/(1-value)*(m_hAnimation->currentValue().toReal() - + value * nx); + m_hAnimation->setStartValue(sx); + m_hAnimation->setEndValue(nx); + } + } else { + m_hAnimation = nullptr; + } + + if (verticalScrollBar()) { + if (!m_vAnimation) { + m_vAnimation = new QPropertyAnimation(verticalScrollBar(), + "value", this); + m_vAnimation->setStartValue(verticalScrollBar()->value()); + ny = qBound(qreal(0.0), ny, qreal(0.0+verticalScrollBar()->maximum())); + m_vAnimation->setEndValue(ny); + m_vAnimation->setDuration(100); + m_animation->addAnimation(m_vAnimation); + } else { + qreal progress = static_cast(m_vAnimation->currentTime()) / + m_vAnimation->totalDuration(); + QEasingCurve curve = m_vAnimation->easingCurve(); + qreal value = curve.valueForProgress(progress); + qreal sy = 1/(1-value)*(m_vAnimation->currentValue().toReal() - + value * ny); + m_vAnimation->setStartValue(sy); + m_vAnimation->setEndValue(ny); + } + } else { + m_vAnimation = nullptr; + } + + connect(m_animation, &QParallelAnimationGroup::finished, this, &WorksheetView::endAnimation); + m_animation->start(); +} + +bool WorksheetView::isVisible(const QRectF& sceneRect) const +{ + const qreal w = viewport()->width(); + const qreal h = viewport()->height(); + + QRectF rect(m_scale*sceneRect.topLeft(), m_scale*sceneRect.size()); + + qreal x,y; + if (m_animation) { + x = m_hAnimation->endValue().toReal(); + y = m_vAnimation->endValue().toReal(); + } else { + if (horizontalScrollBar()) + x = horizontalScrollBar()->value(); + else + x = 0; + if (verticalScrollBar()) + y = verticalScrollBar()->value(); + else + y = 0; + } + + return QRectF(x,y,w,h).contains(rect); +} + +bool WorksheetView::isAtEnd() const +{ + bool atEnd = true; + if (verticalScrollBar()) + atEnd &= (verticalScrollBar()->value()==verticalScrollBar()->maximum()); + return atEnd; +} + +void WorksheetView::scrollToEnd() const +{ + if (verticalScrollBar()) + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); +} + +void WorksheetView::scrollBy(int dy) +{ + if (!verticalScrollBar()) + return; + + int ny = verticalScrollBar()->value() + dy; + if (ny < 0) + ny = 0; + else if (ny > verticalScrollBar()->maximum()) + ny = verticalScrollBar()->maximum(); + + int x; + if (horizontalScrollBar()) + x = horizontalScrollBar()->value(); + else + x = 0; + + const qreal w = viewport()->width() / m_scale; + const qreal h = viewport()->height() / m_scale; + makeVisible(QRectF(x, ny, w, h)); +} + +void WorksheetView::endAnimation() +{ + if (!m_animation) + return; + + m_animation->deleteLater(); + m_hAnimation = nullptr; + m_vAnimation = nullptr; + m_animation = nullptr; +} + +QPoint WorksheetView::viewCursorPos() const +{ + return viewport()->mapFromGlobal(QCursor::pos()); +} + +QPointF WorksheetView::sceneCursorPos() const +{ + return mapToScene(viewCursorPos()); +} + +QRectF WorksheetView::viewRect() const +{ + const qreal w = viewport()->width() / m_scale; + const qreal h = viewport()->height() / m_scale; + qreal y = verticalScrollBar()->value(); + qreal x = horizontalScrollBar() ? horizontalScrollBar()->value() : 0; + return QRectF(x, y, w, h); +} + +void WorksheetView::resizeEvent(QResizeEvent* event) +{ + QGraphicsView::resizeEvent(event); + updateSceneSize(); +} + +qreal WorksheetView::scaleFactor() const +{ + return m_scale; +} + +void WorksheetView::updateSceneSize() +{ + QSize s = viewport()->size(); + m_worksheet->setViewSize(s.width()/m_scale, s.height()/m_scale, m_scale); + sendViewRectChange(); +} + +void WorksheetView::sceneRectChanged(const QRectF& sceneRect) const +{ + Q_UNUSED(sceneRect); + if (verticalScrollBar()) + connect(verticalScrollBar(), SIGNAL(valueChanged(int)), + this, SLOT(sendViewRectChange()), Qt::UniqueConnection); + if (horizontalScrollBar()) + connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), + this, SLOT(sendViewRectChange()), Qt::UniqueConnection); +} + +void WorksheetView::sendViewRectChange() const +{ + emit viewRectChanged(viewRect()); +} + +void WorksheetView::zoomIn() +{ + m_scale *= 1.1; + scale(1.1, 1.1); + updateSceneSize(); +} + +void WorksheetView::zoomOut() +{ + m_scale /= 1.1; + scale(1/1.1, 1/1.1); + updateSceneSize(); +} + +void WorksheetView::actualSize() +{ + scale (1/m_scale, 1/m_scale); + m_scale = 1.0; + updateSceneSize(); +} diff --git a/src/worksheetview.h b/src/worksheetview.h new file mode 100644 index 0000000..160a750 --- /dev/null +++ b/src/worksheetview.h @@ -0,0 +1,70 @@ +/* + 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. + + --- + Copyright (C) 2012 Martin Kuettler + */ + +#ifndef WORKSHEETVIEW_H +#define WORKSHEETVIEW_H + +#include + +class QParallelAnimationGroup; +class QPropertyAnimation; + +class Worksheet; + +class WorksheetView : public QGraphicsView +{ + Q_OBJECT +public: + WorksheetView(Worksheet* scene, QWidget* parent); + + void makeVisible(const QRectF& sceneRect); + bool isVisible(const QRectF& sceneRect) const; + bool isAtEnd() const; + void scrollToEnd() const; + void scrollBy(int dy); + + QPoint viewCursorPos() const; + QPointF sceneCursorPos() const; + QRectF viewRect() const; + qreal scaleFactor() const; + void updateSceneSize(); + +Q_SIGNALS: + void viewRectChanged(QRectF rect) const; + +public Q_SLOTS: + void zoomIn(); + void zoomOut(); + void actualSize(); + void endAnimation(); + void sceneRectChanged(const QRectF& sceneRect) const; + void sendViewRectChange() const; + +private: + void resizeEvent(QResizeEvent*) override; + + qreal m_scale; + QParallelAnimationGroup* m_animation; + QPropertyAnimation* m_hAnimation; + QPropertyAnimation* m_vAnimation; + Worksheet* m_worksheet; +}; + +#endif //WORKSHEETVIEW_H diff --git a/src/xslt/CMakeLists.txt b/src/xslt/CMakeLists.txt new file mode 100644 index 0000000..ecb63a5 --- /dev/null +++ b/src/xslt/CMakeLists.txt @@ -0,0 +1 @@ +install( FILES latex.xsl DESTINATION ${KDE_INSTALL_DATADIR}/cantor/xslt ) diff --git a/src/xslt/latex.xsl b/src/xslt/latex.xsl new file mode 100644 index 0000000..5b38f0d --- /dev/null +++ b/src/xslt/latex.xsl @@ -0,0 +1,79 @@ + + + + + +\documentclass[a4paper,10pt,fleqn]{article} + +\usepackage{fullpage} +\usepackage{graphicx} +\usepackage[utf8]{inputenc} +\usepackage{amsmath,amssymb} + +\begin{document} + + +\end{document} + + + + + + + + +\begin{verbatim} + + \end{verbatim} + + + + + \newpage{} + + + + +\begin{center} +\includegraphics + +{ + +} \end{center} + + + + + + + + + +\begin{itemize} + +\end{itemize} + + + +\begin{enumerate} + +\end{enumerate} + + + + \item + + + + + + + + + + + + + + + -- 2.30.2
    See %3 for more " +#| "information